April 16, 2012

スクリプトの存在するディレクトリを調べる

シェルスクリプトを書いていると、
「そのスクリプトが置かれているディレクトリをしりたい」
なんてことがままある。

そんな場合は、
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
とする。
非常に稀なケースとして、スクリプトが存在するディレクトリが消失している場合は、DIRが空になる。
DIRが空かどうかはチェックすべき。

これは.で読み込んだ場合でも正確に動作する。

shではエラーが出る。bashで実行すること。

出典:
http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in

April 9, 2012

Arduino と W5200 ( WIZ820IO )を接続する3

コレの続き。
W5200へのアクセステスト
34時間目にしてついにスタック!
n=3で2回スタックしたし、一週間も持たずにスタックするとかやっぱり信用出来ない。。。

W5200そのもの、あるいはWizNetのライブラリ、もしくはWebServerスケッチかなぁ?

WebServerスケッチとそれ以外の原因の切り分けのために
W5100搭載のEtherシールドをつけたやつも並行して実験しておこうかな。
結果:
W5200は約50時間(147,714回)でスタック!
リセットして再度実験して50分(2,939回)で再度スタック!
リセットして再度実験して4日と8時間(260,602回)で再度スタック!
リセットして再度実験して2日と20時間(181,085回)で再度スタック…
リセットして再度実験して6日と16時間(359,543回)で再度スタック……
リセットして再度実験して4日と10時間(262,735回)で再度スタック……
W5100は20日以上トラブル無く稼働中(854,712回)!
時間と回数が合わないのは1回が取得+1秒ウェイトである上に、
数十万個のファイルがスクリプトを回しているディレクトリ下に作成されていて、
そのあたりも原因っぽい。こんな長時間まわすと思ってなかった…

どうもWebServerスケッチではなく、W5200かW5200用ライブラリがおかしい。
そしてW5100は安定しておるように見える。

どっから手をつけたもんかなー。
W5200の個体差というか、ハズレ個体なのかもしれんので、
もう一個買ってみるかー。

追記:4/16
実験結果更新


追記:4/22
実験結果更新

April 7, 2012

CentOS6 における gitサーバ の構築

gitの管理系としてgitoliteを採用し、環境を構築する。 
まずは各種のインストール。
gitoliteは公式レポジトリにないので、EPELから取ってくる。
# yum install git
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
# yum install gitolite
これでgit及びgitoliteが導入された。
gitをホストするためにgitoliteという名前のユーザーがインストール時に作成されている。

注意すべきは、gitoliteアカウントがgitサーバにおけるすべてのレポジトリの所有者であり、
唯一必須のgitサーバのシステムアカウントである点である。
すべてのユーザーはgitoliteアカウントとしてgitサーバにアクセスすることになる。
各ユーザーはSSH公開鍵によって区別される。
このあたりがしばらく理解できなくて苦しんだ。

つぎにgitの管理ユーザーのための設定を行う。
gitoliteは管理情報をgitで管理するため、管理ユーザーすらgitサーバに、
(共用であるgitoliteアカウント以外には)システムアカウントを必要としない。

gitのクライアントとなる端末(サーバと同居してもいいが)のユーザーでsshの鍵を作り、
gitoliteが導入されているサーバにコピーしておく。
以下はクライアントでの作業
$ ssh-keygen -t dsa
これで、~/.ssh/id_dsaと~/.ssh/id_dsa.pubが出来ているはずである。

また、sshのコンフィグファイルを作っておくと便利である。
以下はクライアントでの作業
$ vim ~/.ssh/config
host gitserver #gitserverは適当に名前を変えてもよし
    user gitolite
    hostname 192.168.1.2 #gitserverのIPかDNSでひけるホスト名
    port 22
    identityfile ~/.ssh/id_dsa

id_dsa.pubをgitサーバにコピーし、/tmp/admin.pubなどにおいておく
(セットアップが終わったらいらなくなるのでtmpでよい) 
gitoliteは鍵の名前でユーザー名を管理することになるため注意。
(この例では管理ユーザーの名前はadminとなる)
以下はgitサーバでの作業
# chmod a+r /tmp/admin.pub 
# su -l gitolite
$ gl-setup /tmp/admin.pub
このあと設定ファイルをいじるためにvimが起動するが
ESC→:q→リターン
で抜ける。 

この時点で管理データレポジトリがたっており、あとはすべて外からgitを介して設定できる。