桐山です At Mon, 27 Feb 2012 08:03:49 +0900, もじもじ wrote: > > お返事ありがとうございます。 > > 確かに initdiskless も考えたのですが、なかなか思うように > 行かなくて・・・(^^; > > もう一度検討してみます。 > > Sun, 26 Feb 2012 22:41:40 +0900 に、 > Toshihiko ARAI <arai.toshih...@gmail.com> さんは書きました: > > > 新井です。 > > > > 2012年2月26日16:59 もじもじ <mojimoji...@yahoo.co.jp>: > > > 皆様お返事ありがとうございました。 > > > > > > やはりできないのですね・・・ > > > > > > 事の発端は > > > http://www.sanda.gr.jp/non/diskless.html > > > の > > > > ぱっと見ですが古すぎると思います。 > > diskless(8) と多分ハンドブックあたりにも説明あると思うんですが > > > > > ----- > > > rc.confはhostname, ifconfigが問題になりますが、hostnameは > > > BOOTPで設定されているので、rc.confを見ないようです。 > > > ifconfigは、rc.confで記述しないのが一つの手です。2つ目の > > > インターフェース がある場合には問題になります。 keyboard > > > の配列やマウスの接続先も問題になりそうです。 そこで、 > > > rc.confの最後に、 > > > > > > if [ "`hostname -s`" ] ; then > > > if [ -f "/etc/rc.conf.`hostname -s`" ]; then > > > . /etc/rc.conf.`hostname -s` > > > fi > > > fi > > > を追加して、/etc/rc.conf.hostnameを使えるようにしました。 > > > これで rc.confは共通の設定(ディスクのついているサーバ用)、 > > > ディスクレスクライアント1用の設定は rc.conf.client1 で上 > > > 書きと することが出来ます。 > > > ----- > > > という記述のためでした。 > > > > > > 今、複数のFreeBSDをディスクレスで立ち上げようとしてまし > > > て、そのマシン特有の設定ファイルだけを別立てにしようと思っ > > > ております。 > > > > > > で、上記の方法を思いついたのですが、まぁ、上記の方法もう > > > まくは行きませんでした(笑) > > > そのため、別の方法を取ったのですが、なんせ気持ち悪いので > > > rc.conf から値だけ設定できる他のファイルが指定できないか > > > と思ったわけです。。。。 > > > > いまどうなっていて気持ち悪いのか分かんないですが、そこまで無理せず > > /conf/ 配下にクライアント側のファイルを準備したのでいけませんか? > > 共通ファイルは diskless_remount 設定しておけばいいですし。
うちでは↓のようにしてます. admin@diskless:/conf[386]% ll total 18 drwxr-xr-x 5 root wheel 512 Apr 20 2011 . drwxr-xr-x 28 root wheel 1024 Feb 27 15:00 .. drwxr-xr-x 4 root wheel 512 Jun 25 2011 base drwxr-xr-x 4 root wheel 512 Mar 26 2010 default drwxr-xr-x 112 root wheel 3072 Mar 4 2011 ip -rw-r--r-- 1 root wheel 35 Apr 20 2011 permanent_mount -rw-r--r-- 1 root wheel 31 Apr 20 2011 permanent_mount.bak -rw-r--r-- 1 root wheel 31 Apr 25 2010 permanent_mount.latest admin@diskless:/conf[387]% ll base/ total 8 drwxr-xr-x 4 root wheel 512 Jun 25 2011 . drwxr-xr-x 5 root wheel 512 Apr 20 2011 .. drwxr-xr-x 2 root wheel 512 Apr 23 2011 etc drwxr-xr-x 22 root wheel 512 May 18 2010 var admin@diskless:/conf[388]% find base/etc -type f base/etc/diskless_remount.bak base/etc/diskless_remount base/etc/md_size.bak base/etc/md_size admin@diskless:/conf[389]% cat base/etc/diskless_remount /etc admin@diskless:/conf[390]% cat base/etc/md_size 128000 admin@diskless:/conf[391]% ll base/var total 46 drwxr-xr-x 22 root wheel 512 May 18 2010 . drwxr-xr-x 4 root wheel 512 Jun 25 2011 .. drwxr-xr-x 2 root wheel 512 Dec 29 2009 account drwxr-xr-x 4 root wheel 512 Dec 29 2009 at drwxr-x--- 2 root audit 512 Dec 29 2009 audit drwxr-x--- 2 root wheel 512 Dec 30 2009 backups drwxr-xr-x 3 root wheel 512 Dec 29 2009 cache drwxr-x--- 2 root wheel 512 Dec 29 2009 crash drwxr-x--- 3 root wheel 512 Dec 29 2009 cron drwxr-xr-x 13 root wheel 512 Jan 8 2010 db dr-xr-xr-x 2 root wheel 512 Dec 29 2009 empty drwxrwxr-x 2 root games 512 Dec 29 2009 games drwx------ 2 root wheel 512 Dec 29 2009 heimdal drwxr-xr-x 10 root wheel 512 Dec 29 2009 lib drwxr-xr-x 3 root wheel 512 May 18 2010 log drwxrwxr-x 2 root mail 512 Jan 8 2010 mail -rw-r--r-- 1 root wheel 7 Mar 26 2010 md_size drwxr-xr-x 2 daemon wheel 512 Dec 29 2009 msgs drwxr-xr-x 2 root wheel 512 Dec 29 2009 preserve drwxr-xr-x 8 root wheel 512 Jan 8 2010 run drwxrwxr-x 2 root daemon 512 Dec 29 2009 rwho drwxr-xr-x 8 root wheel 512 Dec 29 2009 spool drwxrwxrwt 2 root wheel 512 Jan 8 2010 tmp admin@diskless:/conf[392]% find default -type f default/etc/X11/xorg.conf.bak default/etc/X11/xorg.conf default/etc/X11/xorg.conf.org default/etc/X11/xorg.conf.NEC_PC-MY30YEZEH default/etc/csh.cshrc default/etc/amd.map default/etc/csh.login.bak default/etc/csh.login default/etc/devfs.conf.bak default/etc/csh.logout default/etc/devfs.conf default/etc/fstab.bak default/etc/fstab default/etc/master.passwd.bak default/etc/printcap-1 default/etc/fstab.latest default/etc/fstab.tmp default/etc/group default/etc/host.conf default/etc/hosts default/etc/hosts.allow default/etc/localtime default/etc/master.passwd default/etc/rc.conf.default default/etc/printcap-2 default/etc/pwd.db default/etc/master.passwd.nis default/etc/rc.conf.default.bak default/etc/rc.local.org default/etc/shells default/etc/spwd.db default/etc/ttys default/etc/ttys.bak default/etc/wall_cmos_clock default/etc/rc.conf.default.nis default/etc/group.nis default/etc/group.org default/etc/rc.conf.default.org default/etc/master.passwd.new default/etc/master.passwd.org default/etc/hosts.bak default/etc/host.conf.bak default/etc/resolv.conf default/etc/master.passwd.old default/var/log/lastlog default/var/log/wtmp admin@diskless:/conf[393]% cat default/etc/rc.conf.default # # General # inetd_enable="YES" #local_startup="NO" #local_startup="/usr/local/kde4/etc/rc.d" # # Networking # # fundamental network_interfaces="lo0 em0" defaultrouter="192.168.2.254" # DHCP ifconfig_em0="DHCP" # NIS/NFS #nisdomainname="cct2" #nis_client_enable="YES" nfs_client_enable="YES" nfs_access_cache="8" nfs_bufpackets="64" #nfs_client_flags="-n 6" rpc_lockd_enable="YES" rpc_statd_enable="YES" # ssh sshd_enable="YES" # usb usbd_enable="YES" # amd amd_enable="YES" amd_flags="-l syslog /a /etc/amd.map" # KDE dbus_enable="YES" #hald_enable="YES" #console_kit_daemon_enable="YES" #console_kit_daemon_flags="--debug" # # Time setting # ntpd_enable="YES" # # Accounting # accounting_enable="YES" # # Mail environment # sendmail_enable="NONE" # # Printing environment # lpd_enable="YES" # # Linux emulation # linux_enable="YES" # # Peripherals # # keyboard keymap="jp.106" # mouse moused_enable="YES" moused_flags="-t auto" moused_port="/dev/psm0" # display saver="logo" blanktime="900" # # KDM # kdm4_enable="YES" admin@diskless:/conf[394]% ll ip total 226 drwxr-xr-x 112 root wheel 3072 Mar 4 2011 . drwxr-xr-x 5 root wheel 512 Apr 20 2011 .. drwxr-xr-x 3 root wheel 512 Mar 28 2010 192.168.2.128 drwxr-xr-x 3 root wheel 512 Mar 28 2010 192.168.2.129 (snip) drwxr-xr-x 3 root wheel 512 Mar 28 2010 192.168.2.236 drwxr-xr-x 3 root wheel 512 Mar 28 2010 192.168.2.237 admin@diskless:/conf[395]% admin@diskless:/conf[395]% ll ip/192.168.2.12 192.168.2.128/ 192.168.2.129/ admin@diskless:/conf[395]% ll ip/192.168.2.128/ total 8 drwxr-xr-x 3 root wheel 512 Mar 28 2010 . drwxr-xr-x 112 root wheel 3072 Mar 4 2011 .. drwxr-xr-x 2 root wheel 512 Mar 4 2011 etc admin@diskless:/conf[396]% admin@diskless:/conf[396]% ll ip/192.168.2.128/etc/ total 10 drwxr-xr-x 2 root wheel 512 Mar 4 2011 . drwxr-xr-x 3 root wheel 512 Mar 28 2010 .. -rw-r--r-- 1 root wheel 650 Mar 28 2010 printcap -rw-r--r-- 1 root wheel 55 Mar 4 2011 rc.conf -rw-r--r-- 1 root wheel 55 Mar 4 2011 rc.conf-Ee admin@diskless:/conf[397]% ll ip/192.168.2.128/etc/rc.conf -rw-r--r-- 1 root wheel 55 Mar 4 2011 ip/192.168.2.128/etc/rc.conf admin@diskless:/conf[398]% cat ip/192.168.2.128/etc/rc.conf . /etc/rc.conf.default swapfile="/swap/192.168.2.128" admin@diskless:/conf[399]% ということで,基本的に /conf/ip/xxxx.xxxx.xxxx.xxxx/etc/rc.conf にクライアン ト固有の設定を書いてクライアントに共通なものは /conf/default/etc/rc.conf.default に書いてそれをインクルードすれば良いという ことです.なお,私のところで固有な設定は swapfile="/swap/xxxx.xxxx.xxxx.xxxx" を有効にするため予め /swap をマウントしておく permanent_mount なるもの(↓) admin@diskless:/conf[401]% cat permanent_mount 192.168.2.254:/swap /swap -o async admin@diskless:/conf[402]% を追加していることぐらいですかね.これはとりあえず↓のパッチで有効となります. admin@diskless:/conf[402]% diff -u /etc/rc.initdiskless.org /etc/rc.initdiskless --- /etc/rc.initdiskless.org 2010-03-25 18:04:30.000000000 +0900 +++ /etc/rc.initdiskless 2011-05-28 17:22:31.000000000 +0900 @@ -195,6 +195,19 @@ to_umount="$b ${to_umount}" } +mount_permanent() { # $1 = mount point + local nfspt mountopts b + b=$1 + log mount_permanent $1 + [ -d $b -a -f $b/permanent_mount ] || return + read nfspt mountpt mountopts < $b/permanent_mount + log "nfspt ${nfspt} mountopts ${mountopts} mountpt ${mountpt}" + [ -d $mountpt ] || return + [ `expr "$nfspt" : '\(.\)'` = "/" ] && nfspt="${nfsroot}${nfspt}" + mount_nfs $mountopts $nfspt $mountpt + chkerr $? "mount_nfs $nfspt ${mountpt}" +} + # Create a generic memory disk # mount_md() { @@ -204,6 +217,7 @@ # Create the memory filesystem if it has not already been created # create_md() { + local real_path=`echo ${1}|tr '_' '/'` [ "x`eval echo \\$md_created_$1`" = "x" ] || return # only once if [ "x`eval echo \\$md_size_$1`" = "x" ]; then md_size=10240 @@ -211,8 +225,8 @@ md_size=`eval echo \\$md_size_$1` fi log create_md $1 with size $md_size - mount_md $md_size /$1 - /bin/chmod 755 /$1 + mount_md $md_size /${real_path} + /bin/chmod 755 /${real_path} eval md_created_$1=created } @@ -352,9 +366,13 @@ for i in ${templates} ; do for j in /conf/$i/* ; do subdir=${j##*/} + real_subdir=`echo ${subdir}|tr '_' '/'` if [ -d $j -a ! -f $j.cpio.gz ]; then create_md $subdir - cp -Rp $j/ /$subdir + log copy $j to /${real_subdir} + log mount status "`mount`" + log df status "`df -h`" + cp -Rp $j/ /${real_subdir} fi done for j in /conf/$i/*.cpio.gz ; do @@ -379,3 +397,6 @@ # umount partitions used to fill the memory filesystems [ -n "${to_umount}" ] && umount $to_umount + +# mount permanent if /conf/permanent_mount exists +mount_permanent /conf admin@diskless:/conf[403]% # まぁ最近のマシンではスワップは必要ないですが...