为了获得更多使用FreeBSD的经验,我决定制作一个基于pxe的FreeBSD 10.1的无人值守安装。
我的目标是建立一些类似Debian/Ubuntu + pre播种或Redhat/CentOS + kickstart的东西。
获得一个基于pxe的无人值守的FreeBSD 10.1安装并不容易,而且我无法使用bsdinstall自动化基于zfs的安装。
我希望类似netboot安装的东西
下面,我记录了仅使用DHCP、TFTP而不需要NFS来完成FreeBSD的基本安装。
所有步骤概述:
- 有PXE启动选项的工作DHCP
- 你有TFTP服务器吗
- 自定义pxelinux引导菜单
- 手动安装FreeBSD盒,或使用现有的
- 下载和安装mfsbsd在FreeBSD系统上
- 在FreeBSD系统上下载一个FreeBSD发行版iso镜像
- 配置和自定义你的FreeBSD PXE启动镜像设置
- 构建PXE启动映像并将其复制到TFTP服务器
- PXE启动系统并启动FreeBSD映像
配置DHCP服务器+ TFTP服务器
请看一下另一篇文章我写了关于设置PXE引导的文章。
配置PXE启动菜单
添加这些行到你的PXE菜单:
LABEL FreeBSD10 kernel memdisk appinitrd =BSD/FreeBSD/10.1/mfsbsd-10.1-RC3-amd64.使用实例Img硬盘raw
设置或访问FreeBSD主机
您需要设置或获得访问FreeBSD系统的权限,因为mfsbsd工具只能在FreeBSD上工作。您将使用该系统生成一个FreeBSD PXE启动映像。
安装mfsbsd
首先我们下载mfsbsd。
获取http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz tar XZF mfsbsd-2.1.tar.gz
然后我们得到一个FreeBSD ISO:
获取http://ftp.freebsd.org/pub/freebsd/releases/iso images/10.1/freebsd - 10.1 -释放- amd64 disc1.iso
挂载ISO:
mdconfig -a -t vnode -f /root/FreeBSD-10.1-RELEASE-amd64-disc1.使用实例Iso mount_cd9660 /dev/md0 /cdrom/
设置自动加载
进入mfsbsd-2.1目录。将以下内容放在conf/rc文件中。本地文件。
获取http:///pxe/installerconfig -o /etc/installerconfig tail -n 7 /etc/rc. txtLocal > /tmp/start.sh chmod +x /tmp/start.sh /tmp/start.sh exit 0 #!/bin/csh setenv分发txz基地。txz" setenv BSDINSTALL_DISTDIR /tmp setenv BSDINSTALL_DISTSITE ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.1-RELEASE bsdinstall distfetch bsdinstall script /etc/installerconfig . txt
正如你所看到的,在一个脚本中有一个脚本是由rc.local单独执行的。这有点难看,但确实管用。
安装FreeBSD无人值守安装
'installerconfig'脚本是bsdinstall工具使用的一种特殊格式的脚本,用于自动化安装。顶部用于控制无人值守安装过程中使用的变量。底部是在新系统上安装chroot后执行的脚本。
把这个放到'installerconfig'中
分区= = da0分布”的内核。txz基地。txz" BSDINSTALL_DISTDIR=/tmp BSDINSTALL_DISTSITE=ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.1-RELEASE #!/bin/sh echo "安装完成,运行在主机系统" echo "hostname=\"FreeBSD\"" >> /etc/rc.conf echo "autoboot_delay=\"5\"" >> /boot/loader.conf echo "sshd_enable=YES" >> /etc/rc.conf echo "Setup done" >> /tmp/log.txt echo "Setup done."下电
如您所见,安装后脚本启用了SSH,设置了主机名并减少了自动引导延迟。
请注意,我遇到了一个问题,bsdinstall程序不会解释installerconfig脚本中设置的选项。这就是为什么我在rc中用“setenv”导出它们。本地脚本。
通过Debian预播种或Redhat启动,您可以在web服务器上托管预播种或启动文件。更改基于pxe的安装只是在web服务器上编辑preseed或kickstart文件的问题。
因为每次要更新无人参与的安装时都必须生成一个新映像并不有趣,所以建议将installerconfig文件托管在web服务器上,就像它是一个预种子文件或kickstart文件一样。
这使您不必每次都重新生成PXE-boot映像文件。
您仍然可以将安装程序配置放在映像本身中。如果你想要一个包含bsdinstall指令的固定'installerconfig'文件,把这个文件也放在'conf'目录下。接下来,编辑Makefile。搜索这个字符串:
.for文件在rc.conf ttys
对我来说,是第315行。改为:
.for文件在rc.conf ttys installerconfig
构建PXE引导映像
现在一切都配置好了,我们可以使用mfsbsd生成引导映像。运行“使”。然后当它失败并出现以下错误时:
正在创建图像文件…/root/mfsbsd-2.1/tmp/mnt: write failed, filesystem is full ***错误码1停止。Make:停止在/root/mfsbsd-2.1
只需再次运行“make”。根据我的经验,make第二次就会一直起作用。我不知道为什么会这样。
整个过程的最终结果是一个类似“mfsbsd-se-10.1-RC3-amd64.img”的文件。
您可以将此映像复制到TFTP服务器上的适当文件夹。在我的例子中,它将是:
/电脑/ tftp / BSD / FreeBSD / 10.1 / mfsbsd - 10.1 - rc3 amd64.img
测试PXE安装
从PXE启动测试机器并启动自定义生成的映像。
最后的话
创建一个基于pxe的无人值守的Fre欧宝体育直播官网eBSD安装非常困难,这让我有点不高兴。在我看来,bsdinstall安装软件有bug。然而,可能只有我:我误解了它是如何运作的。但是,我似乎找不到任何关于如何正确使用bsdinstall系统进行无人值机安装的文档。
如果有人有关于在ZFS支持下“正确”实现无人值守的bsdinstall脚本的建议或想法,我洗耳恭听。
这是我试图使用的方法来安装root-on-zfs:
ZFSBOOT_POOL_NAME=TEST_ROOT ZFSBOOT_VDEV_TYPE=mirror ZFSBOOT_POOL_SIZE=10g ZFSBOOT_DISKS="da0 da1" ZFSBOOT_SWAP_SIZE=2g ZFSBOOT_CONFIRM_LAYOUT=1
安装程序将永远无法识别第二块磁盘,脚本将卡住。
我知道mfsbsd有一个选项可以使用自定义root-on-zfs脚本,但我想使用“官方”FreeBSD工具。