VagrantのCentOS7の仮想環境で、ansibleがデフォルトの状態では動かなかった
仮想環境の構成管理をchefからansibleに乗り換えようと決意したものの、 デフォルトだとansible -m ping
すら出来ない状況に。
以下の様なエラーが出ていた。
$ ansible development -m ping -i hosts -vvvv -c ssh <192.168.33.10> ESTABLISH CONNECTION FOR USER: vagrant <192.168.33.10> REMOTE_MODULE ping <192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o Port=22 -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452 && echo $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452' <192.168.33.10> PUT /var/folders/b1/xvrmxy3x5q144lzzrxg081jr0000gn/T/tmp8Y12_A TO /home/vagrant/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452/ping 192.168.33.10 | FAILED => failed to transfer file to /home/vagrant/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452/ping: Connection closed
イメージには puppetlabs/centos-7.0-64-puppet
を利用していたのだが、調べているとCentOS5, 6ではSFTPが無効になっているらしい。
立ち上げた仮想環境の /etc/ssh/sshd_config
の中身を見ると以下のように、sftpに関する記述があった。
# File is managed by Puppet AcceptEnv LANG LC_* ChallengeResponseAuthentication no GSSAPIAuthentication no PermitRootLogin yes PrintMotd no Subsystem sftp /usr/lib/openssh/sftp-server UseDNS no UsePAM yes X11Forwarding yes
記述があるにも関わらずpingが通らないのはおかしい、sftpのPATHはどうなってるのかと思って調べてみると、configに記載されているpathがなんと間違えていた。。
$ sudo find / -type f -name sftp-server /usr/libexec/openssh/sftp-server
lib
から libexec
に修正し、sshdを再起動したらping通った。
$ ansible development -m ping -i hosts -vvvv <192.168.33.10> ESTABLISH CONNECTION FOR USER: vagrant <192.168.33.10> REMOTE_MODULE ping <192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133 && echo $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133' <192.168.33.10> PUT /var/folders/b1/xvrmxy3x5q144lzzrxg081jr0000gn/T/tmpjtkKIl TO /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ping <192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ping; rm -rf /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ >/dev/null 2>&1' 192.168.33.10 | success >> { "changed": false, "ping": "pong" }
んもー…
4年目の健康診断とか
一昨日だった。
- 身長 : 173.9cm 変化なし
- 体重 : 63.6kg +3.7kg
- 視力 : あんま変わらず両目1.2
- 実感として正直測定値ほど見えている気がしない
- 血圧 : 上がちょっと上がった。1回測定ミスってテンパったのかもしれない
内科の担当医のおっちゃんがそっけなさすぎてちょっと萎えた。 食生活ちょっと脂っこい方に寄ってるから血液検査が心配。 あと最近食後喉に食い物が少し詰まったような感覚あるから病院行ったほうが良いような気がしないでもない
前回書いていた陰陽座のラジオcron録音は上手く動いていた。 ただブログに書いてあった放送時間が間違っていて最後尻切れトンボになってた。20分じゃなくて25分らしい…
陰陽座の新ラジオ番組をRadikoで予約録音する
先日、瞬火blogで紹介があり、TOKYO FMで陰陽座の新しいラジオ番組がスタートしたそうだ。 時間は水曜25:30-25:50(つまり木曜1:30-1:50)と遅く、リアルタイムの拝聴をすると翌日が平日なのでキツイ。
初回は聞き逃してしまったので、なんとかしてcronで自動録音できるすべを探ってみた。
Radikoを使う
Radikoは、インターネット経由でラジオを聞けるサービスだが、いろいろ調べているとスクリプトで録音ができるらしい。
これを使って、MBP経由で録音する。
事前準備
$ brew install wget rtmpdump swftools libxml2 ffmpeg
スクリプトの実行に必要なライブラリをbrew経由でインストール。 インストール中、brewとgitのversionが古かったことに起因するエラーが表示されたので、そちらもアップデートした。
現在の手元のhomebrewとgitのバージョンは以下のとおり。
$ brew --version 0.9.5 (git revision 60140; last commit 2015-10-09) $ git --version git version 2.5.3
試しに録音する
をダウンロードし、適当なディレクトリに配置。
まず先に、エリア情報シェルスクリプトを使って、TOKYO FMのidを確認する。
$ radiko_curl_area.sh
神奈川県はJP14.xml
と思われるので、中身を確認する。
129 <station> 130 <id>FMT</id> 131 <name>TOKYO FM</name> 132 <ascii_name>TOKYO FM</ascii_name> 133 <href>http://www.tfm.co.jp/</href> 134 <logo_xsmall>http://radiko.jp/station/logo/FMT/logo_xsmall.png</logo_xsmall> 135 <logo_small>http://radiko.jp/station/logo/FMT/logo_small.png</logo_small> 136 <logo_medium>http://radiko.jp/station/logo/FMT/logo_medium.png</logo_medium> 137 <logo_large>http://radiko.jp/station/logo/FMT/logo_large.png</logo_large> 138 <logo width="124" height="40">http://radiko.jp/v2/static/station/logo/FMT/124x40.png</logo> 139 <logo width="344" height="80">http://radiko.jp/v2/static/station/logo/FMT/344x80.png</logo> 140 <logo width="688" height="160">http://radiko.jp/v2/static/station/logo/FMT/688x160.png</logo> 141 <logo width="172" height="40">http://radiko.jp/v2/static/station/logo/FMT/172x40.png</logo> 142 <logo width="224" height="100">http://radiko.jp/v2/static/station/logo/FMT/224x100.png</logo> 143 <logo width="448" height="200">http://radiko.jp/v2/static/station/logo/FMT/448x200.png</logo> 144 <logo width="112" height="50">http://radiko.jp/v2/static/station/logo/FMT/112x50.png</logo> 145 <logo width="168" height="75">http://radiko.jp/v2/static/station/logo/FMT/168x75.png</logo> 146 <logo width="258" height="60">http://radiko.jp/v2/static/station/logo/FMT/258x60.png</logo> 147 <feed>http://radiko.jp/station/feed/FMT.xml</feed> 148 <banner>http://radiko.jp/res/banner/FMT/20150930211427.jpg</banner> 149 </station>
TOKYO FMのidは FMT
。
$ rec_radiko.sh FMT 1 data
引数は以下の順番で定義されている。
$ rec_radiko.sh <channel_name_id> <minutes> <outputdir>
これでTOKYO FMの音源が録音されていればOK。
crontabで定期実行する
$ sudo launchctl unload /System/Library/LaunchDaemons/com.vix.cron.plist $ sudo launchctl load /System/Library/LaunchDaemons/com.vix.cron.plist
launchctlを起動した後、crontabに録音スクリプトの実行内容を記述する。
$ crontab -l 29 1 * * 4 cd /path/to/script;/bin/bash -l ./rec_radiko.sh FMT 22 data
今回は上記の内容で記述した。
Chefで構築していた仮想開発環境をfedora 20からCentOS6.5に乗り換えた
少し前からChefを使って仮想開発環境を作れるgenerator(コードネーム:Almagest)を作っていた。
当初はOSにfedora 20を使っていたが、同僚からvagrantのboxを検索できるサイトを教えていただいた。
fedoraの新しいバージョンについてもイメージが乗っていたものの、VagrantのGuest Additionsのバージョンアップが上手く動かない問題があった。VagrantのboxのGuest Additionsのアップデート方法
このため、fedora 20 -> fedora 21 -> CentOS6.5とイメージを変更した。
fedora 20 -> fedora 21に乗り換えた際のハマりどころ
新しいboxに以下のコマンドが存在しなかった。
tmux, readline-devel, tar
tmux
に関してはcookbookを追加して解決。
boxのurlを変更した後に bundle exec knife solo bootstrap almagest
を実行すると、anyenv経由でrubyのインストールに何度か失敗した。
rubyのインストールの際に tar
や、readline-devel
が必要らしく、その途中でコケていた模様。
対応法としては、anyenvのcookbookに tar
, readline-devel
に依存する旨を明記する。
あるcookbookが別のcookbookに依存する場合は、以下の3点を行えば良いらしい。
- (1) : Berksfileに依存するcookbookを記載 or 必要なcookbookを
site-cookbooks
以下に配置- 今回は前者だったが、supermarketに乗ってないcookbookに依存する場合はおそらく配置すれば大丈夫
+cookbook 'tar', '~> 0.7.0' +cookbook 'readline', '~> 0.0.5'
- (2) :
metadata.rb
に依存関係を明記
+depends 'tar' +depends 'readline'
- (3) :
recipes/default.rb
に依存関係を明記
+include_recipe 'tar::default' +include_recipe 'readline::default'
自分の作ったリポジトリ見ていると、 Berksfile
に定義されているのに site-cookbooks
にそのファイル突っ込んでいたりと、差分的に要らないものがいくつかありそうなので後で整理したい。
fedora 21 -> CentOS 6.5に乗り換えた際のハマりどころ
- knife solo bootstrapでchefを適用した後vagrant reloadするとIPのアサインに失敗する
- 自前のdotfilesのcookbookが原因だった模様。.bashrcをまるっと置き換えてしまうと良くないようなので、ここは改善する予定。