marvinpinto.htpc

htpc

Statut de construction Ansible Galaxy Licence

Ceci est un rôle méta Ansible Galaxy pour installer et gérer un exemple de configuration de PC de home cinéma (HTPC).

L'objectif de ce projet est de montrer comment utiliser Ansible pour rassembler les composants nécessaires à une configuration HTPC. Rassembler toutes les pièces a traditionnellement été la partie la plus difficile, espérons que cela facilitera les choses.

Fonctionnalités

  • Téléchargeur de nouveaux groupes binaires SABnzbd
  • Gestionnaire de bibliothèque vidéo SickRage pour les émissions de télévision
  • Gestionnaire de PVR et de bibliothèque vidéo CouchPotato pour les films
  • Serveur multimédia Plex pour les films, les émissions de télévision, la musique, etc.
  • Proxy frontal nginx avec authentification Google (via OAuth2 Proxy)
  • Tous conçus pour être assemblés sur un serveur Ubuntu 14.04

Pré-requis

  1. Vous aurez besoin d'un domaine pour héberger cela - cette configuration utilise htpc-sample.example.org comme exemple. Mettez à jour la variable htpc_dns_hostname avec votre domaine.

  2. La configuration par défaut utilise l'authentification Google, donc vous devrez enregistrer une application Web OAuth (instructions ici) et noter le Client ID et le Client Secret. (variables correspondantes htpc_oauth_client_id et htpc_oauth_client_secret)

    Vous n'êtes pas limité à utiliser le fournisseur d'authentification Google, il y a d'autres options valides aussi ! N'oubliez pas d'ajuster la variable oauth2_proxy_cli_args si vous choisissez cette option.

  3. Générez une chaîne aléatoire de 32 octets en utilisant :

    $ date +%s | sha256sum | base64 | head -c 32 ; echo
    

    Utilisez cette valeur comme votre htpc_oauth_cookie_secret.

  4. Obtenez un certificat TLS HTTPS pour le domaine que vous avez choisi (htpc_dns_hostname). Mettez à jour les variables htpc_tls_cert et htpc_tls_cert_key avec votre certificat et votre clé privée (respectivement).

Variables de rôle

Les variables spécifiques au rôle htpc sont toutes spécifiées dans defaults/main.yml, tandis que les variables méta spécifiques au rôle se trouvent dans meta/main.yml.

Exemple

Installez ce module depuis Ansible Galaxy dans le répertoire './roles' :

ansible-galaxy install marvinpinto.htpc -p ./roles

Utilisez-le dans un playbook comme suit :

- hosts: '127.0.0.1'
  become: true
  roles:
    - role: 'marvinpinto.htpc'
      htpc_dns_hostname: 'htpc-sample.example.org'
      htpc_oauth_client_id: 'votre-client-id'
      htpc_oauth_client_secret: 'votre-client-secret'
      htpc_oauth_cookie_secret: 'N2U2NTI0NzljNjc2Y2VmNGVlZDZmMDg5'
      htpc_authorized_users_emails: |
        [email protected]
        [email protected]
      htpc_tls_cert: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
      htpc_tls_cert_key: |
        -----BEGIN RSA PRIVATE KEY-----
        ...
        -----END RSA PRIVATE KEY-----

Configuration après installation

SABnzbd

  1. Accédez à /sabnzbd dans votre navigateur et suivez l'assistant de configuration initiale.

  2. Dans /sabnzbd/config/general/, vous souhaiterez probablement Désactiver la clé API (pas nécessaire car cela fonctionne derrière OAuth2 Proxy).

  3. Dans /sabnzbd/config/folders/ :

  • Dossier de téléchargement temporaire : /opt/downloads/sabnzbd-incomplete
  • Dossier de téléchargement terminé : /opt/downloads/misc
  • Permissions des téléchargements terminés : 777
  • Dossier des scripts : /opt/nzbtomedia
  1. Dans /sabnzbd/config/categories/ :
  • Traitement des films :

    • Catégorie : movies
    • Script : nzbToCouchPotato.py
    • Dossier/chemin : /opt/downloads/unprocessed/movies
  • Traitement des séries TV :

    • Catégorie : tv
    • Script : nzbToSickBeard.py
    • Dossier/chemin : /opt/downloads/tv
  • Traitement audio :

    • Catégorie : audio
    • Script : nzbToHeadPhones.py
    • Dossier/chemin : /opt/downloads/unprocessed/audio
  1. Dans /sabnzbd/config/switches/ :
  • Action lorsque RAR chiffré est téléchargé : abort
  • Action lorsque extension indésirable détectée : abort
  • Extensions indésirables : exe, com
  • Post-traiter uniquement les travaux vérifiés : off
  • Ignorer les échantillons : on
  • Liste de nettoyage : nfo, sfv
  1. Dans /sabnzbd/config/special/ :
  • empty_postproc: on

SickRage

  1. Arrêtez le service SickRage :
$ service sickrage stop
  1. Autorisez nginx à faire passer les requêtes à SickRage
$ sed -i 's/^web_root = ""/web_root = \/sickrage/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^handle_reverse_proxy = 0/handle_reverse_proxy = 1/g' /opt/config/sickrage-config/config.ini
  1. Autres configurations diverses de SickRage
$ sed -i 's/^use_failed_downloads = 0/use_failed_downloads = 1/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^log_nr = 5/log_nr = 1/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^auto_update =.*/auto_update = 0/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^version_notify =.*/version_notify = 0/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^naming_pattern =.*/naming_pattern = %S.N.S%0SE%0E.%E.N/g' /opt/config/sickrage-config/config.ini
$ sed -i 's/^web_host =.*/web_host = 127.0.0.1/g' /opt/config/sickrage-config/config.ini
  1. Démarrez le service SickRage :
$ service sickrage start

CouchPotato

  1. Arrêtez le service CouchPotato :
$ service couchpotato stop
  1. Autorisez nginx à faire passer les requêtes à CouchPotato
$ sed -i 's/^url_base =.*/url_base = \/couchpotato/g' /opt/config/couchpotato-config/settings.conf
$ sed -i 's/^show_wizard =.*/show_wizard = 0/g' /opt/config/couchpotato-config/settings.conf
  1. Ajoutez la clé/valeur suivante sous la section [core] dans /opt/config/couchpotato-config/settings.conf
host = 127.0.0.1
  1. Démarrez le service CouchPotato :
$ service couchpotato start
  1. Accédez à /couchpotato/settings/general dans votre navigateur et désactivez la vérification périodique des mises à jour.

  2. Dans /couchpotato/settings/renamer :

  • Renommer les films téléchargés : Activé
  • Exécuter tous les : 0
  • Depuis : /opt/downloads/unprocessed/movies
  • Vers : /opt/downloads/movies
  • Forcer chaque : 24
  • Nettoyage : Activé
  • Suivant en cas d'échec : Désactivé
  • Prenez note de votre Clé API et mettez à jour la variable htpc_couchpotato_api_key avec cette valeur
  1. Dans /couchpotato/settings/downloaders :
  • Sabnzbd : Activé
  • Hôte : 127.0.0.1:8080
  • Catégorie : movies
  • Supprimer NZB : activé
  • Supprimer les échecs : activé

Serveur multimédia Plex

Étant donné que Plex ne permet d'initier des actions administratives que depuis un sous-réseau local, vous devrez créer un tunnel SSH vers votre machine hôte pour la configuration initiale. Notez que cela n'est nécessaire que pour la configuration initiale.

https://support.plex.tv/hc/en-us/articles/200288586-Installation

Sous sa forme générale, cette commande SSH ressemble à ceci :

ssh ip.address.of.server -L 8888:localhost:32400

Ensuite, en naviguant à http://localhost:8888/web, vous devriez pouvoir configurer votre application Plex.

Dans un environnement vagrant, cette commande SSH ressemble à ceci :

ssh \
  -p <Port> \
  -i <IdentityFile> \
  -L 8888:localhost:32400 \
  <User>@<HostName>

Port, IdentityFile, User, et HostName peuvent tous être trouvés en exécutant :

vagrant ssh-config

Plus d'informations disponibles dans les Docs d'installation de Plex.

Headphones

  1. Arrêtez le service Headphones :
$ service headphones stop
  1. Autorisez nginx à faire passer les requêtes à Headphones
sed -i 's/^http_root =.*/http_root = \/headphones/g' /opt/config/headphones-config/config.ini
sed -i 's/^http_host =.*/http_host = 127.0.0.1/g' /opt/config/headphones-config/config.ini
  1. Autres options de configuration
sed -i 's/^music_encoder =.*/music_encoder = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^preferred_quality =.*/preferred_quality = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^rename_files =.*/rename_files = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^folder_format =.*/folder_format = $Type/$Artist/$Album [$Year]/g' /opt/config/headphones-config/config.ini
sed -i 's/^move_files =.*/move_files = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^cleanup_files =.*/cleanup_files = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^embed_album_art =.*/embed_album_art = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^destination_dir =.*/destination_dir = \/opt\/downloads\/audio/g' /opt/config/headphones-config/config.ini
sed -i 's/^download_dir =.*/download_dir = \/opt\/downloads\/unprocessed\/audio/g' /opt/config/headphones-config/config.ini
sed -i 's/^launch_browser =.*/launch_browser = 0/g' /opt/config/headphones-config/config.ini
sed -i 's/^api_key =.*/api_key = YOURAPIKEY/g' /opt/config/headphones-config/config.ini
sed -i 's/^encoder_multicore =.*/encoder_multicore = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^api_enabled =.*/api_enabled = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^correct_metadata =.*/correct_metadata = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^encoder =.*/encoder = libav/g' /opt/config/headphones-config/config.ini
sed -i 's/^download_scan_interval =.*/download_scan_interval = 0/g' /opt/config/headphones-config/config.ini
sed -i 's/^bitrate =.*/bitrate = 256/g' /opt/config/headphones-config/config.ini
sed -i 's/^wait_until_release_date =.*/wait_until_release_date = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^embed_lyrics =.*/embed_lyrics = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^encoderoutputformat =.*/encoderoutputformat = m4a/g' /opt/config/headphones-config/config.ini
sed -i 's/^sab_host =.*/sab_host = http:\/\/127.0.0.1:8080/g' /opt/config/headphones-config/config.ini
sed -i 's/^sab_category =.*/sab_category = audio/g' /opt/config/headphones-config/config.ini
sed -i 's/^sab_apikey =.*/sab_apikey = sabapi1234/g' /opt/config/headphones-config/config.ini
sed -i 's/^songkick_enabled =.*/songkick_enabled = 0/g' /opt/config/headphones-config/config.ini
sed -i 's/^log_dir =.*/log_dir = \/opt\/config\/headphones-config\/logs/g' /opt/config/headphones-config/config.ini
sed -i 's/^include_extras =.*/include_extras = 1/g' /opt/config/headphones-config/config.ini
sed -i 's/^extras =.*/extras = 8/g' /opt/config/headphones-config/config.ini
  1. Démarrez le service Headphones :
$ service headphones start

Développement

Utilisez le Vagrantfile fourni pour le développement et les tests locaux.

$ vagrant up --provision
À propos du projet

This is an Ansible Galaxy meta-role of sorts to install and manage a sample Home Theatre PC (HTPC) setup.

Installer
ansible-galaxy install marvinpinto.htpc
Licence
mit
Téléchargements
69
Propriétaire
Computer nerd.