marvinpinto.htpc

htpc

Build Status Ansible Galaxy License

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

  1. Du benötigst eine Domain, um dies zu hosten - diese Einrichtung nutzt htpc-sample.example.org als Beispiel. Aktualisiere die Variable htpc_dns_hostname mit deiner Domain.

  2. 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 und htpc_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.

  3. Generiere einen zufälligen 32-Byte-String mit:

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

    Verwende diesen Wert als htpc_oauth_cookie_secret.

  4. Beschaffe ein https TLS-Zertifikat für die Domain, die du gewählt hast (htpc_dns_hostname). Aktualisiere die Variablen htpc_tls_cert und htpc_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

  1. Gehe zu /sabnzbd in deinem Browser und folge dem Startassistenten.

  2. In /sabnzbd/config/general/ solltest du wahrscheinlich API-Schlüssel deaktivieren (nicht nötig, da es hinter OAuth2 Proxy läuft).

  3. 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
  1. In /sabnzbd/config/categories/:
  • Filmverarbeitung:

    • Kategorie: movies
    • Skript: nzbToCouchPotato.py
    • Ordner/Pfad: /opt/downloads/unprocessed/movies
  • TV-Verarbeitung:

    • Kategorie: tv
    • Skript: nzbToSickBeard.py
    • Ordner/Pfad: /opt/downloads/tv
  • Audio-Verarbeitung:

    • Kategorie: audio
    • Skript: nzbToHeadPhones.py
    • Ordner/Pfad: /opt/downloads/unprocessed/audio
  1. 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
  1. In /sabnzbd/config/special/:
  • empty_postproc: ein

SickRage

  1. Stoppe den SickRage-Dienst:
$ service sickrage stop
  1. 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
  1. 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
  1. Starte den SickRage-Dienst:
$ service sickrage start

CouchPotato

  1. Stoppe den CouchPotato-Dienst:
$ service couchpotato stop
  1. 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
  1. Füge den folgenden Schlüssel/Wert unter dem Abschnitt [core] in /opt/config/couchpotato-config/settings.conf hinzu
host = 127.0.0.1
  1. Starte den CouchPotato-Dienst:
$ service couchpotato start
  1. Gehe zu /couchpotato/settings/general in deinem Browser und deaktiviere die regelmäßige Update-Überprüfung.

  2. 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.
  1. 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

  1. Stoppe den Headphones-Dienst:
$ service headphones stop
  1. 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
  1. 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
  1. Starte den Headphones-Dienst:
$ service headphones start

Entwicklung

Verwende die bereitgestellte Vagrantfile für die lokale Entwicklung und Tests.

$ vagrant up --provision
Über das Projekt

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

Installieren
ansible-galaxy install marvinpinto.htpc
GitHub Repository
Lizenz
mit
Downloads
69
Besitzer
Computer nerd.