Oct - 28th
CentOS5でErlangをビルドするときの対処
Posted at 11:17 am | Filed Under Linux
ここに書かれている通り。現行でもバージョンが同じだったのでメモ。
--- lib/ssl/c_src/Makefile.in 2008-03-27 13:43:04.000000000 +0300 +++ lib/ssl/c_src/Makefile.in 2008-03-27 14:03:27.000000000 +0300 @@ -38,7 +38,7 @@ CC = @CC@ LD = @LD@ SHELL = /bin/sh -LIBS = @LIBS@ +LIBS = @LIBS@ -lkeyutils -lselinux PLAIN_CFLAGS = @CFLAGS@
Oct - 14th
pacoを導入
Posted at 2:18 pm | Filed Under Linux
yumのレポジトリからインストールするのに何かと不都合のあるケースがあり、たとえばPHPはどうしてもソースからビルドしたいのだが、ソースからインストールしたプログラムを管理する方法がなく、今まではmake installの結果を保存するなどしていた。しかしpacKAGE oRGANIZER略してpacoの存在をこの秀逸なエントリで知ったので、これは便利とさっそく導入した。
手元のCentOS 4.7ではgtkmmの2.12から2.4までが必要といわれる。
configure: error: Package requirements (gtkmm-2.4 >= 2.12) were not met:
yumで検索するとkbs-ContOS-Extrasにgtkmm20と24が見つかったのでとりあえず24をインストール。そしたらやはりだめで今度は
checking for GTKMM... Requested 'gtkmm-2.4 >= 2.12' but version of gtkmm is 2.4.11 configure: error: Package requirements (gtkmm-2.4 >= 2.12) were not met:
と怒られる。いったんremoveして考える。で、激怒しそうになってもう一度yum list gtkmm*の結果をみると、gtkmm20のバージョンは2.212-1になっているではないか。じゃあgtkmm22にしてくれよと思わないでもないが、まあ歴史的経緯というやつがあるのだろう。気を取り直してgtkmm20とgtkmm-develを入れてみた。が、やっぱりうまくいかない。
でも、READMEを読み返すとgtkmmはGUIインタフェース用とのことなので、サーバでは使わないだろうから
$ ./configure --disable-gpaco $ make $ make install
で十分なことに気づいた。探究終わり。それから、件の記事にもある通り、paco自体を管理するために
$ make logme
これでインストール完了。さっそく試しに何かやってみよう、というわけで標的になったのはREXMLのDoS攻撃に対する脆弱性のことはとりあえず無視してRuby-1.8.7-p72。普通にディレクトリを移動してconfigureしてmakeしたら
[root@selfkleptomaniac.org ruby-1.8.7-p72] # paco -D make install
で完了。
pacoはLD_PRELOADを使ってwrite(?)か何かのシステムコールをフックしているとのことなので、そういえば似たようなネタを読んだことがあるなあと思った次第。
Sep - 29th
/proc/PID/statusのVmHWM(とVmPeak)
Posted at 9:23 pm | Filed Under Books, Linux
この有名なエントリで読んだ、プロセスが使用しているメモリサイズを調べる方法の話が「サーバ/インフラを支える技術」にも載っていた。
しかし、注意しなければいけない。VmHWMはたとえばCentOS 4.5でカーネルを更新していなかったりする場合は表示されない。
では、いつそんなものが表示されるようになったのか。さすがにそんなマニアックなことはちょっとわからなかったので調べてみた。Googleではなかなかヒットしてくれない。仕方がないのでkernel.orgから2.6.xxのChangelogだけwgetしてgrepで探してみたら、2.6.15に
And there has been no collector of these hiwater statistics in the tree. The
new convention needs an example, so match Frank’s usage by adding a VmPeak
line above VmSize to /proc//status, and also a VmHWM line above VmRSS
(High-Water-Mark or High-Water-Memory).
という記述を発見。こいつだ。
Sep - 1st
fshの代わりにsshを使う
Posted at 5:23 am | Filed Under Linux
fshがpython-2.4以降にちゃんと対応していないので、fshを使ったシステム構成は後で困ることになるなあ、となんとなく悩んでいたのだが、ふと調べてみると「Speeding up SSH: fsh vs. OpenSSH v4 」という記事を見つけた。そのエントリにリンクされている「Quick-Tip: Reusing OpenSSH connections to the same host 」という記事によれば、OpenSSHのバージョン4以降であればfshのようなコネクションプーリング用のプログラムなしでもコネクションの再利用が出来るらしい。やり方はいたって簡単。$HOME/.ssh/configを編集して下のような行を追加する。
Host * ControlMaster auto ControlPath /tmp/%r@%h:%p
意味は、全てのホストでControlMasterを利用するように指定して、接続情報は/tmpに保存する、というものになる。いきなり/tmpだとマルチユーザのシステムではいかがなものかと思われるので、$HOME以下に適当な場所を指定する方がいいとのこと。まあ、その通りだ。autoのかわりにautoaskにすると、毎回接続を試みるたびにセッションを使い回すかどうか質問される。
実際に接続すると、ControlPathで指定した箇所に「リモートユーザ名@ホスト:ポート番号=」という名前のファイルが出来上がる。手元の環境でfsh、ssh共に適当な回数で実行してみたが、こんな結果になった。
まずはfsh:
localhost:~ yagi$ time fsh 192.168.x.xx ls > /dev/null real 0m0.607s user 0m0.039s sys 0m0.021s localhost:~ yagi$ time fsh 192.168.x.xx ls > /dev/null real 0m0.121s user 0m0.038s sys 0m0.020s localhost:~ yagi$ time fsh 192.168.x.xx ls > /dev/null real 0m0.117s user 0m0.035s sys 0m0.019s localhost:~ yagi$ time fsh 192.168.x.xx ls > /dev/null real 0m0.130s user 0m0.036s sys 0m0.021s
初回の接続だけ0.06秒かかったが、あとはおおむね0.01秒くらい。
続いてssh:
何もしないとおよそ0.3秒くらいかかる。ところが、ControlPathで指定したディレクトリにファイルが出来ると一気に
real 0m0.054s user 0m0.004s sys 0m0.005s
こんなスコアになってしまった。fshより早いってのはどういうことだ?
Jul - 1st
crontabの責任者ちょっと来い
Posted at 4:34 pm | Filed Under Linux
crontabのオプションに「-r」というのがあるのをご存知だろうか。ご存知でしたか。そうですか。
manによれば、crontabについてこんな風に説明されている。
crontab コマンドは、IEEE Std1003.2-1992 (“POSIX”) に準拠している。この新しいコマンドのシンタックスは、 Vixie Cron の前のバージョンと異なっている (古典的な SVR3 シンタックスとも異なる)。
なるほど。作者のPaul Vixieという人の独断で作られたわけではないようだ。
しかし、このコマンド、とんでもなく人倫にもとる設計になっている。
みなさんがcrontabコマンドを利用するのは、たいてい編集(「crontab -e」)か閲覧(「crontab -l」)で、あとはせいぜいユーザを指定する(「crontab -u user -l」)くらいだろう。
だが、crontabのオプションにはもうひとつ「-r」というものがある。これは、
-r オプションは、現在の crontab を削除する。
という、実に問答無用なオプションで、編集の「e」のすぐ脇の「r」を押下してしまったが最後、あなたのcronは/var/log/cronにわずかな痕跡を残しただけできれいさっぱり消えてしまうのである。あなおそろしや。しかもご丁寧に何ら確認のメッセージを出すこともなく動いてしまう。rmやmvのように「-i」オプションをaliasに追加しておくようなせめてもの予防策さえない。
今日もどこかでcronの内容が意図せざる方法で消えているのだろうか。
Jun - 25th
シェルスクリプトに無知なもので
Posted at 2:42 am | Filed Under Linux
bashで文字列を変数に展開するのにsedを何回も呼ぶのはいかがなものかと思ったので、なんとからなんかといじっていたら、文字列を分解して変数に展開するのは配列を使ってこういう感じでやるのかと気づいた。
$ cat test.sh
#!/bin/bash
TESTDATA="1 2"
DATA=(`sed <<< $TESTDATA -e s/[^0-9]/\ /g`)
echo ${DATA[0]}
echo ${DATA[1]}
$ ./test.sh
1
2
そこで他にもないか調べていたら、sedの呼び方は
$ echo $AAA | sed -e s/3/aho/g
より
$ sed <<< $AAA -e s/3/aho/g
の方が早いらしい。
ちょっと計ってみた。
#!/bin/sh
MAX=1000
COUNT=1
while [ $COUNT -le $MAX ];
do
echo $COUNT | sed -e s/[0-9]/hoge/g
COUNT=`expr $COUNT + 1`
done
これと
#!/bin/sh
MAX=1000
COUNT=1
while [ $COUNT -le $MAX ];
do
sed <<< $COUNT -e s/[0-9]/hoge/g
COUNT=`expr $COUNT + 1`
done
これで計測した結果。
MAXを1000にしたら
echo :real 0m4.470s
ヒアドキュメント:real 0m3.679s
MAXを10000にしたら
echo :real 0m43.403s
ヒアドキュメント:real 0m36.990s
とっても素直な結果だ。
Jun - 24th
CiscoのVPNクライアント(Linux版)でがっくり
Posted at 7:24 pm | Filed Under Linux
CiscoのVPNクライアントを使わなければいけない環境でWindows用クライアントしかもらえず、それでもLinuxマシンをクライアントにしたい人用のメモ。
事前にこれだけは知っておかないといけない。
・SMP対応カーネルだとビルドできない
・パッチは出てるけど2.6.19以降のみ対応
上の条件に当てはまってしまった場合はカーネルの再構築やらなにやらいろいろ作業が発生するので大変に面倒くさい。VPNクライアントが動いたのに他に問題が起きたら嫌だから回避、という選択も間違っていない。というか、自分ではやらない。みなさんにもお勧めできない。
May - 27th
Microsoftからの刺客、その名もWIMP
Posted at 3:09 pm | Filed Under Apache, Linux, PHP, Windows
LAMPに対抗して、MicrosoftがIIS上でPHPを動かす環境を宣伝している。MSSQLではなくMySQLやPostgreSQLを宣伝するというのも愉快ではあるが。
それより何より、やはり気になるのは
Linux + Apache + MySQL + Perl(PHP, Python…) = LAMP
に対抗したキャンペーンの略称が、
Windows + IIS + MySQL + PHP = WIMP
になってしまっていることだろうか。
wimp
【名】弱虫、作話症{さくわしょう}、意気地なし、怖がり、勇気のないやつ、すぐあきらめるやつ
・You’re such a wimp. : 気が小さいね。
・That tequilla shot has been sitting there an hour, are you too much of a wimp to drink it?
さすが世界のMicrosoftはユーモアを忘れていない。
Apr - 16th
へたれな疑問
Posted at 10:03 pm | Filed Under Linux, PHP
Gnome端末でもPuttyでも、表示をEUC-JPに設定していてもメールをprocmailから標準入力で受け取ってMIMEデコードしただけのJIS(ISO-2022-JP)の文字列をきちんと表示する。あれ?と思ってただのJISを表示させたら、やっぱり文字化けしない。
$ cat test.php <?php $str = 'ダライラマ'; print(mb_convert_encoding($str, 'JIS', 'EUC-JP') . "\n"); ?> $ php -q test.php ダライラマ
この原理がわからない。JISのエスケープを見つけたらせこせこ処理してくれているんだろうか。viだとちゃんと文字化けする。
日本語環境の設定で苦労したのももう今は昔の話なので、この手の問題についてはぜんぜんわからなくなってしまった。
Apr - 14th
telnet.exeのリトライ回数を制御できないか?
Posted at 7:51 pm | Filed Under Linux, Windows
knockdを使ってクライアントマシンが接続するポートの順番を決めて、そのとおりにアクセスしてきたクライアントにだけssh経由の接続を許可しようとすると、Mac OS XやLinuxマシンをクライアントにした接続では問題ないのに、WindowsXPからのログインだけが成功するときと失敗するときがあって、あるときはWindowsファイアーウォールをオフにしたら繋がったり、またあるときはぜんぜん失敗ばかりだったり、とにかく安定しない。仕方がないので、ソケット通信をサポートするスクリプト言語ならなんでもいいので、そっちで接続すると、問題なくすべてのステージをクリアできる。
問題はtelnet.exeにあったようで、会社の同僚が調べたところ、telnet.exeは何回か接続をリトライするらしく、そのため例えば5回リトライするなら、最初のポートへの5回目の接続と次のポートの1回目の接続はたまたまうまくいくため、最初のステージ(knockdでは一回ごとの「ノック」をステージと呼ぶ)だけはクリアして、後は失敗していたのが判明した。つまりtelnetのリトライ回数を制御できないとどうやっても駄目らしい。じゃあなぜうまくいったときがあったのかが謎だ。
keep looking »