2004年6月アーカイブ

私の場合、月末に会社のマシンでlastコマンドを実行して、それを見ながら勤務報告書なんつーものを書いている。
のだけれど!5月分を出そうと思ったら出ないじゃないですか!
なんで~?と思いつつ、記憶を掘り起こしてみる・・・。
/usr/X11R6/lib/X11/xdmにある、XstartupXresetでsessregを呼び出すことで、この問題は回避したはずだけど・・・。
と思ったら、/usr/X11R6/lib/X11/xdm/xdm-configの日付が新しいじゃないですか!Xstartup呼ばれてないじゃないですか!
どうも、XFree86を更新したときに上書きされてしまったらしい(泣)。
きっとまた忘れてはまるので、備忘録を書いておくことにする。
xdm-configの該当行を以下のように修正。
DisplayManager._0.startup:	/usr/X11R6/lib/X11/xdm/Xstartup
DisplayManager._0.reset:	/usr/X11R6/lib/X11/xdm/Xreset
Xstartupを以下の内容で作成。実行可能にしておく。
#!/bin/sh
#
# Xstartup
#
# This program is run as root after the user is verified
#
if [ -f /etc/nologin ]; then
xmessage -file /etc/nologin -timeout 30 -center
exit 1
fi
sessreg -a -l $DISPLAY -x /usr/X11R6/lib/X11/xdm/Xservers $LOGNAME
/usr/X11R6/lib/X11/xdm/GiveConsole
exit 0
同じようにXresetも。
#!/bin/sh
#
# Xreset
#
# This program is run as root after the session ends
#
sessreg -d -l $DISPLAY -x /usr/X11R6/lib/X11/xdm/Xservers $LOGNAME
/usr/X11R6/lib/X11/xdm/TakeConsole
exit 0
友達にcoLinuxなんてものを教えてもらったので、早速インストールしてみる。
まずは、sourceforgeからcoLinux-0.6.1.exeとcolinux_minimal_fedora_core_1.zipをダウンロードしてくる。
coLinux-0.6.1.exeを実行して、インストーラに従ってインストール。
コンポーネントの選択は、WinPcapを外し(TAPで良いから)、Root Filesystem image Downloadも外す(fedora core を使うから)。
インストール先は、デフォルト(Program Files)にしちゃったけど、\coLinuxとかの方が良いと思った。

インストールが終わったら、今度はFedora coreのイメージファイルの展開。
zipファイルを展開して、fc1_2GB_root.bz2を展開する。
さらに、blank_*.bz2のうち、好きなサイズのファイルを展開する(swap用)。私は、256Mのにした。展開したら、swap_deviceにリネームしておく。
そして、fc1.colinux.xmlを書き換える。
カーネルとスワップファイルのパスと、メモリーサイズ、networkのnameあたり。
参考までに、私の設定。
<?xml version="1.0" encoding="UTF-8"?>
<colinux>
    <block_device index="0" path="\DosDevices\c:\coLinux\fc1_2GB_root" enabled="true">
    </block_device>
    <block_device index="7" path="\DosDevices\c:\coLinux\swap_device" enabled="true">
    </block_device>
    <bootparams>ro root=/dev/cobd0</bootparams>
    <image path="vmlinux"></image>
    <memory size="128"></memory>
    <network index="0" type="tap" name="TAP">
    </network>
</colinux>
続いて、WindowsでTAPインターフェイスの設定。
coLinuxからWindowsを通してネットワークに繋ぐには、いくつかの方法があるらしいのだが、とりあえず接続の共有を使うことにする。
  1. TAPインターフェイスの名前(私の場合は、「ローカル エリア接続3」になっていた)を「TAP」に変更する。(この名前と、上記設定ファイルのnetwork nameを合わせておく)
  2. 外部と繋がっているネットワークのプロパティを見て、「詳細設定→インターネット接続の共有→ネットワークのほかのユーザーに、このコンピュータのインターネット接続をとおしての接続を許可する」にチェックする。「ホームネットワーク接続」はTAPにしてみたけど、この部分は良く理解していないので後で再チェックすることにする。
  3. TAPのプロパティを見ると、192.168.0.1が割り当てられている。WAN側が192.168.0を使っていなければこのままで問題ないが、うちの家庭内LANは使っているので、192.168.1.1に直す。
これで、準備は完了。coLinuxのインストールディレクトリで、以下のコマンドを打つとcoLinuxが起動する。(xmlファイルがcoLinuxのインストールディレクトリにあるとして)
> colinux-daemon -c fc1.colinux.xml
コンソール画面が立ち上がるので、rootでパスワードなしでログインする。
swapが読めないみたいなエラーが起動時に出ているので、
# mkswap /dev/cobd7
# swapon /dev/cobd7
でswapが有効になる。
/etc/sysconfig/network-scripts/ifcfg-eth0 を編集する。
私の場合は以下のような感じ。
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.40
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
そうそう、キーボードはus配列なので気をつけること。
# ifdown eth0
# ifup eth0
でネットワークが有効になるはず。
後は、/etc/resolv.confを適切に修正。ネットワーク共有は、dnsをプロクシーしてくれるらしいので、192.168.1.1を書いておけば良い。
適当にネットワークが通ることを確認したら、windowsからcoLinuxのインストールディレクトリのvmlinux-modules.tar.gz をlinuxに転送する。
scpを使うためには、新しいユーザを作るか、rootにパスワードを設定しておく。
Windowsからは、192.168.1.40でアクセスできる。(上の設定の場合)
で、tarで展開しようと思ったらtarが入っていない!
# apt-get update
# apt-get install tar gzip
で、tarがインストールできる。(結構ネットワークが途中で切られるのは、ayo.freshrpms.netが混んでいるせいだろうか?)
無事にインストールできたら、vmlinux-modules.tar.gzを/で展開する。
必要ないかも知れないけどここで再起動してみる。
今度は、何のエラーもなく起動するはず。
ここで、fedora coreのReadmeに従って
# apt-get dist-upgrade
する。(一度、vmlinux-modulesを入れる前にdist-upgradeしたら、その後apt-getがSegmentation faultを起こすようになってしまったのでやり直した)
ここまででとりあえず最初の設定はおしまい。
一度coLinuxを終了させたら、サービスに登録する。
Windows上で、
> colinux-daemon -c fc1.colinux.xml --install-service CoLinux
でサービスの登録。
こうしておくと、
> net start CoLinux
でサービスが起動し、
> net stop CoLinux
でサービスが終了する。
サービスが起動している間は、colinux-console-nt.exeを使ったり、ttsshでログインしたりして使える。
長くなったので、続きます・・・。
とりあえず、Fedoraのキーマップの変え方がわからないので、ttsshからログインして使う。
まずは、apt-getでscreenをインストール。これがないと端末は使いづらい。
続いて、vncを使うためにvnc-serverをインストール。これで、X関係がいろいろとインストールされるっぽい。
さらに、XFree86(依存関係で、Glide3 XFree86-base-fonts XFree86-font-utils XFree86-xfs chkfontpath cpp desktop-file-utils kernel#2.4.22-1.2115.nptl libpng losetup lvm mkinitrd switchdesk ttmkfdir xinitrcが入る) をインストール。
vncserverを起動すると、初回だけパスワードを聞かれる。
後は、Windowsからvncviewerで見てやればおっけ~。
vncserverの起動ログは、~/.vnc/colinux:1.log にあるので、まともに起動しない場合はこのファイルをチェックする。
Xを動かすために、いろいろインストールした。
いろいろインストールしたので、細かいことは忘れてしまったけど、一応gnomeのデスクトップが使えるくらい。
日本語関係は、LANGを ja_JP.ujisで使うことにする。(最初、ja_JP.utf8にしたんだけど、XLibがlocaleに対応していない、なんてエラーが出るので、ja_JP.ujisで使うことにした)
jlessがapt-cache searchでサーチしても見つからないので、代わりにlvって言うのを入れてみる。
後は、FreeWnnとkinput2をインストールしてみたが、動作確認は取れず・・・。
emacs21.3を入れてみるが、素のemacsにはeggが入っていない模様。
調べてみたところ、emcwsのパッチをあててemacsを作るか、tamago4を入れると良いらしい。
しかし、tamago4を入れても、サーバに接続できません的エラー。
xemacs-sumoを入れたら、こちらでは日本語の変換ができた。
どうも、xemacsはunixドメインソケットを使ってjserverと通信するけど、emacs+tamago4はtcp/ipを使う模様。試しに、他のマシンのjserverと通信してみたら、emacsでも日本語の入力ができた。
netstat -aで見てみたら、jserverのportがlistenしていない。どこの設定を変えたら良いのかしらん?
とりあえず、xemacsで行くことにする。
Xを動かすには、vnc を使う(Linux側でXserverが動く)か、AstecX(Windows側でXserverが動く)のどちらか。
vncを使って、gnomeのデスクトップを使う場合、screensaverは殺しておかないと、CPUを食いつぶされてしまう。
メインメモリ512Mのマシンで、Linuxのメモリの設定を128Mにしていると、結構きつい感じ・・・。
apt-getでsamba-clientを入れたら、smbmountが使えるようになった。
しかし、iocharset=euc-jpとか書いても、
kernel: smbfs: failed to load nls 'euc-jp'
とか言うエラーが出てしまう。
原因は良くわかっていないけど、カーネルを再構築すれば良いのでは!と勝手に思い込む。
まずは、coLinuxのソースを持ってくる。coLinux-0.6.1.tar.gz
linuxに転送して展開し、doc/buildingを読む。
それによると、カーネルのソースが必要らしい。(buildingには、2.4.24って書いてあるけど、2.4.26だよね)
ftp.kernel.orgから、linux-2.4.26.tar.gzを持ってくる。
# tar xzf ../linux-2.4.26.tar.gz
# mv linux-2.4.26 linux
# cd linux
# patch -p1 < ../colinux-20040529/patch/linux
# cp ../colinux-20040529/conf/linux-config .config
そして、.configを書き換える。書き換え部分の抜粋。(ってゆーか、Linuxのカーネルコンフィグなんて初めて見るので、これであってるか甚だ疑問)
CONFIG_NLS_DEFAULT="euc-jp"
CONFIG_NLS_CODEPAGE_932=y
CONFIG_NLS_UTF8=y
※ 私の勘が正しければ、=yって書くとカーネルに入って、=mって書くとカーネルモジュールになるんじゃないかと思うのだが・・・。(ちゃんとドキュメント読めって話ですな・・)
(さらに、iso8859_1くらいは追加しておけば良かったと後悔したり・・・)
# make oldconfig
# make dep
# make vmlinux
# make modules
# make modules_install
最後の2行は、buildingには書いてない。なぜかしらね~。
で、出来上がったvmlinuxは、Windowsにコピーして、coLinuxのインストールディレクトリに置く。(前のファイルはバックアップを取る。もしくは、xmlファイルで新ファイルを指定する。)
とりあえず、新しいカーネルで起動に成功。smbmountで、iocharset=euc-jp,codepage=cp932を指定してやると、無事にlsで日本語のファイル名が表示されました!
smbfsでマウントしたWindowsの共有ディレクトリですが、既存のファイルは編集できるのに新しいファイルが作成できません・・・。
なんでかな~?と思って試行錯誤していたら、rootだと書けて一般ユーザだと書けない・・・。
で、ls してみたらマウントポイントのpermissionがrootのみ書込可になっているではありませんか!
そこで、smbmountのオプションに、uid=hogehogeと書いたら、マウントポイントのオーナーがhogehogeになって、無事に書き込めるようになりました。 後は、/etc/fstabに、
//ホスト名/共有名 /win smbfs iocharset=euc-jp,codepage=cp932,credentials=/etc/smbpass,unicode,uid=UNIXのユーザ名,gid=wheel 0 0
と書いて、/etc/smbpass(新ファイル)に
username=Windowsのユーザ名
password=Windowsのパスワード
と書けば、
# mount /win
でマウントできます。(次からは起動時にマウントされます)
coLinuxのsmbfsのために、WindowsXPでフォルダを共有してみて気がついたのだけれど、Windows2000のようにファイルのプロパティにセキュリティとアクセス権のタブが存在しない。
実際に試してみたら、ネットワークのほかのユーザが共有ディレクトリにアクセスできてしまう。これは困るんじゃないの?
と、言うわけで調べてみたら、Explorerのフォルダオプションの[表示]で、「簡易ファイルの共有を使用する(推奨)」のチェックを外すことで、セキュリティの設定ができるようになるらしい。
これで、共有のアクセス許可から、Everyoneを削除して、アクセスを許したいユーザを指定することで、幸せになれたっぽい。
ってゆーか、デフォルトの設定を以前のもの(Win2k)からセキュリティの甘い方向に変更するってどうなのよ!?

ちなみに、Windows XP のファイル共有およびアクセス許可についてを見ると、わかりにくい言葉で説明してある。
QTの最新版をインストールしようとしたら、ついにディスクが足りなくなった。
既存のディスクイメージのサイズを変える方法はわからなかったので、新しく1GBのパーティションを追加することにする。
xmlファイルにcobd1の記述を追加して、fstabにエントリーを追加。
マウントしてみる・・・と、スーパーブロックがおかしいよ、みたいなことを言われる。
ほむほむ、じゃあ、newfsっと・・・エラー。
うう、Linuxではnewfsじゃないのか。man -k ext3・・・そんなもんは知りまへんで~といわれる。
む~、と悩んだ挙句、swapでも似たようなことがあったのを思い出す。
そういえば、swapのときは、mkswapだったので・・・、じゃあっと調べると、mkfs.ext3と言うコマンドがあることを発見。
# mkfs.ext3 /dev/cobd1
で、無事にファイルシステムができた模様。
このサイトは、wizard-limit.netと言う独自ドメインで運用している。
ICANNのルールでは、ドメインを取得して運用するためには、whoisデータベースに連絡先を登録しなければならない。
今までは、住所や電話番号を登録していたのだけれど、時代の流れとして個人情報を気軽に公開するのは危険なのではないかと思い始めた。
しかし、にせ情報によるドメイン登録を違法になんて言う話もあるので、住所などを隠すのは問題があるらしい。
大手のプロバイダなどの独自ドメイン取得サービスには、匿名での登録ができるものが多い(その場合、コンタクト情報にはプロバイダのものが入る)ので、私が利用しているどめいん屋でも可能かどうか問い合わせてみた。
結果、匿名登録オプション(無料)と言うのがあるらしいので、それを申し込むことにする。
今までは、どめいん屋さんが窓口で、domainpeopleと言うレジストラを使っていたのだが、匿名登録するためにはeNomに移管する必要があるらしい。
どめいん屋さんに申請して、新たにドメインの1年分の料金(3150円)を支払う。(移管手数料2100円は、今回のケースでは無料。期間も今のものから1年延長されるので、実質的にかかったお金は0円。)
1週間ほどで手続きが終了して、ドメインのコンタクト情報が全てどめいん屋さんになる。
聞いてみたところ、所有者名とメールアドレスは自分のものにしても問題ないらしいので、自分の名前とメールアドレスを登録してみた。
これで、住所や電話番号などは、自分のものを公開しなくて済むようになったのだった。

参考までに、domainpeopleとeNomの料金を調べてみたら、domainpeopleが年$35で、eNomが$29.95。
今現在の$相場が$1=110円くらいなので、約3850円と3295円。
・・・どめいん屋さんはどうやって儲けてるんだろう??
Windowsを使う時には、個人でもウィルス対策はかかせない。
と、言うわけで、私の場合はNorton AntiVirusを使っている。
うちの場合は、4ライセンス(ノートのバンドルが2本、デスクトップ用に1本、インターネットセキュリティが1本)管理しているわけだけれど、それぞれ別々に年に1回ウィルス定義ファイルの更新サービスを更新(?)しなければならない。
1年に3600×4(×1.05)=15120円も貢いでいるのだ!
5ライセンス分のセット商品もあるようなので、検討した方が良いだろうか?

と、言う話がしたいわけではなくて、今回はその更新を行うシマンテックストアの話。
ノートの更新ライセンスが期限切れになったので、いつものようにシマンテックストアで購入・・・って、あれ?
なんか、郵便番号の入力をしようとしたらIMEがonになってるんですけど・・・。
IMEがoffにできないんですけど・・・。
・・・。
どうやって入力しろっちゅーんじゃ~!とぶち切れかけましたが、F8を押したりしてなんとか全て入力し、購入しました。
しかし、IMEのモードを勝手に変えるだけでも迷惑なのに、固定にするとはなんと言う趣味の悪さ!郵便番号とか、クレジットカード番号とか、半角で入れろって書いてあるのによ!?

と、ここまで書いてから冷静にもう一度やってみたら・・・。
すいません、別にIMEはonになりませんでした(汗)。どうも、私のIEがおかしかっただけのようです・・・。本当にすいません、シマンテックさんごめんなさい。

まあ、それはそれとして(ぉぃ)、気を取り直して5ユーザライセンスを調べてみる。
どうも、サイトを見ていてもライセンス周りの記述はあまり見当たらない。
私が知りたいのは、5ライセンスとかで買うと現在よりもお得になるのか?更新は一度に済むのか?ってことなんだけど・・・。
公式サイトの価格だと、5ユーザライセンスが22,344円。1ユーザライセンスが5,712円。うちで欲しいのは4ライセンスだから、5ユーザライセンスを買うと504円お得・・・。(5本ならば6216円お得)
ヨドバシとかで買うとまた違うと思いますが、微妙な差額です。
さらに調べてみると、5ユーザライセンスで買っても、更新はそれぞれ別にやらないといけないらしい。
さらにさらに、更新料はバンドル品とパッケージ品で違うことが発覚!
バンドル品だと3600円+税だけど、パッケージ品だと2600+税なのだ!
現在のバンドル品の期限が90日と言うことを合わせて考えると・・・、約5年半くらいでパッケージ版の方がお得に!
しかし、どちらにしてもシマンテックのバージョンアップポリシーによると、最新バージョンが出てから30ヶ月でサポート打ち切りらしいので、5年半も持つ製品はないと言う感じ・・・。
結局はこのまま、ばらばらにバージョンアップして、ばらばらに更新して行くしかなさそうなのであった。
以前ここで書いたけれど、jpeg-6b をそのまま使うと FF11 のスクリーンショットのjpegファイルが扱えない問題がある。
今回、FreeBSDのportsコレクションのjpegが、jpeg-6b_2からjpeg-6b_3に上がっていた。
このままだと、portupgradeしてしまうとまたjpegが元に戻ってしまうので、自前のpatchを作成することにした。
patchを置く場所は、/usr/ports/graphics/jpeg/files/
ここに、patch-jdmarker.cと言う名前で以下のファイルを置く。
--- jdmarker.c.orig     Tue Jun 22 14:28:11 2004
+++ jdmarker.c  Tue Jun 22 14:28:34 2004
@@ -906,7 +906,7 @@
   }

   if (cinfo->marker->discarded_bytes != 0) {
-    WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);
+    /*WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);*
/
     cinfo->marker->discarded_bytes = 0;
   }
これで、普通にportupgradeしても問題なし。cvsupでも、このファイルは消されないようだ。
国際化 Mailman に関する日本語情報によると、mailmanの2.1.5が出ているらしい。
さらに、2.1.4はパスワードに関するバグがあるので、2.1.5に上げろと書いてあった。
早速、2.1.5に上げてみることにする。今回の変更で、ファイルのフォーマットが変わっているらしいので、少し慎重にやる。
  1. smtpデーモンを止める(うちの場合はpostfix。でも、普段mailmanのメール来ないから止めないでいいや)
  2. httpdを止める。又はサービス停止中のページにリダイレクトする。(これもやらなくていいや)
  3. mailmanのサービスを止める
  4. mailmanのバックアップを取る。(うちの場合は、/usr/local/mailmanと、/var/mailman)
  5. mailman2.1.5と、日本語パッチを持ってくる。
  6. mailmanのソースを展開して、パッチをあてる。
  7. configure & make & make install
    % ./configure --prefix=/usr/local/mailman --with-python=/usr/local/bin/python \
      --with-username=mailman --with-groupname=mailman \
      --with-mail-gid=mailman --with-cgi-gid=www \
      --with-var-prefix=/var/mailman
    % make
    % su
    # make install
    
    この過程で、bin/upgradeが実行されて、ファイルが変換される?
  8. emailパッチも持ってきてあてる。(upgradeの場合は必要ないと書いてあったが、うちの場合は必要だったみたい。ひょっとして前はあててなかった?)
  9. mailmanを起動する。
  10. httpdを起動する。
  11. smtpdを起動する。
一応、テストメールは届いたみたい。

※ 実は、mailmanのバージョンアップはportsのバージョンアップで知ったのですが、ソースから入れているために上記手順のインストールの前にportsから削除を行いました。そのせいで、/usr/local/etc/rc.dから起動スクリプトがなくなったり、/var/mailmanの下のディレクトリやファイルのpermissionがおかしくなったりして少し苦労しました。後は、crontabの登録も消えたんだかもともと入ってなかったんだか・・・)
spamが来る。
それはもうたくさん来る。
spamassassinではじいているので、読まなければいけないと言うことはないのだが、気分が悪い。
で、世の中にはアドレス収集ロボットとか言うものがあるらしい。
いろいろなリソースからメールアドレスを収集するものだと思うのだが、幸いうちには来ていないらしい
なんで来ていないと判断できるかと言うと、うちのwebページにはいくつかのメールアドレスが載っているのだが、そこにはメールが来ないから。
ちなみに、会社のメールアドレスには嫌ってほどspamが来る。昔、net newsとかに投稿したのがまずいのかしらん?

前置きが長くなったが、アドレス収集ロボットを捕獲するなんて言うページを見つけたので、必要ないのにphpの勉強もかねてうちにも設置してみた。
ログをどのように取るか悩んだのだが、後からの利用しやすさを考えて、DBに入れることにした。
PostgreSQLに新しいユーザとDBを追加して、以下のテーブルを作る。
create table log (
  id int,
  time timestamp,
  remote_addr text,
  user_agent text,
  via text,
  forward text
);
create sequence log_id;
続いて、餌用のページを作る。
<html>
<head>
<meta http-equiv="Context-Type" content="text/html" charset="shift_jis">
<meta name="robots" content="noindex,nofollow">
<title>trap</title>
</head>
<body>
このページは、アドレス収集ロボットに対する罠です。<br>
以下のアドレスにメールすると、spamを送付するサイトとして記録します。<br>
<br>
This page is trap for collect address robots. Do not send any emails to following address.<br>
<br>

<?php
  $addr = getenv("REMOTE_ADDR");
  $useragent = getenv("HTTP_USER_AGENT");
  $via = getenv("HTTP_VIA");
  $forward = getenv("HTTP_X_FORWARDED_FOR");
  $conn = pg_connect("dbname=trap user=trap");
  if ($conn) {
    $rec = pg_query($conn, "select nextval('log_id');");
    if ($rec) {
      $row = pg_fetch_array($rec, 0);
      $id = $row[0];
      $query = sprintf("insert into log (id, time, remote_addr, user_agent, via, forward) values (%d, 'now', '%s', '%s', '%s', '%s');", $id, pg_escape_string($addr), pg_escape_string($useragent), pg_escape_string($via), pg_escape_string($forward));
      pg_query($conn, $query);
    }
    pg_close($conn);
  }
  echo "<a href=\"mailto:trap+$id@wizard-limit.net\">trap+$id@wizard-limit.net</a>";
?>
</body>
</html>
肝は、
  • metaタグを使って通常の検索ロボットには収集されないようにすること。
  • アクセスをDBに記録する。
  • DBに記録した情報とリンクするメールアドレスを生成し、餌としてまく。
このスクリプトで、trap+?@wizard-limit.netと言うメールアドレスが生成されるので、trapと言うユーザを作り、メールを受け取れるようにする。
※ trap と言うユーザが、trap+?の形式のメールを受け取れるようにするのは、postfixの設定。
あとは、トップページからリンクを張って出来上がり。
リンクを張るときには、通常のサイト訪問者がたどらないように、aタグと/aタグの間には何も入れないこと。
これで、このページを踏んでメールを送ってくれば、ログと比較することでどのIPから収集されたかがわかる。
ちなみに、ログを参照するためのページは以下のような感じ。
<html>
<head>
<meta http-equiv="Context-Type" content="text/html" charset="shift_jis">
<meta name="robots" content="noindex,nofollow">
<title>trap</title>
</head>
<body>

<?php
  $conn = pg_connect("dbname=trap user=trap");
?>
IP一覧
<table border cellspacing="0">
<tr><th>address</th><th>#</th></tr>
<?php
  $rec = pg_query($conn, "select count(id) as c, remote_addr from log group by r
emote_addr order by c desc;");
  $rows = pg_num_rows($rec);
  for ($i = 0; $i < $rows; $i++) {
    echo "<tr>\n";
    $row = pg_fetch_array($rec, $i);
    echo "<td>$row[1]</td>\n";
    echo "<td>$row[0]</td>\n";
    echo "</tr>\n";
  }
?>
</table>
User agent一覧
<table border cellspacing="0">
<tr><th>User agent</th><th>#</th></tr>
<?php
  $rec = pg_query($conn, "select count(id) as c, user_agent from log group by us
er_agent order by c desc;");
  $rows = pg_num_rows($rec);
  for ($i = 0; $i < $rows; $i++) {
    echo "<tr>\n";
    $row = pg_fetch_array($rec, $i);
    echo "<td>$row[1]</td>\n";
    echo "<td>$row[0]</td>\n";
    echo "</tr>\n";
  }
?>
</table>
ログ一覧
<table border cellspacing="0">
<tr><th>id</th><th>time</th><th>address</th><th>user agent</th><th>via</th><th>f
orward</th></tr>
<?php
  $rec = pg_query($conn, "select * from log order by id desc;");
  $rows = pg_num_rows($rec);
  for ($i = 0; $i < $rows; $i++) {
    echo "<tr>\n";
    $row = pg_fetch_array($rec, $i);
    echo "<td>$row[0]</td>\n";
    echo "<td>$row[1]</td>\n";
    echo "<td>$row[2]</td>\n";
    echo "<td>$row[3]</td>\n";
    echo "<td>$row[4]</td>\n";
    echo "<td>$row[5]</td>\n";
    echo "</tr>\n";
  }
?>
</table>
<?php
  pg_close($conn);
?>
</body>
</html>

このままだと、連続でアクセスされた場合にDBが膨れ上がってしまう。
テーブルに参照回数などのフィールドを追加し、同じサイトからのアクセスの場合はレコードが増えないようにした方が良いかもしれない。
まあ、今のところはまったくアクセスがないようなので、この状態でしばらく様子を見てみることにしよう。
mailmanを2.1.5に上げたら、errorログに以下のようなエラーが出るようになり、特定のメールが配送されなくなってしまった。
Jun 25 02:07:22 2004 (99547) Uncaught runner exception: global name 'HeaderParse
Error' is not defined
Jun 25 02:07:22 2004 (99547) Traceback (most recent call last):
  File "/usr/local/mailman/Mailman/Queue/Runner.py", line 111, in _oneloop
    self._onefile(msg, msgdata)
  File "/usr/local/mailman/Mailman/Queue/Runner.py", line 167, in _onefile
    keepqueued = self._dispose(mlist, msg, msgdata)
  File "/usr/local/mailman/Mailman/Queue/IncomingRunner.py", line 130, in _dispo
se
    more = self._dopipeline(mlist, msg, msgdata, pipeline)
  File "/usr/local/mailman/Mailman/Queue/IncomingRunner.py", line 153, in _dopip
eline
    sys.modules[modname].process(mlist, msg, msgdata)
  File "/usr/local/mailman/Mailman/Handlers/CookHeaders.py", line 74, in process
    prefix_subject(mlist, msg, msgdata)
  File "/usr/local/mailman/Mailman/Handlers/CookHeaders.py", line 241, in prefix
_subject
    subject, cset = ch_oneline(subject)
  File "/usr/local/mailman/Mailman/Handlers/CookHeaders.py", line 321, in ch_one
line
    except (LookupError, UnicodeError, HeaderParseError):
NameError: global name 'HeaderParseError' is not defined
pythonはほとんど触ったことがないので、import周りの仕様がわからないのだけれど、CookHeaders.pyでHeaderParseErrorが見えないのが問題なように見える。
ソースをおっかけた感じだと、日本語化パッチに問題があるように見えたので、とりあえずCookHeaders.pyに以下の1行を追加して様子を見てみることにする。
from email.Errors import HeaderParseError
ずいぶん前にbind9に上げたのだけれど、rndcを使っていなかった。
今回、ps2が増えたので、dhcpd.confやdnsの設定を更新したので、いつものようにnamedにHUPシグナルを送った。
すると、/var/log/messagesに以下のようなエラーが出ている。
Jun 30 11:17:05 false named[29732]: none:0: open: /usr/local/etc/rndc.key: file not found
Jun 30 11:17:05 false named[29732]: couldn't add command channel 127.0.0.1#953: file not found
で、いろいろ調べた結果、rndc-confgenとか言うコマンドを使うと、rndc.keyが作成されることがわかった。
# rndc-confgen -a
が、このコマンドがいつまでたっても帰ってこない。
FreeBSD Bari Bari Install Pageを見ると、FreeBSD4系では、/dev/randomのエントロピーが足りなくてこうなるんだそーな。
そこで、書いてあったとおりに
# rndcontrol -s 0 -s 1 -s 2 -s 3 -s 4
rndcontrol: setting irq 0
rndcontrol: setting irq 1
rndcontrol: setting irq 2
rndcontrol: setting irq 3
rndcontrol: setting irq 4
rndcontrol: interrupts in use: 0 1 2 3 4
# rndc-confgen -a
で/usr/local/etc/rndc.keyができた。
この場所がデフォルトだったらしく、named.confやrndc.confは書き換えなくても、rndcが使えるようになった。(rndc.confは作ってもいない)
次からは、
# rndc reload
でファイルの読み込みができるはず~。
しかし、dracd_flagsじゃないあたりも私と趣味が・・・
なんてことを以前書きましたが、最新のdracdのportsではdrac_flagsからdracd_flagsに変更されたようです。
どのバージョンからはわかりませんが、drac-1.12_1のportsでは、dracd_flagsに変わっていました。
# おかげで、また/usr/local/etc/にdracd.dbができてしまったわけですが・・・。
2004年6月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

このアーカイブについて

このページには、2004年6月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2004年5月です。

次のアーカイブは2004年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1