目标
在已有一台运行
FreeBSD 的计算机(我们称其为 S)的情况下,使用 PXE 在一台计算机(我们称其为 D)安装 FreeBSD。
硬件需求
S
必须拥有一块 FreeBSD 可以正常使用的网卡。
D
必须可以支持 PXE 引导,并且其网卡要可以在 FreeBSD 里面正常使用。一条用于双机直连的网线。
软件需求
tftpd,已经包含在
FreeBSD 发行版的 base 中。
nfsserver,已经包含在
FreeBSD 中。
isc-dhcp3-server
3.0.5,通过 ports 安装。
FreeBSD
发行版 DISC1 的 ISO 镜像(我使用的镜像是FreeBSD-8.1-RELEASE-i386-disc1.iso)。
S
上使用的 FreeBSD 是 FreeBSD-8.1-RELEASE-i386。
网络设置
假设 S
的 IP 地址为 192.168.0.1,子网掩码为 255.255.255.0。
准备工作
允许 tftpd 运行:
默认情况下,inetd
里面的 tftpd 是不会运行的。在 inetd.conf 中找到 tftpd 所对应的一行,去掉行首的#,保存。注意,去除注释的这行应该是使用 udp
而不是 udp6。
配置 nfsserver:
echo "/data/pxeiso/
-ro -alldirs" > /etc/exports
安装 isc-dhcp3-server:
cd
/usr/ports/net/isc-dhcp3-server && make BATCH=yes install
配置 isc-dhcp3-server:
编辑
/usr/local/etc/dhcpd.conf
default-lease-time
7200;
max-lease-time 7200;
ddns-update-style none;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.254;
server-identifier 192.168.0.1;
next-server 192.168.0.1;
filename "/pxeboot";
option root-path "/data/pxeiso/";
}
正式安装
1、为了避免
S 上的 dhcpd 影响网络中其他机器,也为了避免 D 受到网络上其他机器的影响,用直连网线将 S 和 D 连接起来。
2、挂载准备好的
ISO 镜像。使用 mdconfig 将 FreeBSD 的 ISO 文件连接成为一个 vnode 类型的内存盘:
mdconfig
-atvnode -f FreeBSD-8.1-RELEASE-i386-disc1.iso
挂载这个
md 节点(假设为 /dev/md0)到 /mnt:
mount_cd9660
/dev/md0 /mnt
3、把
pxeboot(8) 放到 /tftpboot:
cp
/mnt/boot/pxeboot /tftpboot
4、将FreeBSD-8.1-RELEASE-i386-disc1.iso里的所有文件复制到/data/pxeiso/,复制完毕后卸载镜像:
mkdir
-p /data/pxeiso/
cp -R /mnt/* /data/pxeiso/
umount /dev/md0
mdconfig -d -u 0
5、修改loader.conf文件:
编辑 /data/pxeiso/boot/loader.conf,添加以下两行:
vfs.root.mountfrom="ufs:/dev/md0"
vfs.root.mountfrom.options="rw"
6、设置Automatic
installation:
1)解压基本环境文件mfsroot.gz
cd
/data/pxeiso/boot/
gzip -d mfsroot.gz
2)挂载mfsroot
mdconfig
-atvnode -f mfsroot
mount /dev/md0 /mnt
3)在mfsroot文件中加入自动安装配置文件install.cfg
编辑
/mnt/install.cfg,以下是install.cfg配置范例:
#
启用debug模式
debug=YES
nonInteractive=YES
noConfirm=YES
noWarn=NO
#
选择磁盘并创建FreeBSD分区
disk=da0
partition=all
bootManager=standard
diskPartitionEditor
#
在FreeBSD分区中划分label,以下是划分举例
# /
2048MB, swap 4096MB, /var 4096MB, /tmp 512MB, /usr 8192MB, /data
remaining
da0s1-1=ufs
4194304 /
da0s1-2=swap
8388608 none
da0s1-3=ufs
8388608 /var
da0s1-4=ufs
1048576 /tmp
da0s1-5=ufs
16777216 /usr
da0s1-6=ufs
0 /data 1
diskLabelEditor
#
主机全局配置,Host specific configuration:
tryDHCP=YES
netDev=bce0
hostname=FreeBSD
domainname=blog.51cto.com
#
选择安装的版本
distSetKernDeveloper
#
选择安装方法
netDev=bce0
tryDHCP=YES
nfs=192.168.0.1:/data/pxeiso
mediaSetNFS
#
配置完成,提交!
installCommit
# 安装完毕自动重启
shutdown
7、卸载mfsroot并重新打包mfsroot
umount
/dev/md0
mdconfig -d -u0
gzip mfsroot
8、在
S 上启动 tftpd, dhcpd 和 nfsd:
/etc/rc.d/inetd
forcestart
/etc/rc.d/nfsd forcestart
/usr/local/etc/rc.d/isc-dhcpd forcestart
9、由于我们已经使用直连网线将
S 和 D 连接,假设 S 上没有配置 BIND 服务,也没有额外的到 Internet 的网络连接,那么需要禁止 S 上的 DNS 解析。可以修改
/etc/resolv.conf,将其中所有以 nameserver 开头的行注释掉。否则 mountd(因为 nfsd 依赖这个 daemon,所以
mountd 也会随 nfsd 启动而启动)会去查 DNS,而有可能导致最终 PXE 启动连不上 nfs,不能加载 kernel 而超时失败。
10、在
D 的 BIOS 中设置为 PXE 引导,重新启动计算机。
11、最终安装完毕后重新启动系统。并修改
D 的 BIOS 设置,禁止网络启动。
12、安装全部完成,可以开始享用
FreeBSD 了。