搭建基于UbuntuServer的PXE自动安装环境的实用指南
Ubuntu 在急速变异,从 20.04 已经开始,Ubuntu 下定决心预览动态伺服器加装流程,再加 Subiquity 就能全然顺利完成作业系统及附带流程的手动加装。从前用的 kickstart、debian-installer 都并非 Ubuntu 他家控制技术,用出也并非很方便快捷。
与此同时,PXE 控制技术尽管出好久了,但整座加装操作过程还并非不光通畅,随著 Ubuntu 升级换代到 20.04,采用 cloud-init 加装新颖性与此同时实现 Subiquity 模块的手动核对,整座操作过程显得少许典雅出,让我有非常大浓厚兴趣试著采用 PXE 加装 Ubuntu 20.04 Server。
责任编辑,我想讲的是在 Ubuntu 20.04 Server 上构筑两套手动加装 Ubuntu 20.04 Server 的布署自然环境,其主要就文本有两部份:
- 采用 PXE 手动从互联网读取加装流程,发动加装。
- 采用 Ubuntu 的手动加装机能,手动读取 cloud-init 加装新颖性,顺利完成作业系统的手动优先选择。
第三部份大部份作业系统如果都是那样的,第三部份和 Ubuntu 20.04 版密切有关,其它的作业系统须要考量其它方式。
PXE 加装业务流程
PXE(预开启继续执行自然环境Pre-boot Execution Environment)的与此同时实现倚赖存储设备,多于全力支持 PXE 应用流程的存储设备就可以与此同时实现互联网手动加装。此种存储设备与此同时实现了 DHCP 应用流程和 TFTP 应用流程,在 BIOS 的鼓励下透过 DHCP 协定手动重新分配 IP 门牌号,透过 TFTP 以获取最轻Mach,接着在最轻Mach自然环境下透过 HTTP 协定或 NFS 协定以获取 Ubuntu 加装版。后最轻Mach鼓励展开 Ubuntu 20.04 的加装。
右图是详尽的加装业务流程。
左图有两个大前提:
- 存储设备全力支持 PXE,今年新出的存储设备基本都全力支持,与此同时 BIOS 的开启项也要新颖性,请大家自行研究。
- UEFI 开启才会请求
bootx64.efi
,如果是传统开启模式Legacy),那么 PXE 应用流程会请求pxelinux.0
。 - 可以采用 nfsboot 方式,这个业务流程采用的是 ISO 镜像下载再加装的方式。
加装必须的服务端软件
- 加装 DHCP、TFTP 伺服器。
dnsmasq
与此同时与此同时实现了 DHCP、TFTP、DNS 三种伺服器sudo apt-get install dnsmasq
- 加装 HTTP 伺服器
HTTP 伺服器有很多,大家可以采用自己的熟悉的伺服器如 Nginx,这里采用的是apache2
sudo apt-get install apache2
准备开启文件
- 下载 UEFI 鼓励文件:
shim.signed
、grub-efi-amd64-signed
apt-get download shim.signedapt-get download grub-efi-amd64-signed
- 下载 Ubuntu 20.04 Server ISO 镜像
直接去官网下载,我下载的是
ubuntu-20.04.2-live-server-amd64.iso
,须要注意的是多于 Live 版就可以全力支持 subiquity。
创建 TFTP 文件夹
TFTP 文件夹是 TFTP 服务的根目录,PXE 开启操作过程中下载的文件都存在在该目录中:
tftp├──boot│ └──live-server│ ├──initrd│ └──vmlinuz├──grub│ ├──bootx64.efi│ ├──font.pf2│ └──grub.cfg└──grubx64.efi
说明:
bootx64.efi
、grubx64.efi
鼓励流程来自shim.signed
加装包grub.cfg
自行创建- 其它文件来自 Ubuntu 加装包
- 这五个文件是须要的,但目录结构是自行创建的,大家可以根据自己的喜好修改
创建目录
在/home/mine
(可根据实际情况修改)目录下创建tftp
目录:
mkdir/home/mine/tftpmkdir/home/mine/tftp/grubmkdir/home/mine/tftp/bootmkdir/home/mine/tftp/boot/live-server
以获取鼓励文件
- 在加装包下载目录创建一个
shim
文件夹 - 解压
shim
加装包到shim
文件夹:dpkg -x shim
- 解压 grub 加装包到
grub
文件夹 - 拷贝鼓励文件到
tftp
目录
cp ./sgrub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed/home/mine/tftp/grubx64.efi
cp ./shim/usr/lib/shim/shimx64.efi.signed/home/mine/tftp/grub/bootx64.efi
以获取Mach镜像文件
- 在下载目录挂载 ISO 文件
sudomount ubuntu-20.04.2.0-desktop-amd64.iso /media
系统会提示只读,不影响采用。
mount: /media:WARNING: device write-protected, mounted read-only.
- 拷贝Mach镜像文件
cp/media/casper/initrd /home/mine/tftp/boot/live-server cp /media/casper/vmlinuz /home/mine/tftp/boot/live-server
- 拷贝 grub 文件
grub.cfg
拷贝过来做个参考,文本会被全部修改掉。cp/media/grub/font.pf2 /home/mine/tftp/grub cp /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指定网关门牌号和加装无关,如果可以不新颖性dhcp-option=3,192.168.1.9指定 DNS 伺服器门牌号和加装无关,如果可以不新颖性dhcp-option=6,114.114.114.114设置鼓励流程相对 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/autoinstall
mkdir /var/www/html/iso
拷贝 ISO 文件
到下载目录拷贝 ISO 文件:
cp ubuntu-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.cfg
ifloadfont /grub/font.pf2 ; thensetgfxmode=autoinsmodefi_gopinsmodefi_ugainsmodgfxtermterminal_outputgfxtermfisetmenu_color_normal=white/blacksetmenu_color_highlight=black/light-graysettimeout=5menuentry"Ubuntu server 20.04 autoinstall" {setgfxpayload=keeplinux/boot/live-server/vmlinuz root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://192.168.1.9/iso/ubuntu-20.04.2-live-server-amd64.iso autoinstall ds=nocloud-net\;s=http://192.168.1.9/autoinstall/---initrd/boot/live-server/initrd}
menuentry
之前是新颖性样式,也可以删除,重点关注menuentry "Ubuntu server 20.04 autoinstall"
内的新颖性:
- 指定镜像文件相对于
tftp
根目录的路径/boot/live-server/initrd
root=/dev/ram0 ramdisk_size=1500000
为了指定Mach镜像挂载空间,是否可删除我不确定ip=dhcp
指定Mach镜像挂载后采用 DHCP 以获取 IP 门牌号url=
指定 ISO 文件的互联网存放路径autoinstall ds=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:新颖性时区timezone:Asia/Shanghai去使能 root账号disable_root:true新颖性用户identity:hostname:ubuntu-serverpassword:"yours"username:ubuntu新颖性键盘keyboard:{layout:us,variant:}locale:en_US.UTF-8新颖性代理proxy:http://192.168.1.112:3128默认加装ssh serverssh:install-server:true指定加装的包packages:-net-tools-python3-pip新颖性磁盘分区storage:grub:reorder_uefi:Falseconfig:-{ptable:gpt,path:/dev/sda,wipe:superblock-recursive,preserve:false,name:,grub_device:false,type:disk,id:disk-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:partition-0,preserve:false,type:format,id:format-0}-{device:disk-sda,size:-1,wipe:superblock,flag:,number:2,preserve:false,type:partition,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}
说明:
- 密码须要加密,可以先用工具对自己的密码展开加密后填入
- 代理并非必须的新颖性,与互联网拓扑有关
- 磁盘分区新颖性要注意,新颖性不对会导致手动加装走不下去,提示 crash;这个新颖性的整体思路是先格式化
disk-sda
,接着在disk-sda
下划分/dev/sda1
、/dev/sda2
,接着分别挂载/
、/boot/efi
目录 - 加装操作过程日志在
/var/log/installer/
,如果加装失败可以透过nc
等工具动态发出去
互联网拓扑
- 我在电脑上构筑了 DHCP、TFTP、HTTP 三种服务
- 我在代理机上构筑了 squid,作为 HTTP 代理
- 目标机器不能上网,三台机器在同一个局域网
新颖性静态 IP
在服务机已经开始服务前,须要在提供服务的存储设备上新颖性静态 IP,Ubuntu 20.04 新颖性 netplan 即可,参考以下新颖性修改文件/etc/netplan/00-installer-config.yaml
,修改顺利完成后继续执行netplan apply
新颖性即可生效。
This is the network config written by subiquitynetwork:ethernets:enp2s0:addresses:-192.168.1.9/24gateway4:192.168.1.1nameservers:addresses:-114.114.114.114search:-114.114.114.114
鸣谢
- 文章的基石来自 Grffion,没有这篇文章我会摸索更长时间
- 这篇 askubuntu 的讨论解决了坑
- user-data 磁盘分区新颖性来自 小崔
责任编辑作者梦见山,授权转载。题图来源互联网。
我告诉你msdn版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!