htpc

htpc

Статус сборки Ansible Galaxy Лицензия

Это мета-роль Ansible Galaxy, предназначенная для установки и управления образцом настройки медиацентра (HTPC).

Цель этого проекта – показать, как можно использовать Ansible для подключения компонентов, необходимых для настройки HTPC. Соединение всех этих частей обычно было самой сложной частью, и, надеюсь, это упростит задачу.

Особенности

  • SABnzbd – загрузчик бинарных новостных групп
  • SickRage – менеджер видеотеки для ТВ-шоу
  • CouchPotato – PVR и менеджер видеотеки для фильмов
  • Plex – медиасервер для фильмов, ТВ-шоу, музыки и т.д.
  • nginx – прокси-сервер с аутентификацией Google (через OAuth2 Proxy)
  • Все задумано для работы на сервере Ubuntu 14.04

Предварительные требования

  1. Вам понадобится домен для размещения – в этом примере используется htpc-sample.example.org. Обновите переменную htpc_dns_hostname своим доменным именем.

  2. В данном примере используется аутентификация Google, поэтому вам нужно зарегистрировать веб-приложение OAuth (инструкции здесь) и запомнить Идентификатор клиента и Секрет клиента (соответствующие переменные htpc_oauth_client_id и htpc_oauth_client_secret).

    Вы не ограничены только использованием провайдера аутентификации Google, есть и другие действительные варианты! Не забудьте скорректировать переменную oauth2_proxy_cli_args, если решите выбрать этот вариант.

  3. Создайте случайную строку длиной 32 байта с помощью:

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

    Используйте это значение как htpc_oauth_cookie_secret.

  4. Получите https TLS сертификат для выбранного вами домена (htpc_dns_hostname). Обновите переменные htpc_tls_cert и htpc_tls_cert_key своими сертификатом и приватным ключом.

Переменные роли

Специфические переменные роли htpc указаны в defaults/main.yml, а мета-переменные специфические для роли в meta/main.yml.

Пример

Установите этот модуль из Ansible Galaxy в директорию './roles':

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

Используйте его в плейбуке следующим образом:

- hosts: '127.0.0.1'
  become: true
  roles:
    - role: 'marvinpinto.htpc'
      htpc_dns_hostname: 'htpc-sample.example.org'
      htpc_oauth_client_id: 'ваш-идентификатор-клиента'
      htpc_oauth_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-----

Настройка после установки

SABnzbd

  1. Перейдите по адресу /sabnzbd в вашем браузере и следуйте инструкции начальной настройки.

  2. В /sabnzbd/config/general/ вам, вероятно, нужно будет Отключить API-ключ (он не нужен, так как он работает за прокси OAuth2).

  3. В /sabnzbd/config/folders/:

  • Временная папка загрузки: /opt/downloads/sabnzbd-incomplete
  • Папка завершенных загрузок: /opt/downloads/misc
  • Права на завершенные загрузки: 777
  • Папка скриптов: /opt/nzbtomedia
  1. В /sabnzbd/config/categories/:
  • Обработка фильмов:

    • Категория: movies
    • Скрипт: nzbToCouchPotato.py
    • Папка/Путь: /opt/downloads/unprocessed/movies
  • Обработка ТВ:

    • Категория: tv
    • Скрипт: nzbToSickBeard.py
    • Папка/Путь: /opt/downloads/tv
  • Обработка аудио:

    • Категория: audio
    • Скрипт: nzbToHeadPhones.py
    • Папка/Путь: /opt/downloads/unprocessed/audio
  1. В /sabnzbd/config/switches/:
  • Действие при загрузке зашифрованного RAR-файла: abort
  • Действие при обнаружении нежелательного расширения: abort
  • Нежелательные расширения: exe, com
  • Обрабатывать только проверенные задания: off
  • Игнорировать образцы: on
  • Список очистки: nfo, sfv
  1. В /sabnzbd/config/special/:
  • empty_postproc: on

SickRage

  1. Остановите сервис SickRage:
$ service sickrage stop
  1. Разрешите nginx проксировать запросы к 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. Другие настройки 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. Запустите сервис SickRage:
$ service sickrage start

CouchPotato

  1. Остановите сервис CouchPotato:
$ service couchpotato stop
  1. Разрешите nginx проксировать запросы к 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. Добавьте следующую пару ключ/значение в раздел [core] в /opt/config/couchpotato-config/settings.conf:
host = 127.0.0.1
  1. Запустите сервис CouchPotato:
$ service couchpotato start
  1. Перейдите к /couchpotato/settings/general в браузере и отключите периодическую проверку обновлений.

  2. В /couchpotato/settings/renamer:

  • Переименовать загруженные фильмы: Enabled
  • Запускать каждый: 0
  • Из: /opt/downloads/unprocessed/movies
  • В: /opt/downloads/movies
  • Принудительно каждый: 24
  • Очистка: Enabled
  • Следующее при неудаче: Disabled
  • Запомните ваш API-ключ и обновите переменную htpc_couchpotato_api_key этим значением.
  1. В /couchpotato/settings/downloaders:
  • Sabnzbd: Enabled
  • Хост: 127.0.0.1:8080
  • Категория: movies
  • Удалить NZB: enabled
  • Удалить неудачные: enabled

Plex Media Server

Поскольку Plex разрешает административные действия только с локальной подсети, вам нужно создать SSH-туннель к вашей хост-машине для начальной настройки. Обратите внимание, что это требуется только для начальной настройки.

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

В общем виде эта команда SSH выглядит примерно так:

ssh ip.address.of.server -L 8888:localhost:32400

Затем, перейдя по адресу http://localhost:8888/web, вы сможете настроить ваше приложение Plex.

В окружении vagrant эта команда SSH выглядит следующим образом:

ssh \
  -p <Port> \
  -i <IdentityFile> \
  -L 8888:localhost:32400 \
  <User>@<HostName>

Где Port, IdentityFile, User и HostName можно найти, выполнив:

vagrant ssh-config

Более подробная информация доступна в документации по установке Plex.

Headphones

  1. Остановите сервис Headphones:
$ service headphones stop
  1. Разрешите nginx проксировать запросы к 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. Прочие параметры конфигурации:
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. Запустите сервис Headphones:
$ service headphones start

Разработка

Используйте предоставленный Vagrantfile для локальной разработки и тестирования.

$ 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/ansible-role-htpc
Лицензия
mit
Загрузки
59
Владелец
Computer nerd.