marvinpinto.htpc

htpc

Estado de Construcción Ansible Galaxy Licencia

Este es un meta-rol de Ansible Galaxy para instalar y gestionar una configuración de muestra de un PC de teatro en casa (HTPC).

El objetivo de este proyecto es demostrar cómo se podría usar Ansible para conectar los componentes necesarios para una configuración de HTPC. Conectar todas las piezas ha sido tradicionalmente la parte más difícil, así que esperamos que esto lo haga más fácil.

Características

  • SABnzbd descargador de nuevos grupos binarios
  • SickRage gestor de biblioteca de videos para programas de TV
  • CouchPotato gestor de PVR y biblioteca de videos para películas
  • Plex servidor multimedia para películas, programas de TV, música, etc.
  • nginx proxy frontal con autenticación de Google (a través de OAuth2 Proxy)
  • Todo diseñado para ser conectado en un servidor Ubuntu 14.04

Requisitos Previos

  1. Necesitarás un dominio para alojar esto; esta configuración usa htpc-sample.example.org como ejemplo. Actualiza la variable htpc_dns_hostname con tu dominio.

  2. La configuración predeterminada utiliza autenticación de Google, así que necesitarás registrar una aplicación web OAuth (instrucciones aquí) y anotar el ID de Cliente y el Secreto de Cliente. (variables correspondientes htpc_oauth_client_id y htpc_oauth_client_secret)

    No estás restringido a usar el proveedor de autenticación de Google, ¡también hay otras opciones válidas! Recuerda ajustar la variable oauth2_proxy_cli_args si eliges esta ruta.

  3. Genera una cadena aleatoria de 32 bytes usando:

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

    Usa este valor como tu htpc_oauth_cookie_secret.

  4. Obtén un certificado TLS https para el dominio que elegiste (htpc_dns_hostname). Actualiza las variables htpc_tls_cert y htpc_tls_cert_key con tu certificado y clave privada (respectivamente).

Variables del Rol

Las variables específicas del rol htpc están especificadas en defaults/main.yml mientras que las variables meta específicas del rol están en meta/main.yml.

Ejemplo

Instala este módulo desde Ansible Galaxy en el directorio './roles':

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

Úsalo en un playbook de la siguiente manera:

- hosts: '127.0.0.1'
  become: true
  roles:
    - role: 'marvinpinto.htpc'
      htpc_dns_hostname: 'htpc-sample.example.org'
      htpc_oauth_client_id: 'tu-id-de-cliente'
      htpc_oauth_client_secret: 'tu-secreto-de-cliente'
      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-----

Configuración Posterior a la Instalación

SABnzbd

  1. Navega a /sabnzbd en tu navegador y sigue la configuración inicial.

  2. En /sabnzbd/config/general/, probablemente quieras Deshabilitar la API-key (no necesaria ya que está funcionando detrás de OAuth2 Proxy).

  3. En /sabnzbd/config/folders/:

  • Carpeta de descarga temporal: /opt/downloads/sabnzbd-incomplete
  • Carpeta de descarga completada: /opt/downloads/misc
  • Permisos para descargas completadas: 777
  • Carpeta de scripts: /opt/nzbtomedia
  1. En /sabnzbd/config/categories/:
  • Procesamiento de Películas:

    • Categoría: movies
    • Script: nzbToCouchPotato.py
    • Carpeta/Ruta: /opt/downloads/unprocessed/movies
  • Procesamiento de TV:

    • Categoría: tv
    • Script: nzbToSickBeard.py
    • Carpeta/Ruta: /opt/downloads/tv
  • Procesamiento de Audio:

    • Categoría: audio
    • Script: nzbToHeadPhones.py
    • Carpeta/Ruta: /opt/downloads/unprocessed/audio
  1. En /sabnzbd/config/switches/:
  • Acción cuando se descarga un RAR encriptado: abortar
  • Acción cuando se detecta una extensión no deseada: abortar
  • Extensiones no deseadas: exe, com
  • Procesar solo trabajos verificados: off
  • Ignorar muestras: on
  • Lista de limpieza: nfo, sfv
  1. En /sabnzbd/config/special/:
  • empty_postproc: on

SickRage

  1. Detén el servicio SickRage:
$ service sickrage stop
  1. Permite a nginx hacer proxy de solicitudes a 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. Otras configuraciones 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. Inicia el servicio SickRage:
$ service sickrage start

CouchPotato

  1. Detén el servicio CouchPotato:
$ service couchpotato stop
  1. Permite a nginx hacer proxy de solicitudes a 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. Agrega la siguiente clave/valor en la sección [core] en /opt/config/couchpotato-config/settings.conf
host = 127.0.0.1
  1. Inicia el servicio CouchPotato:
$ service couchpotato start
  1. Navega a /couchpotato/settings/general en tu navegador y desactiva la verificación de actualizaciones periódicas.

  2. En /couchpotato/settings/renamer:

  • Renombrar películas descargadas: Habilitado
  • Ejecutar cada: 0
  • Desde: /opt/downloads/unprocessed/movies
  • Hasta: /opt/downloads/movies
  • Forzar cada: 24
  • Limpieza: Habilitado
  • Siguiente en fallos: Deshabilitado
  • Toma nota de tu API Key y actualiza la variable htpc_couchpotato_api_key con este valor.
  1. En /couchpotato/settings/downloaders:
  • Sabnzbd: Habilitado
  • Host: 127.0.0.1:8080
  • Categoría: movies
  • Eliminar NZB: habilitado
  • Eliminar fallidos: habilitado

Servidor Multimedia Plex

Dado que Plex solo permite acciones administrativas a través de una subred local, necesitarás crear un túnel SSH a tu máquina host para la configuración inicial. Nota que esto solo es necesario para la configuración inicial.

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

En su forma general, este comando SSH se ve algo así:

ssh ip.direccion.del.servidor -L 8888:localhost:32400

Luego, al navegar a http://localhost:8888/web deberías poder configurar tu aplicación Plex.

En un entorno de Vagrant, ese comando SSH se ve algo así:

ssh \
  -p <Puerto> \
  -i <ArchivoDeIdentidad> \
  -L 8888:localhost:32400 \
  <Usuario>@<NombreDelHost>

Donde Puerto, ArchivoDeIdentidad, Usuario y NombreDelHost se pueden encontrar ejecutando:

vagrant ssh-config

Más información disponible en la Documentación de Instalación de Plex.

Headphones

  1. Detén el servicio Headphones:
$ service headphones stop
  1. Permite a nginx hacer proxy de solicitudes a 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. Otras opciones de configuración
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. Inicia el servicio Headphones:
$ service headphones start

Desarrollo

Usa el Vagrantfile proporcionado para desarrollo local y pruebas.

$ vagrant up --provision
Acerca del proyecto

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

Instalar
ansible-galaxy install marvinpinto.htpc
Licencia
mit
Descargas
69
Propietario
Computer nerd.