FreeBSD-user-jp MLでggated/ggatecが便利だと教えてもらったので設定してみました。
今まではnfs上でmake buildworldを行っていたのですが、ggateを使うと倍以上速いです。但し、roでは複数のマシンでmountできますが、rwでは同時には1台しかmountできません。ufsなら当然の制約ですが、journal file systemで複数マシンで同時にrwマウントできないものかなぁ。今回は、/usr/srcと/usr/objを14-Currentマシンで共有することが目的です。autofsで自動的にマウントしますが、一番高速なマシンだけrwでmountして他のマシンはroでマウントすることにしました。
server# gpart add -t freebsd-ufs -s 32g -l fbsrc -i 3 nvd0
server# gpart add -t freebsd-ufs -s 32g -l fbobj -i 4 nvd0
server# newfs -j /dev/nvd0p3
server# newfs -j /dev/nvd0p4
server# echo '192.168.0.0/24 RW /dev/nvd0p3' >> /etc/gg.gated
server# echo '192.168.0.0/24 RW /dev/nvd0p4' >> /etc/gg.gated
server# cat <<EOF >/usr/local/etc/rc.d/ggated
#!/bin/sh
# PROVIDE: ggated
# REQUIRE: LOGIN
# KEYWORD: nojail shutdown
. /etc/rc.subr
name=ggated
command="/sbin/${name}"
desc="${name}"
rcvar=ggated_enable
load_rc_config $name
: ${ggated_enable:=NO}
sig_stop="USR1"
load_rc_config ${name}
run_rc_command "$1"
EOF
server# echo ggated_enable="YES" >> /etc/rc.conf
client# cat <<EOF >/usr/local/etc/rc.d/ggatec
#!/bin/sh
# PROVIDE: ggatec
# REQUIRE: LOGIN
# KEYWORD: nojail shutdown
. /etc/rc.subr
name=ggatec
command="/sbin/ggatec"
desc="ggatec"
rcvar=ggatec_enable
load_rc_config $name
: ${ggatec_enable:=NO}
start_cmd=ggatec_start
stop_cmd=ggatec_stop
#sig_stop="USR1"
ggatec_start() {
${command} create -u 0 192.168.0.1 /dev/nvd0p3
${command} create -u 1 192.168.0.1 /dev/nvd0p4
}
ggatec_stop() {
umount /usr/src
umount /usr/obj
${command} destroy -u 0
${command} destroy -u 1
}
load_rc_config ${name}
run_rc_command "$1"
EOF
client# echo ggatec_enable="YES" >> /etc/rc.conf
client# cat <<EOF >> ~root/.cshrc
alias shutdown \
'/bin/df /usr/src /usr/obj | ' \
'/usr/bin/awk '"'"'/^\//{system("/sbin/mount -u -r "$6";")}'"'"'; ' \
'/sbin/shutdown'
alias reboot \
'/bin/df /usr/src /usr/obj | ' \
'/usr/bin/awk '"'"'/^\//{system("/sbin/mount -u -r "$6";")}'"'"'; ' \
'/sbin/reboot'
EOF
echo <<EOF >> /etc/fstab
/dev/ggate0 /usr/src ufs ro,noauto 0 0 # 一台だけroをrwに変更
/dev/ggate1 /usr/obj ufs ro,noauto 0 0 # 一台だけroをrwに変更
EOF
