金曜日, 9月 29, 2006

Debian GNU/Linux で Xen を使う

やっぱり、世の中は仮想化ですよ。
というわけで、Xenを使ってみました。
使おうとは前から思っていたんですが、何度インストールしてもなかなかうまくいかなかったんですね。

ところが最近DebianのTestingに入ったパッケージで簡単にインストールできました。
aptitude install xen-linux-system-2.6.17-2-xen-686
これで再起動すればXenカーネルで起動できます。今までの苦労はなんだったんだ。

ついでに、xen-toolsやxen-ioemu-3.0-unstable、libc6-xenなんかも入れておきましょう。

次に仮想サーバーのイメージファイルを作ります。
手順は以下の通り。

dd if=/dev/zero of=/home/xen/debian_image bs=1024k count=2048
mkfs.ext3 /home/xen/debian_image
mount -o loop /home/xen/debian_image /mnt/disk
debootstrap --arch i386 etch /mnt/disk http://ftp.jp.debian.org/debian

最初に2GBのからのファイルを作り、次にそのファイルの中にext3ファイルシステムを作ります。
マウントして、必要なシステムをインストールします。

最後は適当な設定ファイル(debian_image.conf など)に設定を書きます。
cp /etc/xen/xmexample1 /home/xen/debian_image.conf

kernel = "/boot/vmlinuz-2.6.17-2-xen-686"
ramdisk = "/boot/initrd.img-2.6.17-2-xen-686"
name = "Domain-1"
vif = [ 'ip=192.168.2.2,bridge=xenbr0' ]
disk = [ 'file:/home/xen/debian_image,hda1,w' ]
netmask="255.255.0.0"
gateway="192.168.2.1"
vmid=1
hostname= "vm%d" % vmid
root = "/dev/hda1 ro"

これくらい書き換えるといいです。
あとは、
xm create /home/xen/debian_image.conf -c
などと起動すればいいです。

木曜日, 9月 28, 2006

Debian GNU/Linux で文字コードの変換

改行の変換に続いて文字コードの変換。
nkfとかありますが、国際化されたiconvを使いましょう。
まあ、どっちも名前しか知りませんでしたが。

iconv [-f 入力のエンコーディング] [-t 出力のエンコーディング] [inputfile ...]
で変換できます。

変換可能な文字コード(の名前)については、-l オプションで見ることができます。
処理も早いし、便利ですね。

Debian GNU/Linux で改行コードの変換

いつもemacsで変換してたので、シェルで変換する方法を知りませんでした。
で、そういうときに使うのがこれ、trコマンド。
perlの中にほぼ同じ機能の関数がありますね。

tr -d '\r' < file.windows > file.linux
こうするとDOSの改行からLinuxの改行にできます。これはCRLFからCRを取り除いてるだけです。
CRLFをLFに変換するほうが正しいですね。
上のやり方が正しいかは文字コードに詳しくないと答えられないです。

他の場面でも使えそうな、便利なコマンドを知りました。

木曜日, 9月 21, 2006

iptables で fiwewall

sshd[x]: Illegal user admin from aa.bb.cc.dd
なんてメッセージが /var/log/auth.log にあふれてます。

なので簡単なファイアーウォールで減らすことにしました。

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

これを以前のportfoward用のファイルに追加して実行するだけです。
最初の行の意味は、22番ポートへのアクセスは履歴に記録しておく。
次は、60秒でその履歴を更新して、4つIPが見つかったら接続を拒否します。

要は、3回以上sshで接続してきたらそれ以上は受け付けないというだけです。
まあ、気休め程度ですが、こういうところから少しずつファイアーウォールを作っていくのもいいかもしれません。

水曜日, 9月 20, 2006

Debian GNU/Linux で Bind (Bind9)

頭のてっぺんからつま先まで独自仕様なdjbdnsがなんとなく嫌でした。
車輪の再発明が嫌だからDNSSecには対応しないとか言ってるくせに、daemontoolsやtcpserverまで書いたりして意味不明です。

というか、実はtinydns、パフォーマンスも悪いらしい。
非公式のパッチをいろいろ当てたりするのも手間ですし。
面倒な上に性能が低いので、これを機会に止めてみました。
それでも、(非公式パッチを当てたとしても、)セキュリティー的にはtinydnsの方が上だとは思っていますが。

で、Bind。
設定ファイルの構成がいいです。
named.confがメインの設定ファイルですが、管理者によるオプションはnamed.conf.optionに記述します。
これでバージョンアップのときにも設定ファイルを使いまわせる(可能性が高い)。
ゾーンの設定もnamed.conf.localに記述します。
こういうところはさすがDebian。
Redhat系にはない、気の利いたやりかたです。

僕はキャッシュサーバーにはpdnsdを使っているので、named.conf.optionに
recursion no;
を追加します。
bindの使うIPを制限するときは、
listen-on {
59.106.42.193;
59.106.42.194;
};
も追加します。

ゾーンの設定はnamed.conf.localに記述します。
zone "infology.info" {
type master;
file "/etc/bind/db.infology.info";
};

もちろん、ゾーンファイルを先に作成しておく必要があります。
-------------------------------------------------------------------
;
; BIND data file for infology.info
;
$TTL 300
@ IN SOA infology.info. hostmaster.infology.info. (
2006082102 ; Serial
300 ; Refresh
300 ; Retry
900 ; Expire
300 ) ; Negative Cache TTL
;
IN NS a.ns.infology.info.
IN NS b.ns.infology.info.
IN MX 0 a.mx.infology.info.
IN MX 0 b.mx.infology.info.
IN A 59.106.42.202
a.ns IN A 59.106.42.193
b.ns IN A 59.106.42.194
a.mx IN A 59.106.42.195
b.mx IN A 59.106.42.196
----------------------------------------------------------------

あとは必要なだけゾーンを追加してやれば、あっさりと動きます。
動かす手間が大違いです。
あと、ゾーンごとにファイルが分かれてるのもいいですね。

メールボックスの名前

標準的なメールボックスの名前が、なんとRFCで定義されています。びっくりですね。
postmasterとかwebmasterあたりはわからないこともないですが、infoだとかmarketingだとかまで定義されているので驚きます。

まあ、無理にあわせる必要もないでしょうけど、迷うくらいならこれに従ったほうがいいですね。

月曜日, 9月 18, 2006

VLC

かなり多くのフォーマットに対応したマルチプレーヤー。とてもいいです。
実際、Realmediaのフォーマット以外はほぼなんでも再生できます。
おまけに軽量。
おまけにWindowsでもLinuxでも使える。
とてもいいです。

ただ、ジュークボックスのような機能はないので、普段音楽を聞くのに使うには向かない感じです。

いろんなフォーマットに対応するために、いろんなコーデックやらプレイヤーやらを入れるのが面倒な人には最適です。
僕は気に入りました。

金曜日, 9月 15, 2006

Picasa Web Album

Picasaは写真の管理や、簡単な編集ができるアプリケーションです。
今まで写真はflickrで管理してたので興味なかったんですね。

ところが、Picasa、使えます。
まず、軽いです。軽快さがよいです。
やっぱり、なんでもWebというのはよくないのかも知れません。
ローカルでの処理は、ローカルのアプリケーションを使うべきですね。

Web上に保存しておけるサイズは250MBを結構少ない。
まあ、その気になればアカウントをいくつもとればいいんだけど、そういうのは面倒ですし。
今までの経験から言うと、携帯のカメラで撮った写真をブログにアップするくらいならこれくらいでも十分です。
この容量が埋まる頃には、サービスも進化してたり、もっといいサービスが出てるかも知れないから気にしなくていいですね。

flickrと比べると、アルバムの数に制限がないところが便利です。
flickr無料版のあの制限は結構苦しい。
AOL Picturesは、アップロードが黙って失敗したりしてひどい目にあいました。
なんか、やっぱりGoogleはえらいです。

木曜日, 9月 14, 2006

aptitude

これまでうちのDebianでは、ずっとaptを使ってパッケージの管理してました。
aptitude、もっといい。

aptを使ってて面倒なことのひとつは、searchやshowを使うときはapt-cache、installやupgradeを使うときはapt-getと使い分けないといけないことですね。
でもaptitudeはどっちもできる。便利だなあ。

あとはsearchの結果がaptitudeのほうが見やすいです。
パッケージの属性、インストール済みとかconfigファイルだけ残っているとかバーチャルなパッケージだとか、そういうのも表示されてわかりやすい。

これからはaptitudeの時代ですね。

水曜日, 9月 13, 2006

プロセスが複数起動するのを防ぐ - start-stop-daemon

というわけで、前回のautosshを使ったポートフォワーディング。
autosshがsshを監視、再起動してくれるのでこのプロセスはひとつでいいわけです。

まあ、その気になればそんなスクリプトはすぐに書けるわけですが、こんな機能ないわけないよ。
ってわけで、start-stop-daemon。
このコマンドを使って管理することができます。

start-stop-daemon --stop --pidfile /var/run/autossh/pop3.pid --signal 0 --quiet || start-stop-daemon --start --pidfile /var/run/autossh/pop3.pid --chuid user1:user1 --background --make-pidfile --exec /usr/bin/autossh -- -M 0 -gN -b 192.168.0.1 -l user1 -i /home/user1/.ssh/id_dsa -L 10110:localhost:110 pop3.kumicho.net

こんな感じ。
これで複数のプロセスが起動することはありません。
ここでは、
1.pop3.pidに書かれたプロセスが存在する場合は起動しない
2.そうでなければ、所有者user1:user1のautosshプロセスを起動して、そのプロセスIDをpop3.pidに書き込む
ということをやっています。

このstart-stop-daemon、他にもchrootの機能なんかもあっておもしろいです。
つーか、これ使ったら、ユーザーの変更やpidファイルおよびプロセスの管理、chrootの機能をプログラムに持たせる必要ないのでは?
多くのプログラムがなんでそういう機能を自前で持っているのか理解に苦しみますね。

火曜日, 9月 12, 2006

pdnsd でローカルの名前解決

プライベートネットワーク内でもDNSを使いたいときがあります。
テストでDNSラウンドロビンをしてみたいときとか。。。

このやり方は大まかに言って2つあります。
・キャッシュサーバーが特定の名前について自分で解決して返答をする
・キャッシュサーバーが特定のドメインについて、特別なサーバーに尋ねる

1番目は解決したい名前が少ないときに便利です。
2番目は解決したい名前が多いときに便利。

djbdnsのdnscacheでは2番目の方法しか使えません。
pdnsdだと1番目の方法も使えます。

で、その方法は、pdnsd.confに
rr {
ttl=120;
name="rr.local.";
a="192.168.0.1";
a="192.168.0.2";
a="192.168.0.3";
}
とか加えてやればOK。
とっても簡単です。

wnpp-alert

このプログラムを使うと、インストールされている、みなしごパッケージを見つけることができます。
まあ、みなしごパッケージを見つけてもどうということはないんですが、「あ、これ今メンテナーがいないんだ。使うのやめよう。」とかできます。
たぶん、正しい発想は「あ、これ今メンテナーいないんだ。僕がメンテナンスしよう。」ですけどね。
devscriptsパッケージに含まれています。

気になる人は気になるかも知れません。

金曜日, 9月 08, 2006

autossh

まあ、要するに、sshの接続が切れたら自動で再接続してくれるっていうものです。
port fowarding している回線が不安定なときに便利。

/usr/bin/autossh -M 21021 -f -gN -b 192.168.0.1 -L 20001:pop3.kumicho.net:110 gateway.kumicho.net
のようにして使います。

-M以外は普通のsshを使ったときのオプションと同じです。
-Mはautosshが接続を確認するために使うだけなので、なくてもいいです。そのときでもsshが停止した場合には再起動されます。
そのときには-Mの引数を0にします。
-M自体を使わないと、デフォルトのポートで接続してしまうので複数のautosshを起動することはできません。