marvinpinto.htpc
htpc
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
Necesitarás un dominio para alojar esto; esta configuración usa
htpc-sample.example.org
como ejemplo. Actualiza la variablehtpc_dns_hostname
con tu dominio.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
yhtpc_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.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
.Obtén un certificado TLS https para el dominio que elegiste (
htpc_dns_hostname
). Actualiza las variableshtpc_tls_cert
yhtpc_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
Navega a
/sabnzbd
en tu navegador y sigue la configuración inicial.En
/sabnzbd/config/general/
, probablemente quieras Deshabilitar la API-key (no necesaria ya que está funcionando detrás de OAuth2 Proxy).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
- En
/sabnzbd/config/categories/
:
Procesamiento de Películas:
- Categoría:
movies
- Script:
nzbToCouchPotato.py
- Carpeta/Ruta:
/opt/downloads/unprocessed/movies
- Categoría:
Procesamiento de TV:
- Categoría:
tv
- Script:
nzbToSickBeard.py
- Carpeta/Ruta:
/opt/downloads/tv
- Categoría:
Procesamiento de Audio:
- Categoría:
audio
- Script:
nzbToHeadPhones.py
- Carpeta/Ruta:
/opt/downloads/unprocessed/audio
- Categoría:
- 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
- En
/sabnzbd/config/special/
:
empty_postproc
:on
SickRage
- Detén el servicio SickRage:
$ service sickrage stop
- 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
- 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
- Inicia el servicio SickRage:
$ service sickrage start
CouchPotato
- Detén el servicio CouchPotato:
$ service couchpotato stop
- 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
- Agrega la siguiente clave/valor en la sección
[core]
en/opt/config/couchpotato-config/settings.conf
host = 127.0.0.1
- Inicia el servicio CouchPotato:
$ service couchpotato start
Navega a
/couchpotato/settings/general
en tu navegador y desactiva la verificación de actualizaciones periódicas.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.
- 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
- Detén el servicio Headphones:
$ service headphones stop
- 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
- 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
- Inicia el servicio Headphones:
$ service headphones start
Desarrollo
Usa el Vagrantfile
proporcionado para desarrollo local y pruebas.
$ 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