なぜなら、面白そうだから。ですが、独立したクリーンな環境で動かせることが一番の魅力です。
色々実験していると環境がぐちゃぐちゃになっていきます。
いつ何を入れたのか、どこに何を設定したのか、次第にあやふやになってくる。etckeeperだけじゃキープできない。
「ちょっと試したい時にコンテナをクローンして試して失敗したら消す!」をしたい。
録画システム用コンテナ作成後に、以下ゴニョゴニョする
ビルド環境
$ sudo apt-get install build-essential
(for recfsusb2n)
$ sudo apt-get install libboost-filesystem-dev libboost-thread-dev -y
(for epgdump)
$ sudo apt-get install cmake -y
(for FFmpeg)
$ sudo apt-get install yasm libx264-dev libfaac-dev
$ sudo apt-get install pkg-config
ビルドしてインストール
epgdump、ffmpeg は、
$ make install
recfsusb2n は Makefileにinstall記述がないので直接
$ sudo cp ./recfsusb2n /usr/local/bin
もうここは専用環境なのでバンバン/usr/localとか自由に使う。
udevdが動いてないので
どうやらコンテナではudevdが動かないらしい。前回は'video'グループ権限でアクセスできるような
ルール設定ファイルを /dev/udev/rules.d に置いたりしたけど、udevdが動いてないので意味が無い。
っていうか、後で気づいたことだけど、ホスト側で設定しておくべきことだった。
ホストに/etc/udev/rules.d/89-tuner.rulesを作成。内容は以下な感じ。
# FSUSB2Nこれでブート時にチューナデバイスのグループが'video'になる。
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0029", MODE="0664", GROUP="video"
USBデバイス スルー
コンテナ上の録画プログラム(recfsusb2n)がチューナーデバイスを扱えるように、
ホストに接続されているUSBデバイスをlxcコンテナからアクセスできるようにする必要がある。
# usb device上の記述を、コンテナのコンフィグファイルに追記して、コンテナ再起動する。
lxc.cgroup.devices.allow = c 189:* rwm
# mount
lxc.mount.entry=/dev/bus/usb/001 dev/bus/usb/001 none bind,optional,create=dir
ホスト側と同じ状態でUSBデバイスをシェアした状態になる
コンテナから ls -l /dev/bus/usb/001/* すると
crw-rw-r-- 1 root root 189, 0 9月 23 20:13 /dev/bus/usb/001/001
crw-rw-r-- 1 root root 189, 1 9月 23 20:13 /dev/bus/usb/001/002
crw-rw-r-- 1 root root 189, 2 9月 23 20:13 /dev/bus/usb/001/003
crw-rw-r-- 1 root root 189, 3 9月 23 20:13 /dev/bus/usb/001/004
crw-rw-r-- 1 root video 189, 4 9月 25 17:50 /dev/bus/usb/001/005
crw-rw-r-- 1 root root 189, 5 9月 23 20:13 /dev/bus/usb/001/006
rvm入れなくても大丈夫かな
ubuntu14.04の時は、パッケージインストールされるrubyが1.9.3だったり、独立したruby環境にしたかったのでrvmを入れていたけど、ubuntu15.04のrubyは2.1.2で新し目だし、コンテナ自体が独立しているので、rvmではなく、普通にパッケージインストールしたものを使う。
gemインストール
録画システムはrailsで構築しているので、システムパッケージをまるっと持ってきて
(gitで退避しておいたので、git cloneして復活)そこで
$ bundle
で必要なgemパッケージをインストール
おっと、bundleも入ってなかったか。bundleが成功するまで、色々足りていないものを入れる。
(引っかかった順)
$ sudo gem install bundler
$ sudo apt-get install ruby-dev
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install mysql-server libmysqlclient-dev
bundleでgemインストールが完了したら
$ sudo mysql_secure_installation&アクセス用のmysqlユーザを作って権限設定とかして、、
DB作成とマイグレーション
$ RAILS_ENV=production bundle exec rake db:create
$ RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=development bundle exec rake db:create
$ RAILS_ENV=development bundle exec rake db:migrate
NATで外と接続(ホストで)
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 3000 -j DNAT --to <コンテナIP>:3000
したら、コンテナ側のrailsアプリ上で
$ rails s -b 0.0.0.0
http://ホスト:3000 へアクセスして、コンテナ上のwebrickサーバーが反応すればテストOK。
recmanとしてちゃんと稼動させる
テストは良好だったので、サーバーのデーモン駆動周りを整える
$ sudo apt-get install redis-server nginx -y
unicornとsidekiqを稼動させて、nginxからunicornへproxyするように。
最後にwheneverでcrontab更新
$ bundle exec whenever --update-crontab
NAT設定して、外からアクセスできるように
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to <コンテナIP>:80
0 件のコメント:
コメントを投稿