当前位置: 首页 > 科技观察

搭建基于UbuntuServer的PXE自动安装环境实用指南

时间:2023-03-20 13:29:59 科技观察

Ubuntu在不断发展。从20.04开始,Ubuntu决定更新实时服务器安装程序。只有Subiquity才能完全完成操作系统和附加程序的自动安装。之前用的kickstart和debian-installer都不是Ubuntu自己的技术,用起来不是很方便。同时,虽然PXE技术已经出现很久了,但是整个安装过程并不是特别顺利。随着Ubuntu升级到20.04,使用cloud-init安装配置实现了Subiquity参数的自动填充,整个过程变得优雅了一点,让我感觉舒服多了。非常有兴趣尝试使用PXE安装Ubuntu20.04服务器。在这篇文章中,我想说的是在Ubuntu20.04Server上搭建自动安装Ubuntu20.04Server的部署环境。其主要内容有两部分:使用PXE从网络自动加载安装程序并启动安装。利用Ubuntu的自动安装功能,自动加载cloud-init安装配置,完成操作系统的自动选择。第一部分应该对所有操作系统都一样,第二部分与Ubuntu20.04版本密切相关,其他操作系统需要考虑其他方法。PXE安装过程PXE(Pre-bootExecutionEnvironment)的实现依赖于网卡,只有支持PXE客户端的网卡才能实现网络自动安装。这种网卡实现了DHCP客户端和TFTP客户端,在BIOS的引导下,通过DHCP协议自动分配IP地址,通过TFTP获取最小内核,然后在最小内核中通过HTTP协议或NFS协议获取Ubuntu安装版环境。之后是Ubuntu20.04安装的最小内核引导。下图是详细的安装过程。上图有几个前提条件:网卡支持PXE,今年新出的网卡几乎都支持。同时还要配置BIOS的启动项。请做你自己的研究。UEFI启动会请求bootx64.efi,如果是传统启动方式Legacy),那么PXE客户端会请求pxelinux.0。您可以使用nfsboot方法。该过程采用下载安装ISO镜像的方式。安装必要的服务器软件安装DHCP、TFTP服务器。dnsmasq同时实现了DHCP、TFTP和DNS服务器。sudoapt-getinstalldnsmasq安装HTTP服务器。有许多HTTP服务器。您可以使用自己熟悉的服务器,例如Nginx。这里我们使用apache2。sudoapt-getinstallapache2准备启动文件,下载UEFI启动文件:shim.signed,grub-efi-amd64-signedapt-getdownloadshim.signedapt-getdownloadgrub-efi-amd64-signed直接下载Ubuntu20.04ServerISO镜像到官网下载,我下载的是ubuntu-20.04.2-live-server-amd64.iso,需要注意的是只有Live版才能支持subiquity。创建TFTP文件夹TFTP文件夹是TFTP服务的根目录,PXE启动过程中下载的文件都在这个目录下:tftp├──boot│└──live-server│├──initrd│└──vmlinuz...cfg自己创建其他文件。这五个文件是Ubuntu安装包需要的,但是目录结构是自己创建的。您可以根据自己的喜好修改创建的目录。在/home/mine(可根据实际情况修改)目录下创建tftp。目录:mkdir/home/mine/tftpmkdir/home/mine/tftp/grubmkdir/home/mine/tftp/bootmkdir/home/mine/tftp/boot/live-server获取boot文件在安装包下载目录创建shim文件夹解压shim安装包到shim文件夹:dpkg-x<%刚刚下载的shim.signed安装包名%>shim解压grub安装包到grub文件夹,复制boot文件到tftp目录cp./sgrub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed/home/mine/tftp/grubx64.eficp./shim/usr/lib/shim/shimx64.efi.signed/home/mine/tftp/grub/bootx64.efi获取内核镜像文件,挂载下载目录下的iso文件sudomountubuntu-20.04.2.0-desktop-amd64.iso/media系统会提示只读,不影响使用。mount:/media:警告:设备写保护,只读安装。复制内核镜像文件cp/media/casper/initrd/home/mine/tftp/boot/live-servercp/media/casper/vmlinuz/home/mine/tftp/boot/live-server复制grub文件grub.cfg为参考,内容将完全修改。cp/media/grub/font.pf2/home/mine/tftp/grubcp/media/grub/grub.cfg/home/mine/tftp/grub配置dnsmasq关键配置如下:配置DHCP地址段配置启动文件目录配置tftp根目录配置日志路径配置服务网卡,多网卡机器需要注意#配置外网DNS服务器地址server=114.114.114.144#指定服务网卡interface=enp2s0,lo#绑定端口bind-interfaces#设置DHCP分配IP结束范围,地址掩码,IP地址有效时间dhcp-range=192.168.1.100,192.168.1.150,255.255.255.0,12h#指定网关地址#与安装无关,应该不是configureddhcp-option=3,192.168.1.9#指定DNS服务器地址#与安装无关,不要配置dhcp-option=6,114.114.114.114#设置bootloader相对于tftp根目录的路径dhcp-match=set:efi-x86_64,option:client-arch,7dhcp-boot=tag:efi-x86_64,grub/bootx64.efi#开启tftp服务enable-tftp#设置tftp根路径tftp-root=/home/mine/tftp#设置日志路径log-facility=/var/log/dnsmasq.log修改配置之后重启dnsmasq服务即可生效。创建HTTP文件夹Apache2默认服务根目录为/var/www/html,在其下创建目录:html/├──autoinstall│├──meta-data│└──user-data├──index.html└──iso└──ubuntu-20.04.2-live-server-amd64.iso说明:autoinstall目录存放参数自动配置文件,user-data和meta-data是cloud-init需要的文件名。iso目录存放操作系统镜像文件创建目录mkdir/var/www/html/autoinstallmkdir/var/www/html/iso复制ISO文件到下载目录复制ISO文件:cpubuntu-20.04.2-live-server-amd64.iso/var/www/html/iso创建参数自动配置文件先创建一个空文件,meta-data不需要修改,user-data后面会详细说明配置。touch/var/www/html/autoinstall/user-datatouch/var/www/html/autoinstall/meta-data配置grub.cfgifloadfont/grub/font.pf2;然后设置gfxmode=autoinsmodefi_gopinsmodefi_ugainsmodgfxtermterminal_outputgfxtermfisetmenu_color_normal=white/blacksetmenu_color_highlight=black/light-graysettimeout=5menuentry"Ubuntuserver20.04autoinstall"{setgfxpayload=keeplinux/boot/live-server/vmlinuzroot=/dev/ram0ramdisk_size=1500000ip=dhcpurl='http://192.168.1.9/iso/ubuntu-20.04.2-live-server-amd64.iso'autoinstallds=nocloud-net\;s=http://192.168.1.9/autoinstall/---initrd/boot/live-server/initrd}menuentry是之前的配置样式,也可以删掉。在菜单项“Ubuntuserver20.04autoinstall”中重点配置:指定镜像文件相对于tftp根目录的路径/boot/live-server/initrdroot=/dev/ram0ramdisk_size=1500000以指定挂载内核镜像的空间,是否可以删除不确定ip=dhcp指定内核镜像挂载并使用DHCP获取IP地址url=指定ISO文件的网络存储路径autoinstallds=nocloud-net\;s=http://192.168.1.9/autoinstall/---该配置表示自动填写参数,表示配置文件所在路径。坑网很多文章都是这样配置的ds=nocloud-net;s=http://192.168。1.9/autoinstall/,试了很多次,网上都没有找到自动安装的。由于UEFI开始使用grub,它识别;作为一个特殊字符,所以在;之前添加\逃离。配置user-data#cloud-configautoinstall:version:1#修改apt服务地址apt:primary:-arches:[default]uri:https://mirrors.tuna.tsinghua.edu.cn/ubuntuuser-data:#configure时区timezone:Asia/Shanghai#禁用root账户disable_root:true#配置用户身份:hostname:ubuntu-serverpassword:"yours"username:ubuntu#配置键盘keyboard:{layout:us,variant:''}locale:en_US.UTF-8#配置代理proxy:http://192.168.1.112:3128#默认安装sshserverssh:install-server:true#指定安装的包packages:-net-tools-python3-pip#配置磁盘分区存储:grub:reorder_uefi:假配置:-{ptable:gpt,路径:/dev/sda,擦除:超级块递归,保留:false,名称:'',grub_device:false,类型:磁盘,id:磁盘-sda}-{device:disk-sda,size:536870912,wipe:superblock,flag:boot,number:1,preserve:false,grub_device:true,type:partition,id:partition-0}-{fstype:fat32,volume:分区-0,preserve:false,type:format,id:format-0}-{device:disk-sda,size:-1,wipe:superblock,flag:'',number:2,preserve:false,类型:分区,id:partition-1}-{fstype:ext4,volume:partition-1,preserve:false,type:format,id:format-1}-{device:format-1,path:/,type:mount,id:mount-1}-{device:format-0,path:/boot/efi,type:mount,id:mount-0}说明:密码??需要加密,可以先用工具加密自己的密码再填写代理不是必须的配置,涉及到网络拓扑的磁盘分区配置要注意,如果配置不正确,自动安装会失败,并提示死机;本次配置的总体思路是先格式化disk-sda,然后划分/dev/sda1,/dev/sda2,然后分别挂载/和/boot/efi目录。安装过程日志在/var/log/installer/中。如果安装失败,可以通过nc等工具实时发送到网络拓扑中。我已经在计算机上设置了DHCP和TFTP。,HTTP三个服务我在代理机上设置了squid,由于HTTP代理目标机不能上网,三台机器都配置了同一个局域网内的静态IP。20.04只需配置netplan。参考如下配置修改文件/etc/netplan/00-installer-config.yaml。修改完成后,执行netplanapply配置生效#这是'subiquity'network:ethernets:enp2s0:addresses:-192.168.1.9/24gateway4:192.168.1.1nameservers:addresses:-114.114.114.114search:-114.114.114.114,没有这篇文章,我会摸索更长时间。这个askubuntu的讨论解决了小崔的坑user-data磁盘分区配置