marvinpinto.htpc
htpc
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
Vous aurez besoin d'un domaine pour héberger cela - cette configuration utilise
htpc-sample.example.org
comme exemple. Mettez à jour la variablehtpc_dns_hostname
avec votre domaine.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
ethtpc_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.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
.Obtenez un certificat TLS HTTPS pour le domaine que vous avez choisi (
htpc_dns_hostname
). Mettez à jour les variableshtpc_tls_cert
ethtpc_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
Accédez à
/sabnzbd
dans votre navigateur et suivez l'assistant de configuration initiale.Dans
/sabnzbd/config/general/
, vous souhaiterez probablement Désactiver la clé API (pas nécessaire car cela fonctionne derrière OAuth2 Proxy).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
- Dans
/sabnzbd/config/categories/
:
Traitement des films :
- Catégorie :
movies
- Script :
nzbToCouchPotato.py
- Dossier/chemin :
/opt/downloads/unprocessed/movies
- Catégorie :
Traitement des séries TV :
- Catégorie :
tv
- Script :
nzbToSickBeard.py
- Dossier/chemin :
/opt/downloads/tv
- Catégorie :
Traitement audio :
- Catégorie :
audio
- Script :
nzbToHeadPhones.py
- Dossier/chemin :
/opt/downloads/unprocessed/audio
- Catégorie :
- 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
- Dans
/sabnzbd/config/special/
:
empty_postproc
:on
SickRage
- Arrêtez le service SickRage :
$ service sickrage stop
- 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
- 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
- Démarrez le service SickRage :
$ service sickrage start
CouchPotato
- Arrêtez le service CouchPotato :
$ service couchpotato stop
- 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
- Ajoutez la clé/valeur suivante sous la section
[core]
dans/opt/config/couchpotato-config/settings.conf
host = 127.0.0.1
- Démarrez le service CouchPotato :
$ service couchpotato start
Accédez à
/couchpotato/settings/general
dans votre navigateur et désactivez la vérification périodique des mises à jour.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
- 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>
Où 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
- Arrêtez le service Headphones :
$ service headphones stop
- 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
- 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
- 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
This is an Ansible Galaxy meta-role of sorts to install and manage a sample Home Theatre PC (HTPC) setup.
ansible-galaxy install marvinpinto.htpc