#navi(OpenBlockS)
#contents
**ちょっとした技 [#m98fc012]
***sudo [#j817e288]
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 - コマンドのような、ユーザーの環境を引き継がないで実行する方法がわからない。
***時刻合わせ [#t99d95c3]
/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 [#u34e5425]
ブロードバンド・ルータの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を使ったバックアップ [#b569c6fc]
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):http://www.itmedia.co.jp/enterprise/articles/0707/19/news059.html]]
***画像の大きさ [#ze60051b]
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 [#t1eaecc4]
署名の確認方法。怪しいソースに入れ替わってないか、よく確認しよう。
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の部分を、先の手順で無いと言われたメッセージから拾ってくる。((最近は wwwkeys.pgp.net というサーバーが応答しないようなので、~/.gnupg/gpg.conf に keyserver hkp://subkeys.pgp.net と書いておくと --keyserver オプションを省略できる))
0xから先のIDの部分を、先の手順で無いと言われたメッセージから拾ってくる。((最近は wwwkeys.pgp.net というサーバーが応答しないようなので、『[[Submitting your GPG key to a keyserver:http://www.debian-administration.org/articles/451]]』を参考に ~/.gnupg/gpg.conf に keyserver hkp://subkeys.pgp.net と書いておいて --keyserver を省略して使ってみる))
$ 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等も同じ要領で確認できる。
***出先からお家サーバーに繋ぐ方法 [#j9952ec8]
出先のサーバー 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
----
#include(免責事項)