网易首页 > 网易号 > 正文 申请入驻

搭建基于 Ubuntu Server 的 PXE 自动安装环境的实用指南 | 系统运维

0
分享至

导读:本文,我想讲的是在 Ubuntu 20.04 Server 上搭建一套自动安装 Ubuntu 20.04 Server 的部署环境

本文字数:7700,阅读时长大约: 9分钟

作者:梦见山

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 的部署环境,其主要内容有两部分:

1. 使用 PXE 自动从网络加载安装程序,发起安装。

2. 使用 Ubuntu 的自动安装功能,自动加载 cloud-init 安装配置,完成操作系统的自动选择。

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

PXE 安装流程

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

下图是详细的安装流程。

上图有几个前提:

1. 网卡支持 PXE,今年新出的网卡基本都支持,同时 BIOS 的启动项也要配置,请大家自行研究。

2. UEFI 启动才会请求 bootx64.efi,如果是 传统启动模式(Legacy)),那么 PXE 客户端会请求 pxelinux.0

3. 可以采用 nfsboot 方式,这个流程采用的是 ISO 镜像下载再安装的方式。

安装必须的服务端软件

1. 安装 DHCP、TFTP 服务器。 dnsmasq 同时实现了 DHCP、TFTP、DNS 三种服务器

sudo apt-get install dnsmasq

2. 安装 HTTP 服务器

HTTP 服务器有很多,大家可以使用自己的熟悉的服务器如 Nginx,这里使用的是apache2

sudo apt-get install apache2

准备启动文件

1. 下载 UEFI 引导文件: shim.signedgrub-efi-amd64-signed

  1. apt-get download shim.signed

  2. apt-get download grub-efi-amd64-signed


2. 下载 Ubuntu 20.04 Server ISO 镜像

直接去,我下载的是 ubuntu-20.04.2-live-server-amd64.iso,需要注意的是只有 Live 版本才能支持 subiquity。

创建 TFTP 文件夹

TFTP 文件夹是 TFTP 服务的根目录,PXE 启动过程中下载的文件都存在在该目录中:

  1. tftp

  2. ├── boot

  3. │ └── live-server

  4. │ ├── initrd

  5. │ └── vmlinuz

  6. ├── grub

  7. │ ├── bootx64.efi

  8. │ ├── font.pf2

  9. │ └── grub.cfg

  10. └── grubx64.efi

说明:

1. bootx64.efigrubx64.efi 引导程序来自 shim.signed 安装包

2. grub.cfg 自行创建

3. 其他文件来自 Ubuntu 安装包

4. 这五个文件是需要的,但是目录结构是自行创建的,大家可以根据自己的喜好修改

创建目录

/home/mine(可根据实际情况修改)目录下创建 tftp 目录:

  1. mkdir /home/mine/tftp

  2. mkdir /home/mine/tftp/grub

  3. mkdir /home/mine/tftp/boot

  4. mkdir /home/mine/tftp/boot/live-server

获取引导文件

1. 在安装包下载目录创建一个 shim 文件夹

2. 解压 shim 安装包到 shim文件夹: dpkg -x <%刚才下载的shim.signed 安装包包名%> shim

3. 解压 grub 安装包到 grub 文件夹

4. 拷贝引导文件到 tftp目录


  1. cp ./sgrub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /home/mine/tftp/grubx64.efi

  2. cp ./shim/usr/lib/shim/shimx64.efi.signed /home/mine/tftp/grub/bootx64.efi

获取内核镜像文件

1. 在下载目录挂载 ISO 文件

  1. sudo mount ubuntu-20.04.2.0-desktop-amd64.iso /media

系统会提示只读,不影响使用。

  1. mount: /media: WARNING: device write-protected, mounted read-only.


2. 拷贝内核镜像文件

  1. cp /media/casper/initrd /home/mine/tftp/boot/live-server

  2. cp /media/casper/vmlinuz /home/mine/tftp/boot/live-server


3. 拷贝 grub 文件

grub.cfg 拷贝过来做个参考,内容会被全部修改掉。

  1. cp /media/grub/font.pf2 /home/mine/tftp/grub

  2. cp /media/grub/grub.cfg /home/mine/tftp/grub

配置 dnsmasq

关键配置有以下几个:

1. 配置 DHCP 地址段

2. 配置引导文件目录

3. 配置 tftp 根目录

4. 配置日志路径

5. 配置服务网卡,多网卡机器需关注


  1. # 配置外网 DNS 服务器地址

  2. server=114.114.114.144

  3. # 指定服务的网卡

  4. interface=enp2s0,lo

  5. # 绑定端口

  6. bind-interfaces

  7. # 设置 DHCP 分发 IP 端范围、地址掩码、IP 地址有效时间

  8. dhcp-range=192.168.1.100,192.168.1.150,255.255.255.0,12h

  9. # 指定网关地址

  10. # 和安装无关,应该可以不配置

  11. dhcp-option=3,192.168.1.9

  12. # 指定 DNS 服务器地址

  13. # 和安装无关,应该可以不配置

  14. dhcp-option=6,114.114.114.114

  15. # 设置引导程序相对 tftp 根目录的路径

  16. dhcp-match=set:efi-x86_64,option:client-arch,7

  17. dhcp-boot=tag:efi-x86_64,grub/bootx64.efi

  18. # 启用 tftp 服务

  19. enable-tftp

  20. # 设置 tftp 根路径

  21. tftp-root=/home/mine/tftp

  22. # 设置日志路径

  23. log-facility=/var/log/dnsmasq.log

修改配置后,重启 dnsmasq 服务才能生效。

创建 HTTP 文件夹

Apache2 的默认服务根目录是 /var/www/html,在其下创建目录:

  1. html/

  2. ├── autoinstall

  3. │ ├── meta-data

  4. │ └── user-data

  5. ├── index.html

  6. └── iso

  7. └── ubuntu-20.04.2-live-server-amd64.iso

说明:

1. autoinstall 目录存放参数自动配置文件, user-datameta-data 是cloud-init 要求的文件名

2. iso 目录存放操作系统镜像文件

创建目录

  1. mkdir /var/www/html/autoinstall

  2. mkdir /var/www/html/iso

拷贝 ISO 文件

到下载目录拷贝 ISO 文件:

  1. cp ubuntu-20.04.2-live-server-amd64.iso /var/www/html/iso

创建参数自动配置文件

先创建空文件,meta-data 无需修改,user-data 后续会详细描述配置。

  1. touch /var/www/html/autoinstall/user-data

  2. touch /var/www/html/autoinstall/meta-data

配置 grub.cfg

  1. if loadfont /grub/font.pf2 ; then

  2. set gfxmode=auto

  3. insmod efi_gop

  4. insmod efi_uga

  5. insmod gfxterm

  6. terminal_output gfxterm

  7. fi

  8. set menu_color_normal=white/black

  9. set menu_color_highlight=black/light-gray

  10. set timeout=5

  11. menuentry "Ubuntu server 20.04 autoinstall" {

  12. set gfxpayload=keep

  13. 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/autoins

  14. tall/ ---

  15. initrd /boot/live-server/initrd

  16. }

menuentry 之前是配置样式,也可以删除,重点关注 menuentry "Ubuntu server 20.04 autoinstall" 内的配置:

1. 指定镜像文件相对于 tftp 根目录的路径 /boot/live-server/initrd

2. root=/dev/ram0 ramdisk_size=1500000 为了指定内核镜像挂载空间,是否可删除我不确定

3. ip=dhcp 指定内核镜像挂载后使用 DHCP 获取 IP 地址

4. url= 指定 ISO 文件的网络存放路径

5. 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

  1. #cloud-config

  2. autoinstall:

  3. version: 1

  4. # 修改apt 服务地址

  5. apt:

  6. primary:

  7. - arches: [default]

  8. uri: https://mirrors.tuna.tsinghua.edu.cn/ubuntu

  9. user-data:

  10. # 配置时区

  11. timezone: Asia/Shanghai

  12. # 去使能 root账号

  13. disable_root: true

  14. # 配置用户

  15. identity:

  16. hostname: ubuntu-server

  17. password: "yours"

  18. username: ubuntu

  19. # 配置键盘

  20. keyboard: {layout: us, variant: ''}

  21. locale: en_US.UTF-8

  22. # 配置代理

  23. proxy: http://192.168.1.112:3128

  24. # 默认安装ssh server

  25. ssh:

  26. install-server: true

  27. # 指定安装的包

  28. packages:

  29. - net-tools

  30. - python3-pip

  31. # 配置磁盘分区

  32. storage:

  33. grub:

  34. reorder_uefi: False

  35. config:

  36. - {ptable: gpt, path: /dev/sda, wipe: superblock-recursive, preserve: false, name: '',

  37. grub_device: false, type: disk, id: disk-sda}

  38. - {device: disk-sda, size: 536870912, wipe: superblock, flag: boot, number: 1,

  39. preserve: false, grub_device: true, type: partition, id: partition-0}

  40. - {fstype: fat32, volume: partition-0, preserve: false, type: format, id: format-0}

  41. - {device: disk-sda, size: -1, wipe: superblock, flag: '', number: 2,

  42. preserve: false, type: partition, id: partition-1}

  43. - {fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-1}

  44. - {device: format-1, path: /, type: mount, id: mount-1}

  45. - {device: format-0, path: /boot/efi, type: mount, id: mount-0}

说明:

1. 密码需要加密,可以先用工具对自己的密码进行加密后填入

2. 代理不是必须的配置,与网络拓扑有关

3. 磁盘分区配置要注意,配置不对会导致自动安装走不下去,提示 crash;这个配置的整体思路是先格式化 disk-sda,然后在 disk-sda 下划分 /dev/sda1/dev/sda2 ,然后分别挂载 //boot/efi 目录

4. 安装过程日志在 /var/log/installer/,如果安装失败可以通过 nc 等工具实时发出去

网络拓扑

1. 我在电脑上搭建了 DHCP、TFTP、HTTP 三种服务

2. 我在代理机上搭建了 squid,作为 HTTP 代理

3. 目标机器不能上网,三台机器在同一个局域网

配置静态 IP

在服务机开始服务前,需要在提供服务的网卡上配置静态 IP,Ubuntu 20.04 配置 netplan 即可,参考以下配置修改文件 /etc/netplan/00-installer-config.yaml,修改完成后执行 netplan apply 配置即可生效。

  1. # This is the network config written by 'subiquity'

  2. network:

  3. ethernets:

  4. enp2s0:

  5. addresses:

  6. - 192.168.1.9/24

  7. gateway4: 192.168.1.1

  8. nameservers:

  9. addresses:

  10. - 114.114.114.114

  11. search:

  12. - 114.114.114.114

鸣谢

1. 文章的基石来自 ,没有这篇文章我会摸索更长时间

2. 这篇 解决了坑

3. user-data 磁盘分区配置来自

本文作者梦见山,授权转载。题图来源网络。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
成本超8亿,票房仅191万,2024年暑期档第一票房惨案诞生了

成本超8亿,票房仅191万,2024年暑期档第一票房惨案诞生了

靠谱电影君
2024-06-19 23:00:56
全国政协常委周汉民谈养老金不足担忧:老有所养是政府责任 建议养老金来源区分年龄段投入

全国政协常委周汉民谈养老金不足担忧:老有所养是政府责任 建议养老金来源区分年龄段投入

财联社
2024-06-20 14:00:06
有些人不知足!说出养老金今年调整比例低,来看看网友怎么讲?

有些人不知足!说出养老金今年调整比例低,来看看网友怎么讲?

社保小达人
2024-06-20 11:51:22
湖南一男老师3年内送走13人:我让他三更死,他留不到五更

湖南一男老师3年内送走13人:我让他三更死,他留不到五更

安妮Emotiong
2024-04-26 20:56:11
张艺谋首部电视剧《主角》3选1:赵丽颖刘亦菲孙俪,5方面考察?

张艺谋首部电视剧《主角》3选1:赵丽颖刘亦菲孙俪,5方面考察?

小路杂谈
2024-06-18 16:27:54
首富套现百亿后,用大米抵债

首富套现百亿后,用大米抵债

大猫财经Pro
2024-06-20 17:25:48
西南石油大学迎来新任副校长

西南石油大学迎来新任副校长

鲁中晨报
2024-06-20 17:11:10
金星人欧米娜:揭秘轮回真相,美国在非洲圈养外星人,长相如大虾

金星人欧米娜:揭秘轮回真相,美国在非洲圈养外星人,长相如大虾

古今档案
2024-05-01 10:08:45
菲军惨败而归后,9国发声指责中方,联合国收到信函,问题很严重

菲军惨败而归后,9国发声指责中方,联合国收到信函,问题很严重

青年的背包
2024-06-20 16:47:12
计划流产!西安千人摇红盘抱团涨价失败,房价跌破2万大关!

计划流产!西安千人摇红盘抱团涨价失败,房价跌破2万大关!

暖心的小屋
2024-06-21 00:42:52
他们不会想到几十年后的同胞会来为侵略者庆祝!

他们不会想到几十年后的同胞会来为侵略者庆祝!

吴女士
2024-05-04 12:47:19
青岛卓越世纪中心一女子坠楼身亡,当地街道办通报

青岛卓越世纪中心一女子坠楼身亡,当地街道办通报

央广网
2024-06-20 16:40:20
不只是气虚会出汗,阴阳不和,同样会汗如雨下!教你一招化解!

不只是气虚会出汗,阴阳不和,同样会汗如雨下!教你一招化解!

护士笔记
2024-06-18 23:36:23
广州、佛山出口为何“逆势”负增长

广州、佛山出口为何“逆势”负增长

经济观察报
2024-06-20 17:30:16
《玫瑰的故事》结局直到女儿幸福,黄亦玫都不知,她活得像个笑话

《玫瑰的故事》结局直到女儿幸福,黄亦玫都不知,她活得像个笑话

小邵说剧
2024-06-20 17:46:10
男生比较大,怎样获得和谐的性生活?

男生比较大,怎样获得和谐的性生活?

许超医生
2024-05-23 10:02:12
隔空比美吴艳妮?又1田径女神出圈!高颜值好身材 穿三角式引争议

隔空比美吴艳妮?又1田径女神出圈!高颜值好身材 穿三角式引争议

念洲
2024-05-06 10:32:03
英执政党称若胜选,将加大中国人审查力度,话音刚落支持率被超越

英执政党称若胜选,将加大中国人审查力度,话音刚落支持率被超越

国学聚焦
2024-06-19 17:18:30
凯恩:我们在进攻和防守时都很挣扎,在控球和抗压方面都没做好

凯恩:我们在进攻和防守时都很挣扎,在控球和抗压方面都没做好

直播吧
2024-06-21 02:26:12
再炒“回锅肉”!黄霄雲还没开唱,《歌手》已骂声四起

再炒“回锅肉”!黄霄雲还没开唱,《歌手》已骂声四起

娱乐白名单
2024-06-20 11:08:00
2024-06-21 06:48:49
Linux
Linux
Linux 中国开源社区
8016文章数 73124关注度
往期回顾 全部

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

头条要闻

欧洲杯:西班牙1-0意大利提前出线

头条要闻

欧洲杯:西班牙1-0意大利提前出线

体育要闻

千夫所指的关系户 成了拯救葡萄牙的英雄

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

楼市新“王炸”!释放何信号?

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

艺术
手机
本地
公开课
军事航空

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

手机要闻

6100mAh!一加「冰川电池」发布/微信与鸿蒙系统将谈拢

本地新闻

2024·合肥印象|用崭新视角对话城市发展

公开课

近视只是视力差?小心并发症

军事要闻

以军发言人公开表示"哈马斯无法被消灭" 以政府反驳

无障碍浏览 进入关怀版