#navi(OpenBlockS)

#contents

**ちょっとした技
***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

***画像の大きさ
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";
   }
 }
 ?>

----
#include(免責事項)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS