ちょっとした技 †
sudo †
ssdlinux には sudo コマンドが付いているが、設定がされていない。
/etc/pam.conf に以下を加える
# # The PAM configuration file for the `sudo' service # sudo auth required pam_unix.so sudo account required pam_unix.so sudo session required pam_unix.so
root になって visudo コマンドで、wheel グループに属するユーザーは一定時間なんでも出来るように設定する。(コメントを外すだけ、コマンドを限定したほうが良さそうだが、実行したコマンドのログが残るのでよしとする)
# Uncomment to allow people in group wheel to run all commands %wheel ALL=(ALL) ALL
wheel に属する一般ユーザーで sudo cat /etc/shadow とすれば、パスワードを聞いてくる。自分のパスワードを入れれば、実行されるはず。後は、5分間パスワード無しで sudo コマンドが使える。./configure ; make ; sudo make install というスクリプトを書いても大丈夫だ。
su - コマンドのような、ユーザーの環境を引き継がないで実行する方法がわからない。
時刻合わせ †
/etc/rc.conf に ntpdate=YES ntpdate_hosts="210.173.160.27 210.173.160.57 210.173.160.87" ntpd=YES を加える。
/etc/ntp.conf に以下の設定を加える
# ntp[123].jst.mfeed.ad.jp server 210.173.160.27 server 210.173.160.57 server 210.173.160.87
root になって /usr/sbin/ntpd を起動、しばらく経ってから ntpq で様子を見る。ホスト名を付けないとエラーになるのは、eth1 とか tun0 とか動いていないインターフェースがあるからかも。
$ /usr/sbin/ntpq minig ntpq> peer remote refid st t when poll reach delay offset jitter ============================================================================== *ntp1.jst.mfeed. utc3.crl.go.jp 2 u 32 64 377 23.266 -0.722 2.338 +ntp2.jst.mfeed. utc3.crl.go.jp 2 u 37 64 377 22.886 4.153 4.064 +ntp3.jst.mfeed. utc2.crl.go.jp 2 u 33 64 377 23.003 -1.002 2.714 ntpq>
時刻が合ったら、hwclock --systohc しておく。
ブロードバンド・ルータのDNS †
ブロードバンド・ルータのDHCPにアドレスを割り当ててもらう場合、DNSの設定 (/etc/resolv.conf) がブロードバンド・ルータを指すように変更される。ブロードバンド・ルータでは、プロバイダのDNSとの間で問い合わせを中継 (forwarding) してくれる。
内部にメール・サーバーを置いて外部へメールを出そうとする場合、宛先に対応するメール・サーバーを見つけるために、DNSを使ってMXレコードを検索しないといけないのだが、どうもブロードバンド・ルータがMXレコードの中継をやってくれないようだ。セキュリティ上の問題で意図してやっているのか、そういう仕様なのか不明だ。
仕方が無いので、以前からやろうと思っていたのだが決心がつかないでいた、OpenBlockS の固定アドレス化を行うことにした。ブロードバンド・ルータのアドレスは、192.168.0.1 で、OpenBlockS (ホスト名 minig)のアドレス 192.168.0.80 で、このアドレスをブロードバンド・ルータが DHCP で割り当てることが無いことを確認し、/etc/rc.conf を書き換えて再起動。
$ cat /etc/rc.conf if [ -r /etc/defaults/rc.conf ]; then . /etc/defaults/rc.conf fi rc_configured=YES do_contrib_rc=NO hostname="minig" defaultroute="192.168.0.1" domainname="localdomain" auto_ifconfig=NO net_interfaces="eth0" ifconfig_eth0="192.168.0.80" ntpdate=YES ntpdate_hosts="210.173.160.27 210.173.160.57 210.173.160.87" ntpd=YES sshd=YES
他にも、ls /usr/contrib/samba/lib/smb.conf でインターフェース名をアドレスで指定していたのを修正。/etc/resolv.conf には、プロバイダから指定された DNS のアドレスを書いておく。
rsyncを使ったバックアップ †
Linux同士でホーム・ディレクトリの内容を、rsyncを使って お互いにバックアップしあうには、例えば fedra1 から minig(OpebBlockS)に バックアップしたいときは、fedra1側から以下のようにする。
rsync -avz --delete -e ssh --exclude="otsuka/backup/*" $HOME \ minig:backup/fedora1
バックアップが完了した後、以下のようなエラーが出ることがある。
rsync error: partial transfer (code 23) at main.c(925)
これはファイルの owner が違っていて変更できなかったといったことのようだ。-a は -rlptgoD と等価なのだが一般ユーザでは goD オプションは使えないので、-a ではなく -rlpt を指定すればいい。
Red Hat や Debian のホームディレクトリのグループは、uid と同じだが、 ssdlinuxでは、users になるので、変更できないということのようだ。
- 参考: http://oku.edu.mie-u.ac.jp/~okumura/networking/rsync.html
- ITmedia エンタープライズ:rsyncを使った熟練者レベルのバックアップ (1/3)
画像の大きさ †
perlのCGIで画像を送るときにサイズ指定する必要がある場合、 今までは Windows で調べて直接コーディングに埋め込んでいた。 shellのコマンドラインから調べられれば、 もう少し手間をかけずに画像の大きさが調べられるはずだ。
ImageMagick というパッケージに identify というツールが付いているので、 これで任意の画像ファイルの大きさなどが得られるらしい。 そこで debian PC から apt-get source imagemagick で持ってきた ソースを OpenBlockS でコンパイルしてみたが、
libtool: link: `/usr/cross/powerpc/powerpc-ssd-linux-gnu/lib/./libstdc++.la' \ is not a valid libtool archive
というようなエラーで止まってしまった。 セルフ環境でコンパイルしているにもかかわらず、/usr/cross/powerpc/... からライブラリをリンクしようとしているようだ。 これを制御しているのが、libtool という configure で自動的に作られた ファイルで、これが腐っているためにそうなる、ということのようだが、 これ以上かかわるのはやめた。
次に、libextractor というパッケージで、画像ファイルの 自動判別が出来るようなので、これをまた apt-get source extract で 持ってきてコンパイルを試みたが、これも失敗。 付属の README によると、凶悪な大きさの C のソースを辞書として コンパイルしなければならないようで、100MBのメインメモリが必要なので、 なるべくバイナリで入手するように、とのことでこちらも断念。
よくよく考えたら、すでに php が動いているので、 これをコマンドラインから以下のスクリプトで呼び出せば 簡単にプログラムできることに気が付いた。
#!/usr/local/bin/php <?php if ($argc <= 1) { echo "Usage: Calculate image size\n"; echo "getimagesize.php {file} ...\n"; } else { while($fn = next($argv)) { $size = getimagesize($fn); echo $fn . ": " . $size['mime'] . ": " . $size[3] . "\n"; } } ?>
GnuPG †
署名の確認方法。怪しいソースに入れ替わってないか、よく確認しよう。 Linuxのカーネル・ソースを貰ってくる例。
- kernel.org から linux のカーネル・ソースをダウンロード
$ wget http://www.jp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.gz $ wget http://www.jp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.gz.sign
- 署名を確認
$ gpg --verify linux-2.6.9.tar.bz2.sign gpg: 2004年10月19日 07時19分21秒 JST のDSA鍵ID 517D0F0Eによる署名 gpg: 署名を検査できません: 公開鍵が見つかりません
- 鍵を持っていなかった場合は鍵サーバーから貰ってくる。
0xから先のIDの部分を、先の手順で無いと言われたメッセージから拾ってくる。*1
$ gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E gpg: 鍵517D0F0E: 公開鍵「Linux Kernel Archives Verification Key \ <ftpadmin@kernel.org>」を読み込みました gpg: 処理数の合計: 1 gpg: 読込み: 1
- 改めて署名を確認する
$ gpg --verify linux-2.6.9.tar.bz2.sign gpg: 2004年10月19日 07時19分21秒 JST のDSA鍵ID 517D0F0Eによる署名 gpg: 正しい署名: "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>" gpg: 別名 "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>" gpg: 信用データベースの検査 gpg: 絶対的に信用する鍵が見つかりません gpg: 警告: この鍵は信用できる署名で証明されていません! gpg: この署名が本人のものかどうかの検証手段がありません。 主鍵の指紋: C75D C40A 11D7 AF88 9981 ED5B C86B A06A 517D 0F0E
- 鍵の指紋(Finger Print)をkernel.orgのサイトを見て確かめる。
apacheやphp等も同じ要領で確認できる。
出先からお家サーバーに繋ぐ方法 †
出先のサーバー satellite にある ~/RELEASE-20050119/ 以下のファイルを お家サーバー minig.example.jp にミラーリングする。
会社から出先のサーバーに入って、出先のサーバーのIPアドレスをお家サーバーに伝える。
[otsuka@satellite otsuka]$ mkdir tmp/minig.example.jp ; cd tmp/minig.example.jp [otsuka@satellite minig.example.jp]$ wget http://minig.example.jp/
会社からお家サーバーに入って、追加で出先サーバーからの ssh ができるように iptables の チェーンの最初に加える。
[root@minig root]# tail /var/log/access_log | grep wget 172.16.110.220 - - [26/May/2005:18:46:23 +0900] "GET / HTTP/1.0" 200 311 "-" "Wget/1.8.2" [root@minig root]# /sbin/iptables -I INPUT 1 -p tcp -s 172.16.110.220 --dport 22 -j ACCEPT
出先のサーバーのディレクトリをsshで繋いだお家サーバーのディレクトリにミラーする。
[otsuka@satellite minig.example.jp]$ cd ~ [otsuka@satellite otsuka]$ rsync -avz -e ssh RELEASE-20050119 \ minig.example.jp:/home/ftp/pub/plathome/OpenBlockS266/
ミラーが終わったらお家サーバーの iptables チェーンから出先サーバーを抹消する。
[root@minig root]# /sbin/iptables -D INPUT 1
免責事項
ここに記載されている内容を実際に運用した場合のトラブルに関しては一切責任を負えませんのでご了承ください。
Copyright 2000-2011 Koichi Otsuka