ある時点の ports tree

 データセンター他においてある FreeBSD マシンのいくつかで、net-snmp の snmpd が異常にメモリを消費し、最後には core dump して落ちるという症状に遭遇しています。メモリリークしているようなのですが、

  • OS が 4.x か 5.x かには依存していない
  • net-snmp のバージョンが 5.1 か 5.2 かの違い? (最新の ports で入れた net-snmp 5.2_1 は落ちる、みたい...)

ということしか分かりません。なので、4.x と 5.x のマシンで一台ずつパッケージを 5.1 に downgrade して一日様子を見てみたところ、メモリの消費量は正常でした。よって FreeBSD マシンでメモリ消費量が異常なマシンは全て 5.1 に downgrade するハメに...

ところが 5.3-RELEASE-p2 のマシンで問題が。

  • 持ってきたパッケージが perl 5.8 に依存している
  • だがそのマシンでは perl 5.6 が入っていて、このバージョンではダメ

で、仕方なく perl 5.8 に入れ替えてみたのですが、今度は

のです orz。これはマズイ。うちでは outbound SMTP を全てウイルスチェックするために ipfw を使って qmail-scanner を噛ませた SMTP サーバに fwd しており、このままではメールが送れないというクレームが出てしまいます。

 うーん、と無い脳みそを絞った結果、「perl5.6 のまま、net-snmp 5.1 を ports から入れるしかない」と思い至りました。でも、いつも cvsup 掛けるときには最新の ports を持ってきていたため、supfile の書き方が分かりません。それに net-snmp のためだけに ports tree 全体を古いものにするのはかなり無駄な気がします。

 ということで「net-snmp の バージョン 5.1 系の ports skelton を入手するには?」ということで FreshPorts -- The Place For Ports からその 5.3-RELEASE の頃のファイルを一つずつダウンロードしようかと思ったのですが、files/ 以下の大量のパッチファイルを前に断念...

 最終的に、以下のような supfile を書けば良いことに気づきました :-)。

 #
 # $Id: ports-supfile,v 1.1 2003/11/11 01:13:21 ueda Exp $
 #
 *default host=forest.netforest.co.jp
 *default base=/usr
 *default prefix=/usr
 *default release=cvs tag=.
 *default release=cvs tag=RELEASE_5_3_0
 # *default delete use-rel-suffix 

 # ports-all
 ports-net-mgmt

これで、FreeBSD 5.3.0-RELEASE 時点の ports tree から、ports/net-mgmt だけ持ってくることが出来ました。net-mgmt 以下の ports は数が少ないこともあり、短時間で取得でき、無事に net-snmp 5.1_2 をインストールすることができました。その後、設定ファイルを元に戻し、ports tree を最新の状態に戻したことは言うまでもありません。