看板FreeBSD
标 题Diskless FreeBSD 5.2.1 release with PXE, DHCP, NFS, NIS
发信站无名小站 (Thu Aug 5 18:18:13 2004)
转信站ptt!ctu-reader!ctu-peer!news.nctu!netnews.csie.nctu!wretch
如果有任何谬误,请给我指正,谢谢 :)
http://lp.wiki.ptt2.cc/-Diskless+FreeBSD+5.2.1+release+++PXE+++DHCP+++NFS+++NI
S
=== 环境 ===
* 只有在 VMware Workstation 4.5.2 build-8848 里面试过
* server
o freebsd 5.2.1 release
o domainname: server.example.com
o ip: 192.168.1.10
o /usr, /home 为独立的 partition
o DHCP、NFS、NIS、TFTP server 都在这台上
o 网路部分,是用 VMware 里的 NAT(VMnat8),并停用 VMnat8 的 DHCP,并
改为使用 192.168.1.0/24(不改也可以啦,只是这样对我来说比较好记 ^^")
* 二台 client:32MB memory 和 NIC
o node1
+ domainname: node1.example.com
+ ip: 192.168.1.20
+ MAC address: 00:0c:29:3d:f4:94 (MAC address在网路开机的时候
可以看到)
o node2
+ domainname: node2.example.com
+ ip: 192.168.1.23
+ MAC address: 00:0c:29:e9:08:de
=== 设定 TFTP ===
PXE 会透过 tftp 抓 third stage loader (/boot/pxeboot)
编辑 /etc/inetd.conf,去掉 tftp 前的 # ,并设定 tftp 的 root 为 /boot
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /boot
编辑 /etc/rc.conf,开机时启用 inetd
inetd_enable="YES"
手动启用 inetd
# inetd -wW -C 60
=== 设定 NFS ===
所有 diskless workstation 唯读分享 server 的 / 和 /usr,/home 用可读写的方式分
享
编辑 /etc/exports
/usr -ro -maproot=root -alldirs -network=192.168.1.0 -mask=255.255.255.0
/home -maproot=root -alldirs -network=192.168.1.0 -mask=255.255.255.0
/ -ro -maproot=root -alldirs -network=192.168.1.0 -mask=255.255.255.0
编辑 /etc/rc.conf,开机时启用 nfsd 和 rpcbind
nfs_server_enable="YES"
rpcbind_enable="YES"
手动启用 nfsd 和 rpcbind
# nfsd -u -t -n 4
# rpcbind
=== 安装设定 DHCP ===
用 ports 安装好 net/isc-dhcp3-server
编辑 /usr/local/etc/dhcpd.conf
(装完 dhcp3 server 并不会有这个档案,只有一个 sample档)。
next-server 是告诉 PXE tftp server 在哪,如果 tftp 和 DHCP server 在同一台的话
,可以省略这项设定;filename 是告诉 PXE 要从 tftp 那抓哪个档案。其它设定说明请
自行参考[ handbook];root-path 就是告诉 diskless client 它的 / 在哪里
option domain-name "example.com";
default-lease-time 60;
max-lease-time 7200;
authoritative;
ddns-update-style ad-hoc;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.129 192.168.1.254;
option domain-name-servers 192.168.1.2;
option routers 192.168.1.2;
use-host-decl-names on;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
filename "pxeboot";
# next-server 192.168.1.10;
option root-path "192.168.1.10:/";
host node1 {
hardware ethernet 00:0c:29:3d:f4:94;
fixed-address 192.168.1.20;
}
host node2 {
hardware ethernet 00:0c:29:e9:08:de;
fixed-address 192.168.1.30;
}
}
编辑 /etc/rc.conf ,开机时启用 dhcpd
dhcpd_enable="YES"
手动启用 dhcpd
# /usr/local/etc/rc.d/isc-dhcpd.sh start
设定 NIS/YP
我选 "diskless-domain" 当做我的 NIS domainname,并且 server 和所有的 client 都
用 NIS/YP,NIS/YP 使用的 master.passwd 放在 /var/yp
把 /etc/master.passwd 复制到 /var/yp
# cp /etc/master.passwd /var/yp
执行 vipw 并移除所有一般 user 的 account,
在最後一行加上 +::::::::: (一个 +,9个 :)
修改 /etc/group,移除所有一般 user 的 group,在最後一行加上 +:*::
修改 /var/yp/master.passwd 移除所有系统帐号,只留下一般使用者的帐号
初始化 NIS/YP 相关档案,他会问一些问题
# ypinit -m diskless-domain
[略]
修改 /etc/hosts 多加入 server、node1、node2 的资讯
192.168.1.10 server.example.com server
192.168.1.20 node1.example.com node1
192.168.1.30 node2.example.com node2
编辑 /etc/rc.conf,开机时启用 NIS/YP 服务
nisdomainname="diskless-domain"
nis_server_enable="YES"
nis_client_enable="YES"
nis_yppasswdd_enable="YES"
手动启动
# domainname diskless-domain
# /usr/sbin/ypserv
# /usr/sbin/ypbind
# /usr/sbin/rpc.yppasswdd
如果要新增或修改 NIS/YP 使用者帐号的话,可以用 pw 搭配 -V -Y 的参数
-V 指定 password 相关档案、pwd.conf、group 放在哪
-Y pw 有修改档案的话,到 /var/yp 执行 make
在这之前先在制造 pwd.db 和 spwd.db,使用 pw 才不会有错误
# pwd_mkdb -d /var/yp master.passwd
例如要新增一个叫 test 的使用者
# pw useradd test -h0 -s /bin/tcsh -V /var/yp -Y
Password for user test:
NIS Map update started on Thu Aug 5 17:46:29 CST 2004 for domain diskless-dom
ain
Updating passwd.byname...
Updating passwd.byuid...
Updating netid.byname...
Updating master.passwd.byname...
Updating master.passwd.byuid...
NIS Map update completed.
#
=== 设定 diskless client ===
diskless client 开机顺序如下:
PXE 载入 server 端的 /boot/pxeboot,pxeboot 再去载入 kernel,kernel 控制权交给
/sbin/init,首先执行 /etc/rc (档案在 server 端),/etc/rc 会先执行
/etc/rc.d/initdiskless (档案在 server 端),接下来会去执行 /etc/rc.d (档案在
client 端了)下的 shell script/etc/rc.d/initdiskless 会自动 create 三个
memory filesystems: /etc, /var, /tmp,并且会把 server 的
/conf/base/etc 复制到 client 的 /etc
建立 /conf/base 目录,并复制 server 的 /etc 到 /conf/base:
# mkdir -p /conf/base
# cp -r /etc /conf/base
修改 /conf/base/fstab (这个档案就是 client 端的 /etc/fstab)
192.168.1.10:/usr /usr nfs ro 0 0
192.168.1.10:/home /home nfs rw 0 0
修改 /conf/base/rc.conf,去掉一些 server 端的东西,例如刚刚加的 dhcpd_enable
等,并且启用 nfs client,我的 /conf/base/rc.conf 长这样:
usbd_enable="NO"
sendmail_enable="NONE"
syslogd_flag="-ss"
sshd_enable="YES"
nfs_client_enable="YES"
rpcbind_enable="YES"
#ifconfig_lnc0="DHCP"
nisdomainname="diskless-domain"
nis_client_enable="YES"
VMWare 的网路卡在 freebsd 下的名称是 lnc0,本来想用 DHCP 的方式取得 ip 并设定
hostname,可是 client 开机的时候会停在
Starting dhclient.
nfs send error 65 for server 192.168.1.10:/
如果有人知道怎麽解决,请告诉我,谢谢 :)
即使没有 ifconfig_lnc0="DHCP" diskless client 开完机会是会自动设好 ip,只是
hostname 没有设,所以要在 rc.conf 多加 hosname 的设定,/conf/${ip}/rc.conf
会覆盖过 /conf/base/rc.conf 的设定
把 /conf/base/etc/rc.d 复制到 /conf/${ip}/etc 下,并分别增加 hostname 的设定
# mkdir -p /conf/192.168.1.20/etc
# cp /conf/base/etc/rc.conf /conf/192.168.1.20/etc
# echo hostname="node1" >> /conf/192.168.1.20/etc/rc.conf
# mkdir -p /conf/192.168.1.30/etc
# cp /conf/base/etc/rc.conf /conf/192.168.1.30/etc
# echo hostname="node2" >> /conf/192.168.1.30/etc/rc.conf
设定到此,diskless client 就可以开机了,并可以 ssh 连进去,
打 mount 的结果:
> mount
192.168.1.10:/ on / (nfs, read-only)
devfs on /dev (devfs, local)
/dev/md0 on /etc (ufs, local, soft-updates)
/dev/md1 on /var (ufs, local, soft-updates)
192.168.1.10:/usr on /usr (nfs, read-only)
192.168.1.10:/home on /home (nfs)
/dev/md2 on /tmp (ufs, local, soft-updates)
=== REF ===
freebsd handbook
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/
Diskless FreeBSD?-5.2.1
http://www.opennet.ru/docs/RUS/diskless-FreeBSD/
Google ^^"
http://www.google.com.tw
=== Appendix 1 ===
如果不想使用 server 的 / 当 diskless client 的 root filesystem,也可以用其它资
料夹,不过要复制一些开机要用的档案到该资料夹。
例如我想用 /diskless 当 diskless client 的 root filesystem,复制需要的档案
# cp -r /boot /bin /lib /libexec /sbin /diskless/
然修改 dhcpd.conf 中的 root-path 指到 192.168.1.10:/diskless 就可以了
=== Apendix 2 ===
嫌每次登入到不同机器都要再打一次密码很麻烦的话,可以利用 ssh-agent,
相关设定请参考:
http://www.openfoundry.org/OSSF-TECH/9.ActivityLog/f.Suponsor-TR/sso.html
http://mah.everybody.org/docs/ssh
http://www.wlug.org.nz/SSHKeys
--
夫兵者不祥之器物或恶之故有道者不处君子居则贵左用兵则贵右兵者不祥之器非君子
之器不得已BBS telnet://wretch.twbbs.org 开个人板 超快 不用连署得志於天下
矣吉事尚左凶事尚右偏将军居左上将军居右言以丧礼处之杀人之众以哀悲泣之战胜以
丧礼处之道常无名朴虽小天下莫能臣侯王若能守之万物将自宾天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦将知止知止可以不殆譬道vesta.ee.nthu.edu.tw海
作者在
04/08/05 18:18:13 从
vesta.ee.nthu.edu.tw 修改这篇文章