dhcp-3.0.3 on FreeBSD

ISC-DHCPのインストール。ISCものはセキュリティ的に 全幅の信頼なぞ置けやしないのでchrootインストール。

Makefile.confのパス定義をこんな感じに。

USERBINDIR = /var/dhcp-3.0.3/bin
BINDIR = /var/dhcp-3.0.3/sbin
CLIENTBINDIR=/var/dhcp-3.0.3/sbin
ADMMANDIR = /var/dhcp-3.0.3/share/man/cat8
FFMANDIR = /var/dhcp-3.0.3/share/man/cat5
LIBMANDIR = /var/dhcp-3.0.3/share/man/cat3
USRMANDIR = /var/dhcp-3.0.3/share/man/cat1

んで、

./configure
make
sudo make install

インストール先は /var/dhcp-3.0.3 だが、 バージョン名なしで行けるようにsymlinkを張っておく。

ln -s dhcp-3.0.3 /var/dhcp

dhcpdを /var/dhcp-3.0.3 に chroot して動かすために、 少し環境設定。まず、そのディレクトリにchrootしたあとからも、 /var/dhcp-3.0.3が存在するようにsymlinkを張り、 ついでに var/run var/db も作る。

cd /var/dhcp-3.0.3
mkdir -p var/{run,db}
ln -s .. var/dhcp-3.0.3

dev/ に最低限のデバイスファイルを生成するシェルスクリプト devfsrule.sh

#!/bin/sh
rule=67
devfs rule -s $rule delset
devfs rule -s $rule add hide
devfs rule -s $rule add path bpf* unhide
devfs -m /var/dhcp/dev rule -s $rule applyset

必要なライブラリをコピー(make時に gcc -staticしても可)。

mkdir lib{,.exec}
cp /lib/libc.so.? lib
cp /libexec/ld-elf* libexec

あとは起動させるだけ。お約束のdaemontools runスクリプト。これは mkdir /var/dhcp-3.0.3/dhcpdしてその中に置こう。 変数MYNETにはネットワークアドレスを書いておく。

#!/bin/sh
MYNET=192.168.1.0
IF=`route get ${MYNET}|awk '/interface:/{print $2}'`
mydir=`dirname $0`
topdir=`(cd $mydir; cd ..; pwd -P)`

rm -f  $topdir/var/run/dhcpd.pid
df -tdevfs $topdir/dev || mount -t devfs devfs $topdir/dev
$topdir/devfsrule.sh

exec 2>&1
exec env - PATH=/sbin:/usr/sbin:/usr/bin:$topdir/sbin \
chroot $topdir dhcpd -d $IF

ついでにlog/run

#!/bin/sh
exec setuidgid dnslog multilog !tai64nlocal t ./main

準備できたら

ln -s /var/dhcp /service

てな感じで動かしませう。


叱咤激励感想ツッコミはゲストブック

Generated with mkdiary.rb
yuuji@example.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]