marvinpinto.htpc

htpc

ビルドステータス
Ansible Galaxy
ライセンス

これはサンプルのホームシアターPC (HTPC) のセットアップをインストールおよび管理するためのAnsible Galaxyのメタロールです。

このプロジェクトの目標は、HTPCのセットアップに必要なコンポーネントをAnsibleを使って接続する方法を示すことです。これまで、すべての要素を接続することが最も難しい部分でしたが、これにより簡単になることを期待しています。

機能

  • SABnzbd バイナリニュースグループダウンローダー
  • SickRage テレビ番組用のビデオライブラリマネージャー
  • CouchPotato 映画用PVRおよびビデオライブラリマネージャー
  • Plex 映画、テレビ番組、音楽などのメディアサーバー
  • nginx Google認証を使用したフロントエンドプロキシ(OAuth2 Proxy経由)
  • すべてがUbuntu 14.04サーバー上で接続されるように設計されています

前提条件

  1. このセットアップをホストするためのドメインが必要です - この例ではhtpc-sample.example.orgを使用しています。htpc_dns_hostname変数を自分のドメインで更新してください。

  2. ここでのデフォルトのセットアップはGoogle認証を使用しているため、OAuth Webアプリケーションを登録する必要があります(手順はこちら)。_Client ID_と_Client Secret_をメモしてください(対応する変数はhtpc_oauth_client_idhtpc_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_certhtpc_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: 'your-client-id'
      htpc_oauth_client_secret: 'your-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 Proxyの背後で実行されているため不要です)。

  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がダウンロードされたときのアクション: 中止
  • 不要な拡張子が検出されたときのアクション: 中止
  • 不要な拡張子: exe, com
  • 検証済みジョブのみをポストプロセス: オフ
  • サンプルを無視: オン
  • クリーンアップリスト: nfo, sfv
  1. /sabnzbd/config/special/で:
  • empty_postproc: オン

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. /opt/config/couchpotato-config/settings.conf[core]セクションに次のキー/値を追加します:
host = 127.0.0.1
  1. CouchPotatoサービスを開始します:
$ service couchpotato start
  1. ブラウザで/couchpotato/settings/generalに移動し、定期的な更新チェックを無効にします。

  2. /couchpotato/settings/renamerで:

  • ダウンロードした映画のリネーム: 有効
  • 毎回の実行時間: 0
  • から: /opt/downloads/unprocessed/movies
  • まで: /opt/downloads/movies
  • 強制実行の頻度: 24
  • クリーンアップ: 有効
  • 失敗時の次: 無効
  • APIキーをメモし、htpc_couchpotato_api_key変数にこの値を設定します。
  1. /couchpotato/settings/downloadersで:
  • Sabnzbd: 有効
  • ホスト: 127.0.0.1:8080
  • カテゴリー: movies
  • NZB削除: 有効
  • 失敗時の削除: 有効

Plexメディアサーバー

Plexはローカルサブネットからの管理操作のみを許可しているため、初期設定のためにホストマシンへのSSHトンネルを作成する必要があります。この初期設定にのみ必要です。

詳細はPlexインストールドキュメントをご覧ください。

一般的な形の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>

ここで、PortIdentityFileUser、およびHostNameは、以下のコマンドを実行して見つけることができます:

vagrant ssh-config

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.htpc
ライセンス
mit
ダウンロード
69
所有者
Computer nerd.