免光驱,免软驱,免U盘实现用PXE远程引导安装FreeBSD

来源:互联网 发布:实对称矩阵特征向量 编辑:程序博客网 时间:2024/04/29 23:37
Google上找了三天资料,终于实现免光驱,免软驱,免U盘通过PXE远程引导来安装FreeBSD了,这种PXE远
程引导安装的方法非常适合没有光驱,软驱,甚至连U盘都没有的管理人员。
第一步:
在Windows环境下载需要用于远程引导安装FreeBSD系统安装的软件
1.FreeBSD软盘映象文件
映象文件名       (boot.flp,kern1.flp,kern2.flp,kern3.flp,mfsroot1.flp)
官方下载地址     
ftp://ftp.cn.freebsd.org/pub/Fre ... 2-RELEASE/floppies/
2.用于引导FreeBSD软盘映象文件的启动文件
启动文件名       pxelinux.0(在syslinux压缩包里可以找到)
官方下载地址     
http://www.kernel.org/pub/linux/utils/boot/syslinux/
  
3.用于Windows环境下的NFS服务器软件
软件名           Allegro NFS Server for Windows
官方下载地址     
http://www.nfsforwindows.com/home
4.用于DHCP和TFTP服务的软件
软件名           tftpd32
官方下载地址     
http://tftpd32.jounin.net/tftpd32_download.html
第二步:将FreeBSD软盘映象文件为一个启动文件(制作启动文件要在FreeBSD环境下操作)
1.复制启动文件boot.flp中的内容到临时文件夹boot_tmp下:
#mkdir /mnt/cd
#mdconfig -a -t vnode -f boot.flp -u 0
#mount /dev/md0 /mnt/cd
#mkdir boot_tmp
#cp -R /mnt/cd/* boot_tmp/
#umount /mnt/cd
#mdconfig -d -u 0
查看boot_tmp下的kernel.gz.split和mfsroot.gz.split这两个文件,可以知道kernel.gz文件被分割成 
了四个文件:kernel.gz.boot、kernel.gz.aa、kernel.gz.ab、kernel.gz.ac,而mfsroot.gz
被分割成了
mfsroot.gz.boot和mfsroot.gz.aa两个文件,下面就是要把这几个分割开的文件合并成一个磁盘映象文件
2.合并kernel.gz文件:
#mdconfig -a -t vnode -f kern1.flp -u 0
#mount /dev/md0 /mnt/cd
#cat /mnt/cd/kernel.gz.aa >> boot_tmp/kernel.gz.boot
#umount /mnt/cd
#mdconfig -d -u 0
#mdconfig -a -t vnode -f kern2.flp -u 0
#mount /dev/md0 /mnt/cd
#cat /mnt/cd/kernel.gz.ab >> boot_tmp/kernel.gz.boot
#umount /mnt/cd
#mdconfig -d -u 0
#mdconfig -a -t vnode -f kern3.flp -u 0
#mount /dev/md0 /mnt/cd
#cat /mnt/cd/kernel.gz.ac >> boot_tmp/kernel.gz.boot
#umount /mnt/cd
#mdconfig -d -u 0
#mv boot_tmp/kernel.gz.boot boot_tmp/kernel.gz
至此kernel.gz合并完毕
3.合并mfsroot.gz文件:
#mdconfig -a -t vnode -f mfsroot1.flp -u 0
#mount /dev/md0 /mnt/cd
#cat /mnt/cd/mfsroot.gz.aa >> boot_tmp/mfsroot.gz.boot
#umount /mnt/cd
#mdconfig -d -u 0
#mv boot_tmp/mfsroot.gz.boot boot_tmp/mfsroot.gz
至此mfsroot.gz合并完毕
4.另外还需要做额外一些工作:删除无用的文件
#rm -f boot_tmp/{kernel,mfsroot}.gz.split
5.修改boot_tmp/boot/loader.conf文件,删除含有"Insert floppy"的两行
6.再把boot_tmp下的内容打包成启动文件:
#dd if=/dev/zero of=freebsd72 bs=1k count=6800
#mdconfig -a -t vnode -f freebsd72 -u 0
#disklabel -Bw /dev/md0
#newfs /dev/md0a
#mkdir /mnt/hd
#mount /dev/md0a /mnt/hd
#cp -R boot_tmp/* /mnt/hd
#umount /mnt/hd
#mdconfig -d -u 0
#gzip -9 freebsd72
7.将freebsd72用网络或U盘拷到到Windows系统里
第三步:
1.配置tftpd32,开启dhcp和tftp服务,设置好网络参数,在启动文件处填写pxelinux.0
2.COPY下载的pxelinux.0和做好的freebsd72两个文件到 tftpd32的根目录
3.新建一个名为pxelinux.cfg的文件夹
4.在pxelinux.cfg文件夹里新建一个Default的文件
5.编辑Default文件,输入以下内容:
DEFAULT menu.c32
PROMPT 0
NOESCAPE 0
ALLOWOPTIONS 0
TIMEOUT 50
MENU TITLE My Boot Menu
# FreeBSD 7.2 Boot Floppy
LABEL FreeBSD 7.2 Boot Floppy
MENU Boot Floppy
KERNEL memdisk
APPEND initrd=freebsd72.gz
6.编辑好后保存
第四步:
1.安装Allegro NFS Server for Windows
2.用虚拟光驱将FreeBSD光盘映象文件载入
3.启动Allegro NFS Server for Windows,将虚拟的FreeBSD7.2光盘根目录Mount成/export
第五步:
将需要安装FreeBSD的机器设成PXE网络启动之后就会加载pxelinux.0这个文件,然后pxelinu.0就会把做好的FreeBSD启动文
件下载到机器的内存中执行并成功进入FreeBSD的Sysinstall安装界面,安装方法基本和光驱安装相同,不同之处在于要在安装来源中选择
NFS,并填上nfs server mount的FreeBSD目录,然后就可以成功开始安装了。
PS:附件为制作好的FreeBSD7.2的启动文件
                

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/2389/showart_2049869.html


++++++++++++++++++++++++++++++++++++++++++++++++++++++


目标
在已有一台运行 
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-CURRENT 今年一月的快照,8.0-CURRENT-200801-amd64-disc1.iso)。
S 上使用的 FreeBSD 是 7.0-BETA2-i386。
网络设置
假设 S 的 IP 地址为 192.168.0.1,子网掩码为 255.255.255.0。
准备工作
允许 tftpd 运行
默认情况下,inetd 里面的 tftpd 是不会运行的。在 inetd.conf 中找到 tftpd 所对应的一行,去掉行首的#,保存。注意,去除注释的这行应该是使用 udp 而不是 udp6。
配置 nfsserver
echo "/mnt -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        "/mnt";
}
这里是整个 PXE 安装最重要的部分之一,能否正常进行 PXE 安装关键就在这里。这里面最关键的几个选项是 next-server,filename 和 root-path。
要理解这些选项的作用,首先要理解 PXE 工作的流程。按照 FreeBSD PXE 引导的过程,我们将其分成三个阶段。
第一阶段主要是 D 上 PXE 的 firmware 和 S 上 dhcpd 协商的过程。在这里,要商定 D 的 IP 地址,并且确定下一步 PXE 要加载的
文件
,及其位置。
第二阶段是 D 加载上一阶段商定好的文件。对于 FreeBSD 来说,主要就是 pxeboot(8),一个 PXE 的 bootloader。
第三阶段是根据 pxeboot(8) 的指示加载 loader(8) 和 
kernel

在这里,我们可以看到 D 要从网络加载两次文件,一次是 pxeboot(8),另外一次是 loader(8) 和 kernel。这两次加载文件的位置就是由上面的三个选项来确定的。下面我们逐一分析这几个语句的作用。
next-server 语句主要控制了整个 PXE 引导中两次加载的文件所在的服务器的地址。pxeboot(8) 是通过 tftp 从 S 传递到 D 的,所以 next-server 第一个作用就是指定一个 tftp server 的地址。在第三阶段,要加载 loader(8) 和 kernel,这个加载过程是通过 nfs 完成的。next-server 同时也指定了 nfs server 的地址。值得注意的是,有一些文档说第一阶段确定的 PXE 在下一阶段要加载的文件(也就是 pxeboot(8))所在的服务器地址是通过 server-identifier 给定的,但是对于 isc-dhcp3-server 来说,这一点并不成立,而恰恰是 next-server 决定了 pxeboot(8) 所在的服务器的地址(在 dhcpd.conf(5) 里面已经明确指出了这一点)。
filename 指定的是 pxeboot(8) 在 tftp 传输过程中的名字。由于 tftpd 将在 inetd 中来使用,根据 inetd.conf 中给 tftpd 传递的选项,tftpd 
启动
的时候会进行 chroot,于是 filename 的地址是要相对于其 chroot 之后的根路径来说的。默认情况下,tftpd 会 chroot 到 /tftpboot,我们要在 /tftpboot 中放入 pxeboot(8) 这个文件。由于相对 /tftpboot 作为根路径来说,pxeboot(8) 的位置是 /pxeboot,所以我们直接填入 /pxeboot 便可。
root-path 这个选项指定的是第三阶段加载 loader(8) 和 kernel 在 nfs 的根路径的位置(也就是包含了 boot 目录的位置)。因为我们导出的是 /mnt,所以这里填 /mnt。
正式安装
1、为了避免 S 上的 dhcpd 影响网络中其他机器,也为了避免 D 受到网络上其他机器的影响,用直连网线将 S 和 D 连接起来。
2、挂载准备好的ISO镜像。使用 mdconfig 将 FreeBSD 的ISO文件连接成为一个 vnode 类型的
内存
盘:
mdconfig -atvnode -f 8.0-CURRENT-200801-amd64-disc1.iso
挂载这个 md 节点(假设为 /dev/md0)到 /mnt:
mount_cd9660 /dev/md0 /mnt
3、把 pxeboot(8) 放到 /tftpboot:
cp /mnt/boot/pxeboot /tftpboot
4、在 S 上启动 tftpd, dhcpd 和 nfsd:
/etc/rc.d/inetd forcestart
/etc/rc.d/nfsd forcestart
/usr/local/etc/rc.d/isc-dhcpd forcestart
5、由于我们已经使用直连网线将 S 和 D 连接,假设 S 上没有配置 BIND 服务,也没有额外的到 Internet 的网络连接,那么需要禁止 S 上的
DNS
解析。可以修改 /etc/resolv.conf,将其中所有以 nameserver 开头的行注释掉。否则 mountd(因为 nfsd 依赖这个 daemon,所以 mountd 也会随 nfsd 启动而启动)会去查 DNS,而有可能导致最终 PXE 启动连不上 nfs,不能加载 kernel 而超时失败。
6、在 D 的 BIOS 中设置为 PXE 引导,重新启动计算机。
7、D 此时已经启动,并通过 PXE,加载了 loader。此时需要选择 loader 启动选项的第 6 项,进入 loader prompt。输入以下命令:
set vfs.root.mountfrom="ufs:/dev/md0c"
boot
第一行保证我们可以启动到正确的安装程序,第二行提示系统继续执行启动的各个步骤。
8、此时应该正常进入安装程序。到选择安装介质之前都按照一般的安装步骤。在选择安装介质时选择 nfs,然后输入 S 的 IP 地址,以及导出的路径,例如 192.168.0.1:/mnt。确认后,系统提示要设置网卡,在这里按照系统提示,使用 dhcp,保证 D 与 S 在同一个网络中。主机名和域名随意,DNS 以及网关可以暂时不填。后续步骤与从光盘安装一致。
9、最终退出安装程序,重新启动系统。并修改 D 的 BIOS 设置,禁止网络启动。
10、安装全部完成,可以开始享用 FreeBSD 了。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4206/showart_1385744.html