0、概述
当需要在多台计算机上安装FreeBSD操作系统时,我们可以使用PXE全自动安装方式,来减少重复工作量,这里以实例介绍PXE安装FreeBSD的实现过程。
整体思路是:
PXE客户端启动 -> 从PXE服务端获取IP地址和pxeboot ->
pxeboot开始运行,以TFTP方式获取/boot/loader.rc ->
按照loader.rc设置启动系统 -> 运行sysinstall,通过FTP获取安装文件,开始自动安装
接下来,让我们按照这个思路来一步步实现。
1、安装DHCP服务
PXE启动主要是通过DHCP服务实现,所以我们首先需要安装DHCP服务,这里使用isc-dhcp,并使用ports方式安装。
| # cd /usr/ports/net/isc-dhcp3-server # make install clean |
出现ports选项,使用默认值。
安装完成后,就是配置DHCP服务了,DHCP的默认配置文件是/usr/local/etc/dhcpd.conf,本例中的配置如下:
| option domain-name "cnfug.org"; option domain-name-servers ns1.cnfug.org, ns2.cnfug.org; default-lease-time 600; max-lease-time 7200; authoritative; ddns-update-style none; log-facility local7;
server-name "PXE Server"; subnet 192.168.7.0 netmask 255.255.255.0 { |
2、准备PXE环境
我们将PXE环境所需要的文件全部放于/home/pxe目录下,首先要准备的就是pxeboot文件,pxeboot实际就是loader,只是它用于PXE环境。
标准的pxeboot默认使用NFS获取启动文件、内核等文件,但我们这里设计的是TFTP方式,所以我们需要重新编译pxeboot,让它使用TFTP来获取启动文件,按照下面的步骤操作:
| # cd /usr/src/sys/boot # vi i386/libi386/pxe.c |
将第339行
| pxe_setnfshandle(rootpath); |
注释掉或者删除,这样可以避免pxeboot尝试使用NFS而带来的超时等待。
| # setenv LOADER_TFTP_SUPPORT # make clean && make |
接下来把pxeboot放到/home/pxe中
| # mkdir -p /home/pxe/boot # cp /usr/src/sys/boot/i386/pxeldr/pxeboot /home/pxe/boot/ |
现在/home/pxe/boot目录中有了pxeboot文件,现在我们需要准备/home/pxe/boot目录中的其它文件,这里我们使用安装软盘中的文件。
| # mkdir -p /mnt/cd # mkdir -p /mnt/fd # mount -t cd9660 /dev/acd0 /mnt/cd # cp /mnt/cd/floppies/boot.flp /tmp # mdconfig -a -t vnode -u0 -f /tmp/boot.flp # mount /dev/md0 /mnt/fd # cp -RpP /mnt/fd/boot/* /home/pxe/boot/ # cp /boot/kernel/kernel /home/pxe/ # cp /mnt/fd/mfsroot.gz /home/pxe/ # umount /dev/md0 # mdconfig -d -u0 |
修改 /home/pxe/boot/loader.conf 为
| bootfile="/kernel" acpi_load="YES" acpi_name="/acpi.ko" mfsroot_load="YES" mfsroot_type="mfs_root" mfsroot_name="/mfsrot" |
3、设置自动安装
sysinstall在执行安装操作前会检查/install.cfg文件是否存在,如果存在则按照文件中的设置,执行全自动安装。我们所使用的是标准安装程序,整个安装所需要的基本环境存放在 /home/pxe/mfsroot.gz 中,由于它没有设置自动安装,所以我们需要修改 mfsroot.tgz 为其增加 install.cfg 文件。
| # cd /home/pxe # gzip -d mfsroot.gz # mdconfig -a -t vnode -u0 -f mfsroot # mount /dev/md0 /mnt/fd # vi /mnt/fd/install.cfg |
然后输入以下内容:
| # 使用DHCP配置网络 tryDHCP=YES
hostname=pxe.cnfug.org # 设置安装方式为FTP和FTP服务器的地址 # 设置安装类型为最小安装,如果你需要全部内容,请改为 distSetDeveloper # 磁盘分区配置 # 设置disklabel # 为 / 分配 512MB 的空间 # 开始执行安装 |
配置中已经简单的说明每个配置的作用,更详细的说明请参照sysinstall(8)
现在重新压制mfsroot.gz
| # umount /mnt/fd # mdconfig -d -u0 # gzip mfsroot |
4、开启相关服务
(1) DHCP服务
首先要设置网卡IP为我们在dhcpd.conf中设置的IP 192.168.7.1,本文是在VMware中验证的,所以这里以lnc0为例
| # ifconfig lnc0 192.168.7.1 # /usr/local/etc/rc.d/isc-dhcpd.sh start |
(2) TFTP服务
我们设置/home/pxe为TFTP服务的根目录(即PXE启动环境的根目录),编辑/etc/inetd.conf,找到tftp那行,修改为:
| tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /home/pxe |
现在可以启动tftp服务了
| # /usr/sbin/inetd |
(3) FTP服务
我们设置了安装程序使用FTP的方式获取安装文件,所以我们需要在这台服务器上开启FTP服务。
首先增加系统用户ftp及ftp组,并设置它的home目录为/mnt/cd,因为我们所有的安装程序都在光盘上,加上先前我们已经将光盘加载到/mnt/cd目录中,所以这里设置ftp帐号的home目录为/mnt/cd,就是设置了Anonymous FTP服务的根目录为/mnt/cd,当PXE客户端安装程序启动时,安装程序会从这里取得安装需要的文件
| # pw groupadd ftp -g 21 # pw useradd ftp -u 21 -g ftp -s /usr/sbin/nologin -d /mnt/cd -w no |
最后一步,启动FTP服务
| # /usr/libexec/ftpd -DA4 |
现在一切准备已经完成,找到台支持PXE的机器,以PXE方式引导,你就可以看到FreeBSD在它上面自动完成整个安装过程了。

