FreeBSDでの作業メモ

へんなプログラムとツールたちのページ

UPSの使用
 オムロンのUPS BX50XFを購入・使用することにした。
 (特に夏は)毎年何度か停電し、データが飛んでしまうリスク(及びそれに怯える心労)を考えると、 UPSなんて安いものだと思ったので、購入。
各メーカの製品のうち、500VA で一番安そうなものを選んで買った。
但し、BX50XF は Windows2000 を主な対象にしているため、そのためのケーブルしかついてこない。 NT4用はオプションで5,000円近くするので、購入せず、説明書を頼りに奮闘するも、 FreeBSD 3.4-STABLE では電源停止信号等が補足できず(オープンコレクタの回路しか 載ってないのであたりまえ...)。
 メーカに問い合わせたところ、NT4用には、ケーブルを細工しているとのこと。
PC側9PINUPS側9PIN
1(DCD)1(DCD)
3(TX)5(GND)
4(DTR)3(TX)
7(RTS)6(DSR),7(RTS)
8(CTS)8(CTS)
2(RX),5(GND),6(DSR),9(RNG)
2(RX),4(DTR),9(RNG)
 この通りに結線し、FreeBSD QandA 318で 紹介されているサンケン電気・DENSEI・OMRON用のupsdを使用。
 但し、毎日何度か "line failure" を検出してはすぐに元に戻るので、何かよくないことが 起こっているのかもしれない。何か心当たりのある方は教えてください。[2000.07.29]

 どーもNT4.0でも何秒間か停電しないとメッセージを表示しないのが普通の設定のようなので、 上のソースを修正し、5秒以上の停電でエラーメッセージを残すことにした。 修正後のソースファイル
 後ろ向きな対策だが、これでいいのか...実は故障しているなんてことが無いか心配。[2000.08.05]

xshisen-1.36の2000年問題対策
 (ports の games にある) xshisen で、2000年になってから、自分の過去のスコアが 表示されなかったり、ハイスコアの年の欄が100になって日付の最後が記録されなかったりという ことになったので、修正を試みた。なお、現時点でのportsでは既に対応済み。
 ソース展開後、作業ディレクトリでこの差分を あててから make すれば、2000年以降の記録も表示されるはず。
 スコアファイル類の記録方式の年数は2桁だが、これを4桁に変えるのはさすがに面倒なので、 POSIX推奨の方式(?)でごまかしました。
 なお、ハイスコアファイルには、2000年は100年として記録されている一方、 日付欄の文字数の制限があるため、日付の1の位が記録されていません。 個人のスコアファイルのどこかには記録されているので、そこから探して修正するのが 本来ですが、面倒なので機械的に「1」か「0」にしています。[2000.08.08/2000.09.05修正]

 すでにv1.51が出ているらしく、そこでは上述のパッチが適用されているみたい。
送った時には返事もなかったのに、採用するならひとこと連絡くらいしてくれてもいいだろうに。 なお、私を特定できる記述は一切ありませんので、あしからず。[2004.02.10]

wu-ftpdの不正なパスワード対策
 wu-ftpdで、anonymous ftpで"IE4USER@"などというパスワードを入力するclientに対し、 そのままでは拒否できなかったので(特定のパターンでは出来たが、何種類かあると面倒)、 @で終わるパスワードはすべて拒否し(ftpaccess で deny-email .+@$)、 メッセージを改良?した。2.6.0に対するパッチ
 本来は、@で終わると、接続先ホスト名から勝手にそのあとを補完するらしいが、 IE4USER@にはちょっと腹が立ったので、拒否することにした。
 (個人的感想:)IEきらい。重いし。ちょっとしたファイルをダウンロードするにも恐ろしく長い時間がかかる。 表示も遅い。だいたい、パスワードの設定が未だに出来ないのはひどすぎる...[2000.09.05]

cmp のSegmentation fault (3.5-STABLE)
 /usr/bin/cmp で、skip の値を指定すると Segmentation fault が おきることがあります。
 例えば、同じ 1,013,760 bytes のファイル file1, file2 があり、 最初の 2048 bytes 以降は同一であることを期待するとします。
 本当にそうかどうかを
 cmp -l file1 file2 2048 2048
として調べると、確かにそのようなときには
 Segmentation fault(core dumped)
となってしまいます。
 一方、内容が異なるときには、正常に終了するかに見えますが、実際には(少なくとも 最後のほうは)ファイルに含まれないような違いを表示します。
 /usr/src/usr.bin/cmp の regular.c をみてみると、どうも skip 値を指定した際、 ページサイズで割った余り以上の 余りを持つ skip 値を指定すると、想定した ページサイズが実際に必要なページサイズよりも1だけ小さくなってしまいそうで、 それが Segmentation fault を引き起こしているようです。
修正差分はこちら。
 UnixMagazine 1月号に書かれていた -s オプションの際の skip 値による奇妙な挙動の 修正分を含みます。これはバグではないのでしょうか...?
 なお、4.0以降では修正されているそうです。[2000.10.25]

 でも、-Currentでの実装を見てみると...いかにも対症療法って感じですね。
 mmapする大きさは、(skip値を除いた長さ + skip値をページサイズで割った余り) と なってますが、その計算を、必要になるたびにやっており、しかも、従来は わざわざ ROUNDPAGE() というMacro関数を書いて除算や剰余計算を避けていたのに、 その部分は残したままでここでは剰余計算を直接行っています。
どちらかにそろえるというなら、まだ解りやすいのですが、どうもコーディングの ポリシーが見えないです。残念。[2000.11.11]

WebMailを使う
 外出先からメールを読み書きする必要があるとき、以前は telnet して Mule2.3 + Mew で読み書きをしていたこともあったのですが、XEmacs に してから随分と使っていませんでした。
 で、久しぶりに使ってみると...日本語が化け化けで使えない!ということに なりました。そういえば XEmacs ではコンソールモードで日本語が表示できない、 という話も昔聴いたことがあったなあ、と思って以来、それ以上調べていません。 実際のところはどうなのでしょう...?
 ズボラではありますが、Webブラウザが使える環境のほうが多そうなので、 WebMailを使えるようにしようと試みた。 松阪大学・奥村氏 のページに紹介されているうち、 ウェブメーラー というのを使うことにした(比較的軽くて「秀逸」とあったので)。
 webmailer0941.tar.gz を取ってきて展開後、説明どおりに設定を行い、 使ってみたら、まあまあええ感じ。
 でも、接続時にパスワードがそのまま流れるのね...って事に気づき、ちょっと 困ってしまいました。
 そこで、思いきって(?)、apache で mod_ssl を使うことにしました。 目的は単に通信の暗号化だけなので、ベリサインなどのホスト認証は いらない(自分でCAを運用すればいい)ことにして、試行錯誤の結果、 何とか動くところまでこぎつけました。
 apache は ports から apache+mod_ssl を インストールし、途中で CA 関連の質問には適当に答えていると、 何度か失敗したあと(これは質問にいいかげんに答えたかららしい)、 あっさりと動きました。最初は自分でコンパイルして導入しようと何度か試みましたが、 どうもよくわかっていないので、うまく起動できませんでした。 httpd.conf は動作確認後にきちんと書き換えました。
 apache で、ユーザに Options の override を許可すると、cgi まで 使い放題になるのですね...もうちょっと細かく AllowOverride の指定が できればな、と思います。 [2000.12.15]

xshisen-1.36でスコアファイルの表示がおかしい(4.2-STABLE + XFree86 4.0.2)
 xshisen で、個人スコアとハイスコアの表示がおかしくなります。
一旦どちらかを表示すると、次の表示から、まえのWindowの大きさがそのまま使われてしまい、 OKボタンが見えなくなったり、大きなスペースが開いたりします。
私にはなんともしがたいので、誰か直してくれないでしょうか?
Y2Kのパッチを書いた手前、気になってしまいました。[2001.03.05]

 上の件ですが、原因不明なまま、Motif を使うようにしたら収まりました。 make configure のあと、Makefile の LIBS = の行で、-lXaw を -lXm にするだけですが。
XFree86 4.0.2 の仕様でしょうか? 同じ Widget で2種類の Popup Window を使っている あたりがまずいのでしょうか...[2001.03.21]

 さらに... XFree86を 4.0.3 にしたところ、Motifを使わなくても問題なくなりました。
XFree86 4.0.2 の不具合、ってことでしょうね。[2001.04.04]

sendmail.cf の設定(4.2-STABLE / sendmail 8.11.2)
 sendmail.cf の設定を試みたのですが...今までは WIDE-CF を使ってたのですが、 最近はメンテナンスされていないようなので、cf を使うことにしました。
といっても、FreeBSD-users-ML 57924を参考に、 FreeBSD 4.2R の /usr/src/etc/sendmail/freebsd.mc をコピーしてチョコチョコッと追加しただけです。
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy,noetrn,noverb,noreceipts')dnl
FEATURE(always_add_domain)dnl
ってくらいですが(それ以外は内緒)。[2001.03.05]

VMwareでWindows98(4.3-BETA + XFree86 4.0.2_6)
 VMwareを使って、Windows98を動かしました。
目的/理由は、
  1. 日本語PDFファイルの印刷ができない。
  2. MS-Office関係のファイルが見えない。
  3. WMAが再生できない。
  4. Netscapeが不安定...。
といったあたりです。
随分昔に買ってきた Windows98 Update CD-ROM を使い、
  1. Windows98が動いているPCで起動ディスク作成(FD 2枚)
  2. HDDに適当なディレクトリを作り、2枚分の内容をコピー、ebd.cab の中身も展開しておく
  3. そこから不要なファイルを削除、AUTOEXEC.BAT や CONFIG.SYS の内容を調整
  4. 再度FDにコピー(FD 1枚に収めた)
  5. FreeBSDに持っていき、dd でFDのイメージをファイルに吸い出す
  6. 吸い出したイメージファイルをVMwareのFDDに指定してboot
  7. 仮想HDDを fdisk , format し、FDDの内容をコピー、ついでにCD-ROMの中身もコピー
  8. 起動順を変え、仮想HDDからbootし、インストール
といった手順でできました。FDからのbootの時点で、日本語関係のドライバははずしました。 また、CD-ROMの内容をコピーしておかないと、UpgradeのチェックでWin95のCDを入れた後、 元のCDに戻しても先に進まなくなってしまいました。
なお、VMware自体は、portsを使って入れました。
Networkの設定は、VMware側ではデフォルトのまま、Windows(仮想ホスト)側では FreeBSDで指定したNICに割り当てているのとは違うサブネットからアドレスを当てはめました。 C:\Windows\HOSTS ファイルなどを適切に書き換えれば、うまくつながります。
当然、sambaを入れ、WindowsからFreeBSDのディレクトリを扱えるようにしています。
使用感は、思ったよりも快適でした。仮想HDDを2GB、メモリを48MB(VMware用には80MB)を 割り当てていますが、特にストレスなく動いています。
日本国内のアカデミックプライスが高いのが難点。VMware.com から直接買おうとしたら、 代理店を通せ、っていわれてしまいました。
なお、"日本語PDFファイルの印刷ができない"件は、 ghostscriptに 日本語CIDフォントを扱わせるプロジェクトがあるようです。
また、再起動後、samba が動かなくなってしまいました。
locking/shmem_sysv.c:sysv_shm_open(667)
  Can't create or use IPC area. Error was Cannot allocate memory
といったエラーが記録されていましたので、
options  SHMMAXPGS=8192
options  SHMMAX="(SHMMAXPGS*PAGE_SIZE+1)"
をつけてカーネルを再構築すると、無事に起動できました。[2001.03.28]

wu-ftpdが遅い(らしい)(4.2-STABLE)
wu-ftpd を inetd から使っていますが、たまに著しく接続まで(プロンプトが 返ってくるまで)の時間がかかることがあります。
原因は、どうも「接続元のホスト名が引けないため」らしいのです。
ネームサーバを ns 、接続元ホストを 192.168.1.1 とすると、
nslookup 192.168.1.1 ns
等としたときに、名前が引けないとダメです。こちらでは、1分近くかかりました。
なお、これは、/etc/hosts 等にそのホストに関するエントリを書いてもダメです。 逆引きはしてくれないようです。telnet等では大丈夫なのですが...
対策としては、接続元の名前を引かせないように改造する(もしかすると、ホスト名が無いときの ユーザ名を確定するため?)、もしくは独自でネームサーバを立ち上げる、などが考えられます。
こちらでは、192.168.x.x のホストからの接続が遅かったので、それらのホストの 名前を解決するような BIND を用意したところ、すぐにつながるようになりました。[2001.04.18]

上記の BIND の設定:
/usr/local/etc/namedb を作り、これらのファイルを用意します。 その他に、named.root ファイルが必要なので、/etc/namedb からコピーするなどします。
/etc/rc.conf に、
named_program="/usr/sbin/named"
named_flags="-u bind -g bind /usr/local/etc/namedb/named.conf"
とします。
これで、bind:bind の権限でBINDが動きます。あとは、/etc/resolv.conf に
nameserver  127.0.0.1
と追加すれば、OKです。[2001.05.02]

bindとVMware2(4.3-STABLE)
BIND9 をインストールし、/etc/rc.conf で起動するようにした際、 VMware が /usr/local/etc/rc.d/vmware.sh で仮想ネットワークインタフェースなどの 設定を行うと、BINDが一時間毎に
Jan 1 9:00:00 hogehoge /usr/local/sbin/named[xxx]: could not listen on UDP socket: permission denied
Jan 1 9:00:00 hogehoge /usr/local/sbin/named[xxx]: creating IPv4 interface vmnet1 failed; interface ignored
と文句をいってきます。BINDを再起動すれば問題ありません。HUPシグナルだけではダメです。
これは、BINDをrestartするスクリプトを実行することで対処しました。
このscriptを /usr/local/etc/rc.d/zz_restart_bind.sh として 置けば、vmware.sh よりもあとで実行されますので大丈夫です。
named や設定ファイルの場所は決め打ちになってますので、環境に合わせて書き換える必要があります。
なお、最初から /etc/rc.conf ではBINDを起動しないように書いておけばいい、という気もしますが、 名前が引けないと起動に困る(時間がかかる)daemonもあるようですので、こうしました。[2001.08.09]

Network Printer LP-1900(N)
EPSON のモノクロレーザプリンタ LP-1900 が導入され、ネットワークインタフェース(PRIFNW3)も 同時に買って印刷環境が快適になった。従来はWindows98に繋がったCanon LBP-404だったので、 速くなったし、何よりもWindowsの状態に係わりなく印刷できるのがいいです。
FreeBSDからは、(1)lpr/lpd で出力、(2)sambaを使って出力、等がありますが、 lpr/lpd でやってみました。
リモートのプリンタ名はマニュアルには記載がありませんが、"LP-1900" でいいようで、 /etc/printcap は以下の通りです。
epson|Epson LP-1900N:\
	:lp=:rm=printerhost.domain.hoge:rp=LP-1900:\
	:if=/usr/local/bin/lp1900filter:\
	:sd=/var/spool/output/lpd/lpr1:\
	:lf=/var/log/lpd-errs:sh:mx#0:ct=3600:
また、/usr/local/bin/lp1900filter は、
#!/bin/sh
/usr/local/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=lp1900 -r1200 -sPAPERSIZE=a4 -sOutputFile=- -
exit 0
って感じです。なお、ghostscript は ports の ja-vfghostscript-5.50a_1 を使っていますので、 エプソンコーワの LP-1900 用のドライバが含まれています。
また、直接出力できないWindowsマシンからのために、レンダリングはWindows上の プリンタドライバで行って印刷要求を中継するだけのものとして、
epson-raw|Epson LP-1900N raw:\
        :lp=:rm=printerhost.domain.hoge:rp=LP-1900:\
        :sh:sd=/var/spool/output/lpd/lpr1raw:\
        :lf=/var/log/lpd-errs:mx#0:ct=3600:
というのを用意しました。実際には、VMware上からsamba経由で使ってます。
なお、何故か知りませんが、FreeBSDからsambaを使って印刷しようとすると、 プリンタのネットワークインタフェースがハングアップします...[2001.08.09]

comsatへのアクセス
ログに
Jan  1 00:00:00 hostname inetd[xxx]: connection from localhost, service comsat (udp)
のようなログが残るので、調べてみると、FreeBSD-users-jp 36487 からのスレッドに報告があるとおり、biffサービスのためのものでした。
最近では、/etc/inetd.conf で comsat のサービスがデフォルトでコメントアウトされているので、 /etc/rc.conf で log_in_vain="YES" とでもしていない限り気にならないかもしれません。
さて、上の FreeBSD-users-jp での議論の時には、mail.local に -b をつければ大丈夫、 ということでしたが、今では -B に変わっています。-b では効果がありません。
設定は、/etc/mail/sendmail.cf を直接書き換えてもいいのですが、cf では、
define(`LOCAL_MAILER_ARGS', LOCAL_MAILER_ARGS`' -B)dnl
等とすれば大丈夫です。
なお、これ以外に、procmail を使っていても起こるようです。この場合、 $HOME/.procmailrc に
COMSAT=no
と書けば comsat へのアクセスは止まります。[2001.08.17]

cvsupでのdocのrefuse
QandA 管理番号1864のcvsupでの doc-allの更新ですが、refuseファイルの説明で、
doc/de_DE.ISO_8859-1
等と"ISO_8859-1"となっているところは、2001年6月頃に
doc/de_DE.ISO8859-1
と変更されたため、修正して利用しないといけません。
doc/de*
なんてのでも いいようです。
ある日、気がついたらたくさんファイルがあってびっくりしました。[2001.08.17]

QandA 管理番号1864は更新されました。なお、今ではit_ITなんてのも入ってます。[2001.10.20]

pdumpfs + exclusion patchでバックアップ
pdumpfsはバックアップにとっても便利です。
しかし、余りにシンプルなので、特定のディレクトリだけを排除してバックアップできない、という問題があります。
何とかできないかと思っていたところ、pdumpfs exclusion patch.なる ページを見つけました。試しに使ってみたところ、問題なさそうなので、有難く使わせていただいております。
今のところはHOMEのバックアップをおこなっていますが、 なんかは、毎回全部をバックアップする必要がないか、単純に上書きバックアップで十分かなので、rsyncと組み合わせることで、 それぞれをふさわしい方法でバックアップしています。
なお、UNIX MAGAZINE 2003年 2月号では、高林氏自らがexcludeオプションに相当するものを作るつもり、ということだったのですが、 どうなのでしょう?
なお、何らかの理由でファイルの日付がおかしくなると、エラーが表示されてバックアップできません。 それがどのファイルなのかを見つけるスクリプトはこちらへ。[2003.02.28]

SOFTWARE DESIGN 2003年 8月号では、高林氏がexcludeオプション他を実装して配布すると いうお知らせがありましたが、まだできてないようです...CVSリポジトリはちょっとずつ変化しているので、 作成中なのでしょう。[2003.08.23]

sambaのごみ箱の掃除
sambaでWindowsからファイルを扱っているが、削除したファイルがごみ箱に入るよう、
vfs object = /usr/local/lib/samba/recycle.so
vfs options = /usr/local/etc/recycle.conf
を設定している。でも、延々とファイルが貯まっていくので、古いファイルから消すことに。
#!/bin/sh
cd /path/to/samba/shared/.recycle
find . \! -newerat '1 months ago' -print -delete
で、ひと月以上アクセスしていないファイルを消すスクリプトを作り、毎週実行することにした。[2003.08.23]


GO PREV.つるたにの自己紹介へ戻る
GO PREV.つるたにのホームページへ戻る
turutani@scphys.kyoto-u.ac.jp