marvinpinto.htpc
htpc
Dies ist eine Ansible Galaxy Meta-Rolle, um ein Beispiel für eine Home Theatre PC (HTPC) Einrichtung zu installieren und zu verwalten.
Ziel dieses Projekts ist es zu zeigen, wie man Ansible nutzen kann, um die verschiedenen Komponenten für eine HTPC Einrichtung zusammenzufügen. Das Zusammenfügen aller Teile war traditionell der schwerste Teil, hoffentlich macht dies die Dinge einfacher.
Funktionen
- SABnzbd Binär-Newsreader Downloader
- SickRage Video-Bibliotheksmanager für TV-Sendungen
- CouchPotato PVR- und Video-Bibliotheksmanager für Filme
- Plex Medienserver für Filme, TV-Sendungen, Musik usw.
- nginx Proxy-Frontend mit Google-Authentifizierung (über OAuth2 Proxy)
- Alle entwickelt, um auf einem Ubuntu 14.04 Server zusammenzuarbeiten.
Voraussetzungen
Du benötigst eine Domain, um dies zu hosten - diese Einrichtung nutzt
htpc-sample.example.org
als Beispiel. Aktualisiere die Variablehtpc_dns_hostname
mit deiner Domain.Die Standardkonfiguration verwendet Google-Authentifizierung, also musst du eine OAuth-Webanwendung registrieren (Anleitung hier) und die Client-ID und Client-Secret notieren. (entsprechende Variablen
htpc_oauth_client_id
undhtpc_oauth_client_secret
)Du bist nicht auf den Google-Authentifizierungsanbieter beschränkt, es gibt auch andere gültige Optionen! Denke daran, die Variable
oauth2_proxy_cli_args
anzupassen, wenn du diesen Weg wählst.Generiere einen zufälligen 32-Byte-String mit:
$ date +%s | sha256sum | base64 | head -c 32 ; echo
Verwende diesen Wert als
htpc_oauth_cookie_secret
.Beschaffe ein https TLS-Zertifikat für die Domain, die du gewählt hast (
htpc_dns_hostname
). Aktualisiere die Variablenhtpc_tls_cert
undhtpc_tls_cert_key
mit deinem Zertifikat und deinem privaten Schlüssel (jeweils).
Rollenvariablen
Die spezifischen Rollenvariablen für htpc
sind alle in
defaults/main.yml angegeben, während die
rollenspezifischen Meta-Variablen in meta/main.yml zu finden sind.
Beispiel
Installiere dieses Modul von Ansible Galaxy in das Verzeichnis './roles':
ansible-galaxy install marvinpinto.htpc -p ./roles
Verwende es in einem Playbook wie folgt:
- hosts: '127.0.0.1'
become: true
roles:
- role: 'marvinpinto.htpc'
htpc_dns_hostname: 'htpc-sample.example.org'
htpc_oauth_client_id: 'dein-client-id'
htpc_oauth_client_secret: 'dein-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-----
Post-Setup Konfiguration
SABnzbd
Gehe zu
/sabnzbd
in deinem Browser und folge dem Startassistenten.In
/sabnzbd/config/general/
solltest du wahrscheinlich API-Schlüssel deaktivieren (nicht nötig, da es hinter OAuth2 Proxy läuft).In
/sabnzbd/config/folders/
:
- Temporärer Download-Ordner:
/opt/downloads/sabnzbd-incomplete
- Fertiger Download-Ordner:
/opt/downloads/misc
- Berechtigungen für fertige Downloads:
777
- Skripte-Ordner:
/opt/nzbtomedia
- In
/sabnzbd/config/categories/
:
Filmverarbeitung:
- Kategorie:
movies
- Skript:
nzbToCouchPotato.py
- Ordner/Pfad:
/opt/downloads/unprocessed/movies
- Kategorie:
TV-Verarbeitung:
- Kategorie:
tv
- Skript:
nzbToSickBeard.py
- Ordner/Pfad:
/opt/downloads/tv
- Kategorie:
Audio-Verarbeitung:
- Kategorie:
audio
- Skript:
nzbToHeadPhones.py
- Ordner/Pfad:
/opt/downloads/unprocessed/audio
- Kategorie:
- In
/sabnzbd/config/switches/
:
- Aktion, wenn verschlüsseltes RAR heruntergeladen wird:
abbrechen
- Aktion, wenn unerwünschte Erweiterung erkannt wird:
abbrechen
- Unerwünschte Erweiterungen:
exe, com
- Nur verifizierte Jobs nachbearbeiten:
aus
- Proben ignorieren:
ein
- Bereinigungslisten:
nfo, sfv
- In
/sabnzbd/config/special/
:
empty_postproc
:ein
SickRage
- Stoppe den SickRage-Dienst:
$ service sickrage stop
- Erlaube nginx, Anfragen an SickRage weiterzuleiten
$ 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
- Weitere Einstellungen von 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
- Starte den SickRage-Dienst:
$ service sickrage start
CouchPotato
- Stoppe den CouchPotato-Dienst:
$ service couchpotato stop
- Erlaube nginx, Anfragen an CouchPotato weiterzuleiten
$ 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
- Füge den folgenden Schlüssel/Wert unter dem Abschnitt
[core]
in/opt/config/couchpotato-config/settings.conf
hinzu
host = 127.0.0.1
- Starte den CouchPotato-Dienst:
$ service couchpotato start
Gehe zu
/couchpotato/settings/general
in deinem Browser und deaktiviere die regelmäßige Update-Überprüfung.In
/couchpotato/settings/renamer
:
- Heruntergeladene Filme umbenennen:
Aktiviert
- Alle X Minuten ausführen:
0
- Von:
/opt/downloads/unprocessed/movies
- Nach:
/opt/downloads/movies
- Zwang ausführen alle:
24
- Bereinigung:
Aktiviert
- Nächster bei Fehlschlägen:
Deaktiviert
- Notiere deinen API-Schlüssel und aktualisiere die Variable
htpc_couchpotato_api_key
mit diesem Wert.
- In
/couchpotato/settings/downloaders
:
- Sabnzbd:
Aktiviert
- Host:
127.0.0.1:8080
- Kategorie:
movies
- NZB entfernen:
aktiviert
- Fehlerhafte löschen:
aktiviert
Plex Media Server
Da Plex nur administrative Aktionen aus einem lokalen Subnetz zulässt, musst du einen SSH-Tunnel zu deiner Hostmaschine für die Ersteinrichtung erstellen. Beachte, dass dies nur für die Ersteinrichtung erforderlich ist.
https://support.plex.tv/hc/en-us/articles/200288586-Installation
Im Allgemeinen sieht dieser SSH-Befehl so aus:
ssh ip.address.of.server -L 8888:localhost:32400
Dann sollte es dir möglich sein, http://localhost:8888/web zu besuchen, um deine Plex-App zu konfigurieren.
In einer Vagrant-Umgebung sieht dieser SSH-Befehl so aus:
ssh \
-p <Port> \
-i <IdentityFile> \
-L 8888:localhost:32400 \
<User>@<HostName>
Wo Port
, IdentityFile
, User
und HostName
alle
durch das Ausführen von:
vagrant ssh-config
gefunden werden können.
Weitere Informationen findest du in den Installationsdokumenten von Plex.
Headphones
- Stoppe den Headphones-Dienst:
$ service headphones stop
- Erlaube nginx, Anfragen an Headphones weiterzuleiten
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
- Weitere Konfigurationsoptionen
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
- Starte den Headphones-Dienst:
$ service headphones start
Entwicklung
Verwende die bereitgestellte Vagrantfile
für die lokale Entwicklung und Tests.
$ 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