概述
接上文《 Linux配置PXE服务避坑指南 》,上文已经配置好了基础的pxe服务,可以看见pxe引导起来的 boot menu,这里我们接着上文的环境进行ubuntu系统的安装,这里以18.04为例,由于20.04可能变化比较大,后续有必要再出相关说明,这里主要是为了理解pxe这套东西的依赖和启动系统的流程,欢迎各位举一反三,推广到其他系统的引导和安装。
环境及依赖
既然前一篇文章已经介绍了基础信息,pxe的依赖项就不再赘述,主要再加入18.04的ISO镜像,可以去UBUNTU官方网站下载,desktop Live版的镜像。没有其他更多的依赖项。
配置
这里只提供思路,因为大家目录结构可能会很不一样,
1、配置NFS
NFS的安装不赘述,很多地方都有,想办法装好就行,例如我的是archlinux,直接装相关服务后,配置NFS,下面的配置作为参考,选择其中一条来用即可,替换IP为自己共享的的IP段。
/srv/nfs *(rw,sync)
# /srv/nfs 172.16.28.0/24(rw,sync)
完成配置后,直接exportfs和重启nfs服务
exportfs -arv
systemctl restart nfs-server
2、解压光盘镜像文件
a) tftp服务相关
如果根据前文配置,可以看到tftp服务做的动作是加载菜单和内核等,因此,需要配置菜单和把新的内核放进来即可
查看tftp目录下的 pxelinux.cfg/default 相关配置追查到,实际pxe的菜单是在 ubuntu-installer/amd64/boot-screens/txt.cfg 目录里面配置,当然在其他地方也可以。
default install
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
append vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
label cli
menu label ^Command-line install
kernel ubuntu-installer/amd64/linux
append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
通过查看文件内容,可ui看到我们需要两个文件,A, linux内核, 通过 `kernel ubuntu-installer/amd64/linux` 指定,路径可以更改,从tftp的目录开始算;B, initrd内存文件系统
,通过append告知系统 `initrd=ubuntu-installer/amd64/initrd.gz`
其中append的内容哦就是kernel的boot arg,启动后可以通过 cat /proc/cmdline 查看。
因此,基于以上,我们需要吧光盘解压后的 casper/vmlinuz 和 casper/initrd 复制到 tftp 目录,我直接复制到了根目录,其他系统就找到他们的vmlinuz和initrd也可以。
可以看到我后文的kernel直接就 kernel vmlinuz , append下的initrd 也是 initrd=initrd,是因为我放在tftp根目录。因为这两个文件是以tftp的方式加载的。
b) NFS服务相关
NFS服务主要为系统提供根目录,也就是整个光盘镜像(虽然实际没用全)。
挂载好镜像,并把镜像的文件都复制出来,放到 NFS 服务的文件夹,我的NFS服务的文件夹是 /srv/nfs/
解压整个镜像文件到 /srv/nfs/iso_root 即可,完成。
3、菜单的具体配置
菜单抄前面的就可以了,不过有几点需要注意,我们可以看一下解压出来的光盘根目录下 /srv/nfs/iso_root/boot/grub/grub.cfg ,参考这个文件,合并到我们的pxe配置上。
注意的是以下的一点,
很多网上的append内容是 `append initrd=initrd boot=casper splash ip=dhcp netboot=nfs nfsroot=172.16.28.1:/srv/nfs/iso_root/ ---`,我试过这个append能启动到initramfs,NFS也挂载上,但是无法启动,实际这个只是挂载了nfs,并没指定新的根目录,如果不指定根目录,默认根目录是initrd里的根。因此加上 root=/root/cdrom/casper/filesystem.squashfs ,这个文件是整个ubuntu的根文件目录了。
diff --git a/ubuntu-installer/amd64/boot-screens/txt.cfg b/ubuntu-installer/amd64/boot-screens/txt.cfg
index b049dcf..e8f96e0 100644
--- a/ubuntu-installer/amd64/boot-screens/txt.cfg
+++ b/ubuntu-installer/amd64/boot-screens/txt.cfg
@@ -1,10 +1,16 @@
default install
label install
menu label ^Install
- menu default
kernel ubuntu-installer/amd64/linux
append vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
label cli
menu label ^Command-line install
kernel ubuntu-installer/amd64/linux
append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
+
+label try_iso
+ menu label ^Try Ubuntu without installing
+ menu default
+ kernel vmlinuz
+ append initrd=initrd root=/root/cdrom/casper/filesystem.squashfs boot=casper splash ip=dhcp netboot=nfs nfsroot=172.16.28.1:/srv/nfs/iso_root/ ---
+
结语
到这里我这边已经能正常启动到live桌面里面去了,如果不行的小伙伴,欢迎留言讨论。