桐山です

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]% 

# まぁ最近のマシンではスワップは必要ないですが...

メールによる返信