Home

技術系のメモと日々の雑感

Domain-U 起動せず

Xen の Domain-0 になっているサーバをリブートしたら、いきなり Domain-U が起動しなくなってしまった。

# xm create hoge
Using config file "./hoge".
WARNING:root:Unknown directive acpi
Going to boot CentOS (2.6.18-8.el5xen)
  kernel: /vmlinuz-2.6.18-8.el5xen
  initrd: /initrd-2.6.18-8.el5xen.img

普通ならプロンプトが戻ってくるはずなのにここで止まってしまう。
Virt-Manager を見ると「停止中」といったステータスになっていた。
もちろんコンソールも開けない。
で、表示されているメッセージ

WARNING:root:Unknown directive acpi

の内容からすると Domain-U の設定ファイルの記述が怪しいので見てみると

name = "hoge"
memory = "250"
disk = [ 'tap:aio:/var/xen/hoge.img,xvda,w', ]
vif = [ 'mac=XX:XX:XX:XX:XX:XX, bridge=xenbr0', ]
vfb = ["type=vnc,vncunused=1"]
uuid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
bootloader="/usr/bin/pygrub"
vcpus=1
on_reboot = 'restart'
on_crash = 'restart'

あれ?
acpi なんて記述はどこにもないぞ。
ということは Domain-0 側の設定なのかと思ったが

# cd /etc/xen
# grep acpi *
xmexample.hvm:#acpi=0

見ての通り、サンプルファイルの中の記述しかヒットしなかった。
/var/log/xen/xend.log にもこれといってメッセージは出てないし。
そしたら acpid が起動してないのが原因なのかと確認してみると

# ps ax | grep acpi
   19 ?    S<   0:00 [kacpid]
 2179 ?    Ss   0:00 /usr/sbin/acpid
 2391 ?    S    0:00 hald-addon-acpi: listening on acpid socket /var/run/acpid.socket

ちゃんと動いてるなぁ。
一応 restart してみたけど変わらなかった。
新しく Domain-U を作ってみてもだめなので、とうとうお手上げ。
結局 CentOS から入れなおすことにしたけど、原因不明で再インストールなんて何年ぶりかなぁ。

Sleipnir の小技

Sleipnir のデフォルトの文字サイズ(中)は少し大きく感じるので小に設定して使っているんだけど、ページによっては小さすぎて見にくいことがある。
今までは、そういうページに遭遇したらいちいちステータスバーにある「ページの倍率を変更」を使ったりしてたんだけど。
こないだ、偶然 Alt+マウススクロールでも変えることができるのを見つけた。
これは自分のためにあるような機能だな。
ありがたい!
ついでに最近見つけた Sleipnir の小技をご紹介。
表示倍率の変更と同じぐらいよく使うのが、マウスを右クリックしながらスクロールするとアクティブなタブが切り替えられる機能。
キーボードに手を置いているときは F2 と F3 でも代用できるけど、Web を見てるときはマウスを握ってる方が多いしね。
あと、使う頻度は低いけど、Ctrl+L で直前に閉じたタブを開きなおすことができるのも何気に便利。
過去の閉じたタブを記憶してくれているので、Ctrl+L を押すたびに古いページにさかのぼって開きなおすことができる。
[ファイル] - [最近閉じたページを開く] より楽だね。
忘却の彼方に消えてしまったページを探すときにも活躍するから、[オプション] - [パネル] - [最近閉じたページ] で履歴数を増やしておくといいかも。

rev コマンドの実力

THE GEEK STUFF に「Four Completely Useless Linux Commands」というエントリがあって、普段はまったく使わないコマンドがいくつか紹介されていた。
で、面白かったのは元のエントリよりもコメントの方。
紹介されていたコマンドの中に rev があったんだけど、このコマンドはちゃんと役に立つよ、とツッコミを入れた人がいて

$ cat hoge.txt
aaa zzz
aaa yyy
aaa xxx

$ rev hoge.txt | sort | rev
aaa xxx
aaa yyy
aaa zzz

といった使い方があると書いてあった。
なるほど。
行の末尾の文字列でソートしたいとき、確かにこれなら簡単だ。
さらにびっくりしたのは、rpm -qa の出力から、ディストリビューションなどによって付けられるカスタマイズバージョンだけを削るというテクニック。

# rpm -qa | grep firefox
firefox-2.0.0.13-1vl4
# rpm -qa | grep firefox | rev | cut -f 2- -d ¥- | rev
firefox-2.0.0.13

よく思い付くもんだ。

iptables と IP Alias

IP Alias で定義したアドレスへのパケットを PREROUTING に通すために iptables のルールを書いていたときに気が付いたんだけど。
iptables の -i とか -o には IP Alias で定義したインタフェースは指定できないんだね。
知らずに

iptables -t nat -A PREROUTING -d XXX.XXX.XXX.XXX -i eth0:0 -j DNAT --to 192.168.1.10

という風に書いたら

Warning: wierd character in interface `eth0:0' (No aliases, :, ! or *).

と、怒られてしまった。
頭の中で描いてたイメージとちょっと違ってたな。
パケットが IP Alias 側に届いてから eth? 渡されるところまでは iptables は関知しないってことだね。
覚えとこ。

qmail-inject を走らせるのは誰?

普段 Postfix ばかり使っていて、qmail はまったく触ったことがない。
こないだ、とあるサーバで qmail-inject というプロセスが定期的に走っているのを見て、何をやってるのだろうという疑問が。
で、この前書いた ps の -f オプションが早速役に立った。

 1640 ?        Ss     0:25 crond
14085 ?        S      0:00  ¥_ crond
14087 ?        Ss     0:00      ¥_ /bin/sh -c /home/hoge/fuga.sh
14104 ?        S      0:00      ¥_ bin/qmail-inject -H --

crond が呼んでるのか。
なるほど。
qmail-inject はメールの送信に使われるプログラムらしいから、標準出力に吐かれた内容を送るのに使ってるみたいだね。
って、qmail を使ってる人にとっては常識なんだろな。