iPXE部署Ubuntu无盘系统
放假回家,准备打开我那陈旧的HP2000笔记本,结果发现硬盘咔咔咔响,系统也是卡在加载界面,寻思着硬盘故障了,重启几次都不行。于是拆开硬盘修理。可就在拧紧磁头螺丝的时候,一不小心,用力过猛,“咔嚓”一声,那固定磁头螺丝的螺柱,被我拧断了。哦豁~这下好了,硬盘坏了,还没有备用的。那么干脆搭建一个无盘系统吧?
0 PXE简介
PXE(Preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8, linux系列系统等。
来源:百度百科
1 网络环境配置
一般电脑网卡自带的PXE固件,只支持TFTP模式启动。PXE固件初始化时,将从DHCP服务器获取一些options信息,以确定PXE TFTP服务器、启动文件名。这要求专用的DHCP服务。可是!目前我们用的路由器不支持那么多的自定义DHCP设置!于是就需要另外搭建DHCP服务器。不过有一个小软件已经帮我们解决了这个问题。——Tiny PXE Server
运行Tiny PXE Server,设置网络参数,然后点击右上角的运行即可。
2 iPXE配置
将启动文件改为ipxe.efi(对于EFI启动的电脑),如果用传统启动模式,则改为ipxe.pxe文件。这些文件都默认打包好了,放在下载的压缩文件夹里。
打开电脑,启用PXE/网络启动,看看有没有成功启动到iPXE
注意,从iPXE官网下载的ipxe.efi或者Tiny PXE Server自带的ipxe.efi都不支持NFS启动。所以需要在这个网站在线编译一个ipxe.efi:
https://rom-o-matic.eu/
选择Advanced,Output Format按需选择(EFI或PXE)
勾选DOWNLOAD_PROTO_NFS
3 服务器配置
既然无盘系统是基于文件共享而实现的,那么我们服务端需要安装文件共享服务端。此处我们选择文件传输较快的NFS。
具体安装NFS服务端方法可上网查找。
NFS服务端配置:
1 2 3 | 编辑/etc/exports 添加共享: /path/to/ubuntu/rootfs *(rw,sync,crossmnt,no_root_squash) |
(更新:使用async效果更好,也挺稳定)
4 制作无盘系统
4.1 使用debootstrap 制作基本系统
执行以下命令:
1 | sudo debootstrap --arch=amd64 bionic '/path/to/ubuntu-18.04/rootfs' http://mirrors.tuna.tsinghua.edu.cn/ubuntu |
命令执行完成后,命令
图:文件列表
4.2 chroot 进入基本系统
执行
5 无盘系统基本配置
在chroot状态下,即可以对无盘系统进行配置啦
注意:确保以下命令都在chroot环境下运行,否则你配置的不是无盘系统而是现在运行的系统!
5.1 修改软件源
基本系统默认只包含一个main软件源,日常使用的话还需要添加其他软件源如universe等。编辑/etc/apt/sources.list添加软件源:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | nano /etc/apt/sources.list =================sources.list================== deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-update main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-update universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-update multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security main restricted deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security multiverse =============================================== (Ctrl-O) (Enter) (Ctrl-X) apt update |
如果提示没有找到nano命令,也可以用
5.2 安装内核
目前我们的无盘系统是通过chroot运行在当前操作系统内核的,因此我们还需要构建自己的内核,提供给网络启动
1 2 | apt dist-upgrade apt install linux-image-generic |
安装过程中可能弹出Grub引导安装错误的消息,此时可以忽略,因为我们不需要使用Grub引导启动。
Grub无法安装,Yes即可
5.3 修改initramfs 配置
此时我们需要修改initramfs配置文件,配置其使用nfs方式加载根文件系统
1 | nano /etc/initramfs-tools/initramfs.conf |
配置
然后执行更新initramfs命令:
1 | update-initramfs -u |
5.4 修改fstab 配置
fstab是linux系统加载时自动挂载文件系统的配置文件。配置此文件以自动挂载根文件系统。
1 2 3 4 5 6 | nano /etc/fstab ====================== 修改为以下配置: proc /proc proc defaults 0 0 192.168.1.123:/path/to/ubuntu/rootfs / nfs defaults,rw 0 0 写入,保存,退出。 |
5.5 修改hostname
hostname即相当于计算机名。打开这个文件你会发现它已经默认配置机器名为现在运行的系统(工作系统)的计算机名。为避免困惑,建议将其更改为其他名称。
1 | nano /etc/hostname |
5.6 修改/boot权限
无盘系统的linux内核文件放在/boot文件夹,其中内核文件(vmlinuz-xxx)的权限默认为700,即非root用户不可读。如果将其配置到pxe启动,可能会因为权限不足无法读取而导致无法启动。因此建议将权限改为755
1 | chmod 755 /boot -R |
5.7 配置root密码
如果不配置root密码,可能导致无法进入系统,因为一般不允许空密码登录
1 | passwd |
5.7 其他配置
设置时区:
1 | tzselect |
安装桌面环境
1 | apt install ubuntu-desktop |
添加用户
1 2 3 | groupadd admin useradd -g admin -m usernamelalala passwd usernamelalala |
后续还可以进行本地化配置等操作,这里就不再赘述了
6 配置iPXE启动菜单
可以参照Tiny PXE Server自带的menu.ipxe配置文件来自定义自己需要的启动目录。这里我就贴出来我的关于该Ubuntu无盘系统的配置:
1 2 3 4 5 6 7 | :Ubuntu_18_04_02 set server_ip 192.168.1.123 set nfs_path /path/to/ubuntu/rootfs kernel nfs://${server_ip}${nfs_path}/vmlinuz || read void initrd nfs://${server_ip}${nfs_path}/initrd.img || read void imgargs vmlinuz initrd=initrd.img root=/dev/nfs netboot=nfs nfsroot=${server_ip}:${nfs_path} ip=dhcp splash quiet -- || read void boot || read void |
7 完成
大功告成!快开机试试吧~
图:欢迎界面
总结
其实无盘系统的搭建,就是换一种方式安装系统而已。大家还可以多手动安装Archlinux来体会一下装系统的具体步骤,这样可以有助于学习Linux~