邳州信息网

标题: 搭建基于 Ubuntu Server 的 PXE 自动安装环境的实用指南 [打印本页]

作者: 3AAA    时间: 2021-8-18 06:53
标题: 搭建基于 Ubuntu Server 的 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 的部署环境,其主要内容有两部分:

第一部分所有操作系统应该都是一样的,第二部分和 Ubuntu 20.04 版本紧密相关,其他的操作系统需要考虑其他方法。

PXE 安装流程


PXE(预启动执行环境Pre-boot Execution Environment)的实现依赖于网卡,只有支持 PXE 客户端的网卡才能实现网络自动安装。这种网卡实现了 DHCP 客户端和 TFTP 客户端,在 BIOS 的引导下通过 DHCP 协议自动分配 IP 地址,通过 TFTP 获取最小内核,然后在最小内核环境下通过 HTTP 协议或 NFS 协议获取 Ubuntu 安装版本。之后最小内核引导进行 Ubuntu 20.04 的安装。

下图是详细的安装流程。



上图有几个前提:


安装必须的服务端软件



准备启动文件



创建 TFTP 文件夹


TFTP 文件夹是 TFTP 服务的根目录,PXE 启动过程中下载的文件都存在在该目录中:
tftp├── boot│   └── live-server│       ├── initrd│       └── vmlinuz├── grub│   ├── bootx64.efi│   ├── font.pf2│   └── grub.cfg└── grubx64.efi
说明:


创建目录


在 /home/mine(可根据实际情况修改)目录下创建tftp目录:
mkdir /home/mine/tftpmkdir /home/mine/tftp/grubmkdir /home/mine/tftp/bootmkdir /home/mine/tftp/boot/live-server

获取引导文件

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

获取内核镜像文件



配置 dnsmasq


关键配置有以下几个:
# 配置外网 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
说明:


创建目录

mkdir /var/www/html/autoinstallmkdir /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

if loadfont /grub/font.pf2 ; then        set gfxmode=auto        insmod efi_gop        insmod efi_uga        insmod gfxterm        terminal_output gfxtermfiset menu_color_normal=white/blackset menu_color_highlight=black/light-grayset timeout=5menuentry "Ubuntu server 20.04 autoinstall" {        set gfxpayload=keep        linux  /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"内的配置:





网上很多文章配置是这么写的 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/ubuntu  user-data:    # 配置时区    timezone: Asia/Shanghai    # 去使能 root账号    disable_root: true  # 配置用户    identity:    hostname: ubuntu-server    password: "yours"    username: ubuntu  # 配置键盘    keyboard: {layout: us, variant: ''}  locale: en_US.UTF-8  # 配置代理  proxy: http://192.168.1.112:3128  # 默认安装ssh server  ssh:    install-server: true  # 指定安装的包  packages:    - net-tools    - python3-pip  # 配置磁盘分区  storage:    grub:      reorder_uefi: False    config:    - {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}
说明:


网络拓扑




配置静态 IP


在服务机开始服务前,需要在提供服务的网卡上配置静态 IP,Ubuntu 20.04 配置 netplan 即可,参考以下配置修改文件 /etc/netplan/00-installer-config.yaml,修改完成后执行netplan apply配置即可生效。
# This is the network config written by 'subiquity'network:  ethernets:    enp2s0:      addresses:      - 192.168.1.9/24      gateway4: 192.168.1.1      nameservers:        addresses:        - 114.114.114.114        search:        - 114.114.114.114

鸣谢


本文作者梦见山,授权转载。题图来源网络。
作者: 守得云开    时间: 2021-8-18 06:55
转发了
作者: 深谋远虑    时间: 2021-8-18 06:57
?




欢迎光临 邳州信息网 (https://www.pzxxw.com/) Powered by Discuz! X3.4