meld3のバージョン依存でsupervisordが起動しない!
掲題の通り、supervisordのインストールではまりました。
supervisordからプロセスが起動できない。
[root@localhost]# supervisorctl
Traceback (most recent call last):
File "/usr/bin/supervisorctl", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in <module>
working_set.require(__requires__)
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: meld3>=0.6.5
うーん、meld3のバージョンを見てみよう
[root@localhost]# pip list
distribute (0.6.10)
ethtool (0.6)
firstboot (1.110)
gyp (0.1)
iniparse (0.3.1)
meld3 (1.0.2)
pip (7.0.3)
pycurl (7.19.0)
pygpgme (0.1)
python-meh (0.11)
scdate (1.9.60)
setuptools (0.6rc11)
slip (0.2.20)
supervisor (3.1.3)
urlgrabber (3.9.1)
yum-metadata-parser (1.1.2)
0.65以上なんだけど。
ググってたら、こんなスレを見つけました。
なるほど。meld3のバージョンを1.0.0に落とすと動くとのこと
[root@localhost]# pip install meld3==1.0.0
Collecting meld3==1.0.0
/usr/lib/python2.6/site-packages/pip-7.0.3-py2.6.egg/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Downloading meld3-1.0.0.tar.gz
Installing collected packages: meld3
Found existing installation: meld3 1.0.2
Uninstalling meld3-1.0.2:
Successfully uninstalled meld3-1.0.2
Running setup.py install for meld3
Successfully installed meld3-1.0.0
これで、supervisord起動
[root@localhost ~]# supervisorctl start all
[root@localhost ~]#
動いた!
Dokcer + CentOS7 環境で tmpfsを使う
以下の形で作成したDockerのインスタンスでそのままではtmpfsが使えなかったので、メモ。
docker pull centos:latest
docker images centos
2015/03/05現在 CentOS7がInstallされる
dockerを動かす
tmpfsを作る
[root@xxxx /]# mount -t tmpfs tmpfs /mnt
mount: permission denied
permissionが足りないらしい。
Dockerでは権限を追加してやるために、Dockerの起動オプションを追加すればうまくいった。
docker run --privileged -i -t centos /bin/bash
[root@xxxx /]# mount -t tmpfs temps /mnt
permission deniedがでなくなった!
[root@cb779990271a /]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/docker-xxxx 10190136 251792 9414056 3% /
tmpfs 234696 0 234696 0% /dev
shm 65536 0 65536 0% /dev/shm
/dev/mapper/VolGroup-lv_root 201655248 7109996 184295012 4% /etc/hosts
tmpfs 234696 0 234696 0% /mnt
ちゃんとマウントも出来ました。
--privileged だと、権限与え過ぎで怖いという方は、SYS_ADMINを付与すると良いようです。
Apacheの設定をAmon2用にしてみた
Amon2を初めてInstallしてみた - aramsanのブログ
で、とりあえずの動作確認として、
$ curl http://localhost:5000/
という、ヘボい方法で確認していたので、Apacheで、リバースプロキシの設定をし、ブラウザ上で確認できるようにしてみた。
その設定を忘備録代わりにここに残しておく。
Apacheの環境は、 httpd x86_64 2.4.6-2.fc18
必要なモジュールは以下の通り
- mod_proxy.so
- mod_proxy_http.so
設定は、/etc/httpd/conf.modules.d/00-proxy.conf にあった
確認してみると、
...
LoadModule proxy_module modules/mod_proxy.so
...
LoadModule proxy_http_module modules/mod_proxy_http.so
...
最初からEnableされていた。
次にリバースプロキシの設定
/etc/httpd/conf/httpd.confに以下を追加した。設定はRoot権限で。
ProxyRequests Off
ProxyPass /MyApp/ http://localhost:5000/
ProxyPassReverse /MyApp/ http://localhost:5000/
後は、Apacheの設定を読み込ませるだけ
Root権限で
# systemctl reload httpd.service
するだけ
後はブラウザで確認しましょう。
これで、Amon2の出力が、ブラウザに表示されるでしょう。
Amon2を初めてInstallしてみた
Amon2を使ったことが無かったので、Installしてみた。
Installした環境は、FC18。cpanm は yum install済み。
早速、Amon2をCpanmでInstallした。rootユーザーで
# cpanm Amon2
ごにょごにょごにょ
Successfully installed Amon2-4.01
インストール成功
一般ユーザーに戻って、Amon2のスケルトン作成
amon2-setup.pl MyApp
ごにょごにょごにょ
成功した模様。
早速起動
cd MyApp
plackup app.psgi
起動せず、Moduleが足りないとエラーが出た
Can't locate Teng/Schema/Declare.pm in @INC
まあ、明示的にInstallした記憶はないので仕方ない。
ところで、MyAppのルートディレクトリを見たら、cpanfileというファイルが置かれていることに気づく。これで、必要なcpan moduleが管理されていることに気づく。
これは、サービスごとにcpan moduleを管理できるいい方法だと感心した。
ということで、MyApp ディレクトリでcarton installし、cpan Module環境を作りなおした
$ cd MyApp
$ carton install
ごにょごにょごにょ
Complete! Modules were installed into ごにょごにょ
Module Install完了。
carton execを使ってplackupしてみる
$ cd MyApp
$ carton exec -- plackup app.psgi &
HTTP::Server::PSGI: Accepting connections at http://0:5000/
起動成功!
早速実験
エラーじゃない何かが表示された。
#ブラウザで見てないのは、リバースプロキシの設定していないので。
週間アスキー 2013/9/10号付属のNFC ディスクに書き込んでみた
前回
週間アスキー 2013/9/10号付属のNFC ディスクを速攻で試してみた - aramsanのブログ
は、読み込みのテストを行なってみましたが、このタグは書き込み可能な状態で配布されていますので、今回は書き込みを行なってみます。
今回使用したソフトはこれ。
NFC TagWriter by NXP - Android Apps on Google Play
前回と同じく、NXP社製のNFCタグ書き込みアプリです。
書き込みデバイスにはNexus 7を使用しました。
さて、インストールしたら早速起動してみましょう。
「View」を選択すると、以下の画面に遷移します。
そして、NFCタグをかざしてみましょう。
前回と同じようにURLが書かれていると表示されます。
さて、今度は、本題の書き込みに行きます。
最初の画面に戻って頂き、今度は「Create and wirte」を選択してください。
次の画面で、Newを選んでください。
TagWriterでは、電話帳情報を書き込む「Contact」、URLを書き込む「Bookmark」、テキストを書き込む「Plain text」、そして「SMS」の4つの書き込みモードがあります。
今回は、URLを書き込むため、「Bookmark」を選びましょう。
今までにアクセスしたURL一覧が表示されますが、ここは「Create new bookmark」を選んでください。
URLは例えば、「www.google.com」としてみましょう。
そして、最下部にある「Next」ボタンを選択してください。
次の画面で、「Confirm overwrite」にチェックを入れ、「Next」を選択。
この状態で、以下の画面が出るので、タグをかざしてください。
すると、タグに書かれている内容が表示されます。
最下部の「Click to comfirm store」を選択すると書き込みが始まります。
書き込みに成功すると、以下の画面が表示されます。
これで、タグの内容が変更されました。
最初の画面に戻り、「Veiw」を選択後、書き換えたタグをかざすと、見事に書き換わった内容が表示されました。
これで、このタグをかざせば、簡単にgoogleのページが見れるようになりました。
plenv + cpanm + cartonな環境で、daemontoolsでハマった
plenv + cpanm + cartonな環境で、crontabでハマった - aramsanのブログ
にて、crontabから、plenv + cpanm + cartonな環境で動かした記事を書き、その文中で、daemontoolsからの起動もそのまま動くと書きました。
確かに、一見そのまま動いていました。
しかし、サービス化したスクリプトを止めたり動かしたりしていると、次第にレスポンスが悪くなっていき、最後はmysql が too many connectionsのエラーを吐き始めました。
そこで、プロセスを確認してみると、動かしたサービス x 再起動数のプロセスができているじゃないですか。一見うまく動いているように見えて、止まることができなくなっていたのです。
よくよく、挙動を見てみると、kickしているスクリプトはちゃんと再起動しているが、kickされているスクリプトがみるみるプロセスとして増えていく。
このkickスクリプトが、悪さをしていることに気づきました。
親プロセスが再起動されても、子プロセスが再起動されないことヒントに、調べてみると、execの有無で挙動が変わることに気づきました。
問題が起こるスクリプト
(前略)
carton /home/plenv/exec -- "$1"
問題が起きないスクリプト
(前略)
exec /home/plenv/carton exec -- "$1"
execは、子プロセスを作るのではなく、同一プロセスとして、実行するコマンドです。なので、親スクリプトが止められたら、自動的にその先のスクリプトも止められます。
これで、問題が解決しました。
出来上がった、kickスクリプトを以下に書いておきます。
#!/bin/sh
export HOME=/home/plenv
export PATH="$HOME/.plenv/bin:$PATH"
eval "$(plenv init -)"
cd $HOME
exec carton exec -- "$1"
これで、無事daemontoolsからもcrontabからも起動できる、kickスクリプトが完成しました。