marvinpinto.htpc
htpc
これはサンプルのホームシアターPC (HTPC) のセットアップをインストールおよび管理するためのAnsible Galaxyのメタロールです。
このプロジェクトの目標は、HTPCのセットアップに必要なコンポーネントをAnsibleを使って接続する方法を示すことです。これまで、すべての要素を接続することが最も難しい部分でしたが、これにより簡単になることを期待しています。
機能
- SABnzbd バイナリニュースグループダウンローダー
- SickRage テレビ番組用のビデオライブラリマネージャー
- CouchPotato 映画用PVRおよびビデオライブラリマネージャー
- Plex 映画、テレビ番組、音楽などのメディアサーバー
- nginx Google認証を使用したフロントエンドプロキシ(OAuth2 Proxy経由)
- すべてがUbuntu 14.04サーバー上で接続されるように設計されています
前提条件
このセットアップをホストするためのドメインが必要です - この例では
htpc-sample.example.org
を使用しています。htpc_dns_hostname
変数を自分のドメインで更新してください。ここでのデフォルトのセットアップはGoogle認証を使用しているため、OAuth Webアプリケーションを登録する必要があります(手順はこちら)。_Client ID_と_Client Secret_をメモしてください(対応する変数は
htpc_oauth_client_id
とhtpc_oauth_client_secret
です)。Google認証プロバイダの使用に制限はありません。他の有効なオプションもあります!この方法を選択する場合は、
oauth2_proxy_cli_args
変数を調整することを忘れないでください。ランダムな32バイトの文字列を生成するには、次のコマンドを使用します:
$ date +%s | sha256sum | base64 | head -c 32 ; echo
この値を
htpc_oauth_cookie_secret
として使用します。選択したドメインのために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: '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
ブラウザで
/sabnzbd
に移動し、初期ウィザードセットアップに従います。/sabnzbd/config/general/
で、APIキーを無効にすることをお勧めします(OAuth2 Proxyの背後で実行されているため不要です)。/sabnzbd/config/folders/
で:
- 一時ダウンロードフォルダー:
/opt/downloads/sabnzbd-incomplete
- 完了したダウンロードフォルダー:
/opt/downloads/misc
- 完了したダウンロードの権限:
777
- スクリプトフォルダー:
/opt/nzbtomedia
/sabnzbd/config/categories/
で:
映画処理:
- カテゴリー:
movies
- スクリプト:
nzbToCouchPotato.py
- フォルダー/パス:
/opt/downloads/unprocessed/movies
- カテゴリー:
テレビ処理:
- カテゴリー:
tv
- スクリプト:
nzbToSickBeard.py
- フォルダー/パス:
/opt/downloads/tv
- カテゴリー:
音声処理:
- カテゴリー:
audio
- スクリプト:
nzbToHeadPhones.py
- フォルダー/パス:
/opt/downloads/unprocessed/audio
- カテゴリー:
/sabnzbd/config/switches/
で:
- 暗号化されたRARがダウンロードされたときのアクション:
中止
- 不要な拡張子が検出されたときのアクション:
中止
- 不要な拡張子:
exe, com
- 検証済みジョブのみをポストプロセス:
オフ
- サンプルを無視:
オン
- クリーンアップリスト:
nfo, sfv
/sabnzbd/config/special/
で:
empty_postproc
:オン
SickRage
- SickRageサービスを停止します:
$ service sickrage stop
- 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
- その他の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
- SickRageサービスを開始します:
$ service sickrage start
CouchPotato
- CouchPotatoサービスを停止します:
$ service couchpotato stop
- 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
/opt/config/couchpotato-config/settings.conf
の[core]
セクションに次のキー/値を追加します:
host = 127.0.0.1
- CouchPotatoサービスを開始します:
$ service couchpotato start
ブラウザで
/couchpotato/settings/general
に移動し、定期的な更新チェックを無効にします。/couchpotato/settings/renamer
で:
- ダウンロードした映画のリネーム:
有効
- 毎回の実行時間:
0
- から:
/opt/downloads/unprocessed/movies
- まで:
/opt/downloads/movies
- 強制実行の頻度:
24
- クリーンアップ:
有効
- 失敗時の次:
無効
- APIキーをメモし、
htpc_couchpotato_api_key
変数にこの値を設定します。
/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>
ここで、Port
、IdentityFile
、User
、およびHostName
は、以下のコマンドを実行して見つけることができます:
vagrant ssh-config
Headphones
- Headphonesサービスを停止します:
$ service headphones stop
- 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
- その他の設定オプション:
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
- 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