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