Hiroto's diary

プログラミングとか色々

MirakurunをDockerに移行した

年末で録画番組も少ないので, Raspberry Piで作った録画サーバのMirakurunをDockerに移行した. その手順を書く.

hiroto-k.hatenablog.com

Dockerとdocker-composeをインストール

Dockerとdocker-composeをインストールする. 特別やることはなくて, 用意さえているスクリプトを実行するとよしなにしてくれる.

Dockerをインストール. スクリプトを実行して, ユーザーをdockerグループに追加するだけ.

$ curl -sSL https://get.docker.com/ | sh
$ sudo usermod -aG docker $USER

次にdocker-composeをインストール.

x86_64だったらGitHubのReleasesからバイナリを持ってくるだけでいいけど, Raspberry Piはarmv7lなので自分でビルドする必要がある.

# ソースコードをクローン.
$ git clone https://github.com/docker/compose.git
$ cd compose
# 自分の使うバージョンにチェックアウト. 執筆時は1.27.4が最新.
$ git checkout 1.27.4

# ビルド用のスクリプトを実行
$ ./script/build/linux

ビルドが終わると./distdocker-compose-Linux-armv7lが出来ているので, 別の場所に動かして実行出来るようにする.

$ cp ./dist/docker-compose-Linux-armv7l /usr/local/bin/docker-compose
$ sudo chown root:root /usr/local/bin/docker-compose
$ sudo chmod 755 /usr/local/bin/docker-compose

インストール出来ているかの確認

$ docker version
$ docker-compose version

古いMirakurunをアンインストールする

ローカルで動いているMirakurunを停止してアンインストール.

$ sudo mirakurun stop
$ sudo npm uninstall mirakurun -g --unsafe-perma

止める必要があるのかは分からないけど, 念のためEPGStationも止めた

$ sudo pm2 stop epgstation

新しいMirakurunのインストール

GitHubからdocker-compose.ymlをダウンロードしてセットアップする. デフォルトの設定で使っているなら, docker-compose.ymlのダウンロードでdocker-compose pullだけで終わる.

$ mkdir ~/mirakurun
$ cd ~/mirakurun
$ wget https://raw.githubusercontent.com/Chinachu/Mirakurun/master/docker/docker-compose.yml
$ docker-compose pull

次にセットアップを行う. チューナーを読み込むなどしてくれる.

設定を変える場合は/usr/local/mirakurun/config/にあるファイルを編集する.

$ docker-compose run --rm -e SETUP=true mirakurun

docker-compose upで起動する

$ docker-compose up -d

自分の場合はチャンネルをスキャンする必要があったので, APIを使ってチャンネルを再スキャンした.

$ curl -X PUT "http://localhost:40772/api/config/channels/scan"

Puppeteer で target="_blank" が開くのを待つ

Puppeteer で target="_blank"<a>要素をクリックして新しいページが開くのを待つ方法.

browser.once('targetcreated', target => resolve(target.page())) でやる方法が出てくるけど, newPagenull になって上手く行かなかったので, 色々試した結果上手くいった方法. Puppeteer のバージョンは v5.2.1 .

import { Page } from 'puppeteer';

const [newPage] = await Promise.all([
  new Promise<Page>(resolve => page.once('popup', resolve)),
  elementHandle.click(),
]);

© 2015 hiroxto