2003-07-20 1070歩

λ 国内公開 ntp サイト一覧

フツーntp?.jst.mfeed.ad.jpだとは思うが一応メモ。 プロバイダにOCNを利用している回線ではOCNのNTPサーバを指定している。 パワードコムもNTPサーバ公開してねえのかなあ。

外向けに3回線ある某社では、回線にntp?を一つ割り当てて内側でpeerを組むという推奨構成で自己満足状態:-)

λ [FreeBSD] ports mail/qmail

ports化してなかったほぼ最後の砦 qmail をports利用に切り替えてみる。 /usr/local/etc/pkgtools.conf ではオプション大盛りで。

MAKE_ARGS = {
      'mail/qmail'            => '-DWITH_QMAILQUEUE_PATCH -DWITH_QMAILQUEUE_PATCH -DWITH_BIG_TODO_PATCH -DWITH_OUTGOINGIP_PATCH -DFORCE_PACKAGE' ,
}

outgoingip.patch が普通に取れなかったのでgoogleで調べて入手。checksumも違っていたため、ついでに qmail-pop3dをAPOP対応するためのパッチも追加して、 このファイルを /usr/ports/distfiles/outgoingip.patch として置いておく。

/etc/group には qnofiles を nofiles グループと同じgidであらかじめ作成する。 portupgradeすると設定ファイル上書きされてしまうので、/var/qmail/controlの下をバックアップする。重要。

ここまでやってsudo /usr/local/sbin/portinstall -fwWp mail/qmailでインストール。 /var/qmail/control の下をバックアップから書き戻して終了。

(7月31日追記)ローカルの所有者設定は以下のコマンドを利用して整備した。

sudo find /var/qmail -group 111 -exec chgrp qmail {} \;
sudo find /var/qmail -group 110 -exec chgrp qnofiles {} \;
sudo find /var/qmail -user 110 -exec chown alias {} \;
sudo find /var/qmail -user 114 -exec chown qmailq {} \;
sudo find /var/qmail -user 116 -exec chown qmails {} \;
sudo find /var/local -group 111 -exec chgrp qmail {} \;
sudo find /var/local -group 110 -exec chgrp qnofiles {} \;
sudo svc -d /var/service/*/log
sudo find /var/local -user 110 -exec chown alias {} \;
sudo find /var/local -user 111 -exec chown qmaild {} \;
sudo find /var/local -user 112 -exec chown qmaill {} \;
sudo find /var/local -user 113 -exec chown qmailp {} \;
sudo find /var/local -user 114 -exec chown qmailq {} \;
sudo find /var/local -user 116 -exec chown qmails {} \;
sudo svc -u /var/service/*/log
sudo chown qmaild pop5smtp.db
sudo chown qmaild /local/sbin/pop5smtp
sudo chgrp qnofiles /local/sbin/pop5smtp
== outgoingip.patch について

/var/qmail/control/outgoing にIPアドレスを書いておくと、qmail-remoteで外に配信する際そのIPアドレスをsrcアドレスとしてアクセスする。

IPアドレス制限をしている受信設定をしているサイトを運用している場合に有効。特に iモードメールの「特定接続サービス」 とか。

qmail-pop3dをAPOP対応

イマドキだと courier-imapd とか cyrus-imapd を使うのがいいんだろうけどねー。 cyrus-sasl2が入っているマシンが増加傾向なので今度作業するなら cyrus-imapd かしら。

λ [Subversion] リポジトリ復旧

svnlookか何かをしてたらリポジトリを壊してしまった。リポジトリの所有者が svn の場合の復旧手順は以下の通り。

svc -d /var/service/svnserve
chown svn /home/svn/repos/
chgrp svn /home/svn/repos/
chmod -R g+w /home/svn/repos/
sudo -u svn svnadmin recover /home/svn/repos/
svc -u /var/service/svnserve

λ IDNA Prefix

国際化ドメインのプレフィックスは xn-- になっていた。

λ apache2 でhttpsとhttpで別々の認証

https経由だったら証明書認証、httpだったらBasic認証 というのは VirtualHost で振り分け。

<VirtualHost _default_:80>
  <Location "/hoge">
    AuthUserFile     /somewhere/passwd
    AuthGroupFile    /dev/null
    AuthName         hoge_auth
    AuthType         Basic
    <Limit GET POST OPTIONS PROPFIND>
        require valid-user
        Order deny,allow
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS PROPFIND>
        Order deny,allow
        Deny from all
    </LimitExcept>
  </Location>
</VirtualHost>

<VirtualHost _default_:443>
  <Location "/hoge">
    SSLRequire %{SSL_CLIENT_I_DN_CN} eq "Hoge CA"
  </Location>
</VirtualHost>

FakeBasicAuthを使ってうまいこと統合できないかどうか挑戦してたけど、うまくいかず断念してしまった。 これは今まではhttp側がapache1.3.xだったのが、apache1.3.x廃止のための作業。 とりあえずちょっと止まっても大丈夫なサイトから。

作業していてSSIの設定を .htaccess に書いてるところとかあると面倒だなーと思った。 .htaccessで .html ファイルをSSIにする設定にしているファイルをとっつかまえて、以下のような感じで書き換え。

<IfModule !prefork.c>
AddHandler server-parsed .html
AddHandler server-parsed .htm
</IfModule>
<IfModule prefork.c>
AddOutputFilter INCLUDES .html
AddOutputFilter INCLUDES .htm
</IfModule>

やっぱ業務で提供しているサイトをapache2系列にするのは難しいすな。 mod_perlとか使いまくってたらとても移行できん。

IPv6&SSLサイトを apache2 にしておいて並列運用、 コンテンツ作成者がIPv6経由のアクセスにするようなプロキシ立ててまったりと検証してもらうという流れがいいかしらん。 「外からだと見えるのに社内からだとエラーになるんだけど」という状況にして文句言ってもらう訳だ。

λ SWIG 型とタイプマップ

練習がてら ぷにコード のRubyモジュールの作成をしていたら、 結局のところSWIGを利用した実装をしようと思うと、タイプマップとの戦いに大半を割かれることになってしまった。

解説文は 「タイプマップが内部の低レベルコードジェネレータへのアクセスを可能にする上級のカスタマイズ機能であることを強調しておく」 などと、いかにも一般人はタイプマップを使わなくてもいいかのようなイントロダクションで始まっているが、 文字列を使った瞬間にアウトっつーか。 C言語自体に文字列への安全なアクセス手段の定義がないんだから当たり前だし、 プログラムを生成するプログラムなんてものは不思議な呪文に満ちているものだ。

手元にウサギ本がなかったので、 拡張モジュールの作り方 (BlackCity.LABORATORY.Ruby.EXT) を結構参考にした。

[]