前一篇 https://benjr.tw/95092 是根據一般 Linux (透過 syslinux + bootonly.iso) 的 PXE 的方式來安裝 FreeBSD ,但是在 FreeBSD 9 , 10 之後的版本會遇到 bootonly.iso 透過 PXE 開機會一定會去讀取光碟 這個問題,解決方式是用修改過的 bootonly.iso – http://mfsbsd.vx.sk/
這次找了另外一個解決方案,透過 FreeBSD 提供的 PXE 前導程式 pxeboot,環境如下:
這次的 PXE Server 是裝在 Ubuntu 14.04 Desktop 的版本 上, 所需套件如下:
遠端連線 所需套件
- SSH 服務 套件名稱 openssh-server
PXE 所需套件
- tftp 服務 套件名稱 tftpd-hpa
- DHCP 服務 套件名稱 isc-dhcp-server
安裝分享目錄 所需套件
- NFS 服務 套件名稱 nfs-kernel-server 與 nfs-common
- FTP 服務 套件名稱 vsftpd
先來了解 下 FreeBSD 提供的 PXE 前導程式 pxeboot 的 開機流程
- PXE Client 發出 DHCPDISCOVER broadcasts 封包.
- DHCP server 回應給 Client IP address, next-server, filename, 以及 root-path 等相關的資訊.
- PXE client 有了 DHCP 給的相關訊息後,會向 TFTP 發出傳送 pxeboot 檔案請求 (依據 next-server, filename 的設定).
- TFTP server 傳送給 PXE Client pxeboot 檔案.
- 接下來 PXE client 會執行 pxeboot 這個前導程式,他會依據 root-path 去掛載 NFS 並找到 kernel 去開機,接下來就由 Kernel 去執行開機的步驟.
設定方式則參考了這兩個網站內容的說明.
- https://www.chtaube.eu/kb/freebsd/pxe_boot_server
- http://www.freebsdwiki.net/index.php/Installing_FreeBSD_with_netboot
因為要 PXE boot 所以所需的光碟不是一般的安裝光碟,先到 FreeBSD 官方網站 https://www.freebsd.org/where.html 找到 bootonly 的 iso 檔案,這 bootonly.iso 光碟,只能開機,可以當 LiveCD 如果要安裝需要額外的安裝檔案,所以很適合用於 PXE 開機來使用.
DHCP
root@benjr:~# cat /etc/dhcp/dhcpd.conf default-lease-time 6000; max-lease-time 72000; option domain-name-servers 168.95.1.1; ddns-update-style none; ignore client-updates; allow booting; allow bootp; subnet 172.16.0.0 netmask 255.255.255.0 { range 172.16.0.10 172.16.0.20; #option broadcast-address 172.16.0.255; option routers 172.16.0.1; option subnet-mask 255.255.255.0; next-server 172.16.0.1; filename "pxeboot"; option root-path "/var/lib/tftpboot/FreeBSD_10.3"; }
最重要就是這三項的宣告
- next-server 172.16.0.1;
- filename “pxeboot”;
這個檔案在 FreeBSD 光碟 /boot/pxeboot 可以找到. - option root-path “/var/lib/tftpboot/FreeBSD_10.3”;
TFTP
root@benjr:~# cat /etc/default/tftpd-hpa # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS="[::]:69" TFTP_OPTIONS="--secure"
NFS
root@benjr:~# cat /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) /var/ftp/FreeBSD_10.3 *(ro,sync,no_root_squash)
FreeBSD Boot Loader
root@benjr:~# vi /var/ftp/FreeBSD_10.3/boot/loader.conf vfs.mountroot.timeout="10" vfs.root.mountfrom="ufs:/dev/md0"
/etc/rc.conf 加入 root_rw_mount=”NO”
root@benjr:~# vi /var/ftp/FreeBSD_10.3/etc/rc.conf sendmail.enable="NONE" hostid_enabled="NO" root_rw_mount="NO"
修改 /var/ftp/FreeBSD_10.3/etc/fastb
root@benjr:~# vi /var/ftp/FreeBSD_10.3/etc/fastb # Device Mountpoint FSType Options Dump Pass 172.16.0.1:/var/ftp/FreeBSD_10.3 / nfs ro 0 0
bootonly.iso & DVD ,與其它安裝所需檔案
接下來要把 FreeBSD 10.3 bootonly.iso 光碟內容要複製到 /var/ftp/FreeBSD_10.3 目錄下.
root@benjr:~# mkdir /var/ftp/FreeBSD_10.3 root@benjr:~# mount -o loop /home/ben/FreeBSD-10.3-RELEASE-amd64-bootonly.iso /media/ben/ root@benjr:~# cp -ar /media/ben/* /var/ftp/FreeBSD_10.3/
最後是將 FreeBSD DVD 光碟內容複製到 FTP 上面.
root@benjr:~# mkdir /var/ftp/FreeBSD10.3-64-DVD root@benjr:~# mount -o loop /home/ben/FreeBSD-10.3-RELEASE-amd64-DVD1.iso /media/ root@benjr:~# cp -ar /media/* /var/ftp/FreeBSD10.3-64-DVD
下面這幾個檔案透過 PXE 安裝時需要存在,但不存在 DVD 安裝光碟中,所以需要到 FreeBSD 的 FTP (ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/10.3-RELEASE/) 去下載這些檔案 (base.txz , doc.txz , games.txz , kernel.txz , lib32.txz , ports.txz , src.txz ) ,再放到 /var/ftp/FreeBSD10.3-64-DVD 目錄裡即可.
[ ] doc Additional documentation [*] games Games(Fortune, etc.) [*] lib32 32-bit compatibility libraries [*] ports Ports tree [ ] src system source code
如在安裝時遇到錯誤可以參考 FreeBSD Pxeboot 常見問題 https://benjr.tw/95239
2 thoughts on “FreeBSD 9,10 Pxeboot & install”