DevOps自动化运维实践_搭建UEFI网络引导的自动安装Ubuntu20及其更高版本系统

DevOps自动化运维实践_基于Cobbler搭建UEFI网络引导的自动安装平台https://blog.csdn.net/xiaochenXIHUA/article/details/159487746

DevOps自动化运维实践_基于Cobbler搭建传统BIOS网络引导的自动安装平台https://blog.csdn.net/xiaochenXIHUA/article/details/159314778?spm=1001.2014.3001.5501

一、Ubuntu20及其更高版本的cloud-init自动应答

由于Ubuntu20.04版本以后已不再发布server版本了,因此要通过UEFI引导安装ubuntu20及其更高版本,若直接使用cobbler则会有很多bug,所以,本文通过另一种方式来实现。

Ubuntu 20.04及其更高版本的系统安装程序支持新的操作模式自动安装(automated installation),与之前的版本有所不同的是:应答文件格式完全不同(Ubuntu20.04及其更高版本可使用cloud-init自动应答机制,自动应答文件格式为yaml。而之前版本都使用的是debconf-set-selections格式,也就是debian的preseed自动应答机制)。当然,Ubuntu20.04也可以使用preseed自动应答机制。

二、配置Ubuntu20及其更高版本的UEFI自动应答

本文以最新的长期支持版【ubuntu-24.04.4-live-server-amd64.iso】为例操作。

2.1、获取Ubuntu20及其更高版本ISO镜像内容到指定目录下

bash 复制代码
#获取Ubuntu20及其更高版本的ISO镜像到指定目录(Cobbler的【/var/lib/cobbler/loaders/uefi/】)下
cd /var/lib/cobbler/loaders/uefi/
mkdir ubuntu24
cd ./ubuntu24
wget https://releases.ubuntu.com/24.04.4/ubuntu-24.04.4-live-server-amd64.iso

2.2、挂载系统镜像并获取压缩内核与临时根文件系统文件到指定目录

bash 复制代码
#挂载系统镜像并获取压缩内核与临时根文件系统文件到指定目录(cobbler中的【/var/lib/cobbler/loaders/uefi/ubuntu24】)

#1-将下载好的Ubuntu24.04.4系统ISO镜像挂载到【/data/osimg/ubuntu24】目录下
mkdir -p /data/osimg/ubuntu24
mount -o loop ./ubuntu-24.04.4-live-server-amd64.iso /data/osimg/ubuntu24/

#2-将挂载好的Ubuntu24.04.4系统中的【压缩内核(vmlinuz)】【临时根文件系统(initrd)】文件到制定目录(cobbler中的【/var/lib/cobbler/loaders/uefi/ubuntu24】)
cp /data/osimg/ubuntu24/casper/vmlinuz /data/osimg/ubuntu24/casper/initrd ./

2.3、配置可在线访问Ubuntu20及其更高版本系统ISO镜像

由于cobbler中可在线访问的tftp对应的web服务【http://TFTP服务器IP/cobbler】的真实根路径是【/var/www/cobbler/】因此,可以直接在这个真实路径下创建一个软链接即可实现网络访问Ubuntu对应的内容了。

bash 复制代码
#配置可在线访问Ubuntu20及其更高版本系统ISO镜像与【压缩内核(vmlinuz)】【临时根文件系统(initrd.img)】
cd /var/www/cobbler/
ln -s /var/lib/cobbler/loaders/uefi/ubuntu24 .

2.4、配置Ubuntu20及其更高版本系统的安装菜单

bash 复制代码
#配置Ubuntu20及其更高版本系统的安装菜单
cd /var/lib/cobbler/loaders/uefi
vi grub.cfg

#【grub.cfg】文件末尾新增的Ubuntu24安装内容如下:
menuentry "Ubuntu24.04.4 autoinstall" --id=autoinstall {
    echo "Loading Kernel..."
    linux uefi/ubuntu24/vmlinuz boot=casper ip=dhcp url=http://192.168.1.35/cobbler/ubuntu24/ubuntu-24.04.4-live-server-amd64.iso autoinstall ds=nocloud-net\;s=http://192.168.1.35/cobbler/ubuntu24/ debug
    echo "Loading Ram Disk..."
    initrd uefi/ubuntu24/initrd
}

2.5、编写自动应答文件并在系统安装完成后执行脚本优化

在Ubuntu系统ISO所在路径下编写自动应答文件【meta-data】和【user-data】(user-data文件内容比较复杂,建议先手动安装一次ubuntu24.04.4系统,然后在系统的【/var/log/installer/】目录下会生成一个【autoinstall-user-data】 文件,该文件就是基于当前的系统的应答文件,可以将此文件作为基础,根据实际情况进行修改。);

bash 复制代码
#编写自动应答文件

#1-在Ubuntu系统ISO镜像所在位置创建【meta-data】文件
vi meta-data

#2-【meta-data】文件的内容如下:
instance-id: ubuntu-autoinstall
local-hostname: ck-ubuntu24
bash 复制代码
#2-在Ubuntu系统ISO镜像所在位置创建【user-data】文件
vi user-data

#【user-data】文件的完整自动应答内容如下:

#cloud-config
# See the autoinstall documentation at:
# https://canonical-subiquity.readthedocs-hosted.com/en/latest/reference/autoinstall-reference.html
autoinstall:
  version: 1
  # 完全无人值守,无交互步骤
  interactive-sections: []
  # 基础系统配置
  timezone: Asia/Shanghai
  locale: en_US.UTF-8
  keyboard:
    layout: us

  # 安装阶段临时网络配置(DHCP自动匹配所有以太网卡)
  network:
    version: 2
    renderer: networkd
    ethernets:
      all-eth:
        match:
          name: en*
        dhcp4: true
        optional: false

  # 网卡启动自动获取IP
  early-commands:
    - ["/usr/bin/systemctl", "restart", "systemd-networkd"]

  # 用户配置(用户名/密码(可用【openssl passwd -6 '你需要设置为的明文密码'】命令生成)/主机名)
  identity:
    hostname: ck-ubuntu24
    username: ck
    realname: ck-ubuntu24
    password: $6$d6KDi1QWAAFyVYtu$8sdsHVFoG43JPz3oGRHgDjHBwBIrApRbPKewgHafhvXO21qTwKMusLxrSlXBH3/o91vs3k6TNWUZNFNrX.78L.

  # SSH服务配置
  ssh:
    install-server: true
    allow-pw: true
    permit-root-login: false

  # 内核版本
  kernel:
    package: linux-generic

  # APT源优化(关闭geoip,提升国内安装速度)
  apt:
    # 在线环境可将updates后的值设置为security(仅安装安全更新);all(安装所有更新);false(完全不安装更新,离线环境专用)
    updates: security
    fallback: offline-install
    geoip: false
    preserve_sources_list: false
    primary:
      - arches: [amd64, i386]
        uri: http://mirrors.aliyun.com/ubuntu/
      - arches: [arm64, armhf]
        uri: http://mirrors.aliyun.com/ubuntu-ports
    # 彻底关闭了系统安装完成后的自动更新过程,因为在无网络环境中,会导致安装失败(在线环境可注释如下禁用的这一行)
    disable_suites: [security, updates, backports]

  # 不安装第三方驱动
  drivers:
    install: false
  source:
    id: ubuntu-server

  # ===================== GPT+EFI 分区表(修复SWAP激活+规范分区配置) =====================
  storage:
    version: 1
    config:
      # 1. 物理磁盘 /dev/sda GPT分区表
      - type: disk
        id: disk-sda
        path: /dev/sda
        ptable: gpt
        wipe: superblock-recursive
        preserve: false
        grub_device: false

      # 2. EFI系统分区(512MB FAT32,引导分区)
      - type: partition
        id: part-efi
        device: disk-sda
        size: 512MB
        flags: [esp]
        number: 1
        wipe: superblock
        grub_device: true
      - type: format
        id: fmt-efi
        volume: part-efi
        fstype: fat32
      - type: mount
        id: mnt-efi
        device: fmt-efi
        path: /boot/efi

      # 3. /boot 分区(1GB ext4)
      - type: partition
        id: part-boot
        device: disk-sda
        size: 1GB
        number: 2
      - type: format
        id: fmt-boot
        volume: part-boot
        fstype: ext4
      - type: mount
        id: mnt-boot
        device: fmt-boot
        path: /boot

      # 4. SWAP交换分区(8GB,修复原配置未激活SWAP问题)
      - type: partition
        id: part-swap
        device: disk-sda
        size: 8GB
        flags: [swap]
        number: 3
      - type: format
        id: fmt-swap
        volume: part-swap
        fstype: swap
      - type: mount
        id: mnt-swap
        device: fmt-swap
        path: none

      # 5. /usr 分区(20GB ext4)
      - type: partition
        id: part-usr
        device: disk-sda
        size: 20GB
        number: 4
      - type: format
        id: fmt-usr
        volume: part-usr
        fstype: ext4
      - type: mount
        id: mnt-usr
        device: fmt-usr
        path: /usr

      # 6. /var 分区(20GB ext4)
      - type: partition
        id: part-var
        device: disk-sda
        size: 20GB
        number: 5
      - type: format
        id: fmt-var
        volume: part-var
        fstype: ext4
      - type: mount
        id: mnt-var
        device: fmt-var
        path: /var

      # 7. 根分区 /(20GB ext4)
      - type: partition
        id: part-root
        device: disk-sda
        size: 20GB
        number: 6
      - type: format
        id: fmt-root
        volume: part-root
        fstype: ext4
      - type: mount
        id: mnt-root
        device: fmt-root
        path: /

      # 8. /data 数据分区(剩余所有空间)
      - type: partition
        id: part-data
        device: disk-sda
        size: -1
        number: 7
      - type: format
        id: fmt-data
        volume: part-data
        fstype: ext4
      - type: mount
        id: mnt-data
        device: fmt-data
        path: /data

  # ===================== 安装后收尾脚本(优化容错+规范执行) =====================
  late-commands:
    # 启用SSH服务
    - curtin in-target --target=/target -- systemctl enable ssh
    # 替换APT国内源(增加超时+重试,避免安装失败)
    - curtin in-target --target=/target -- wget -q --timeout=10 --tries=2 -O /etc/apt/sources.list http://192.168.1.35/cobbler/ubuntu24/bash/sources.list
    # 下载初始化脚本
    - curtin in-target --target=/target -- wget -q --timeout=10 --tries=2 -P /root/ http://192.168.1.35/cobbler/ubuntu24/bash/init.sh
    # 执行初始化脚本
    - curtin in-target --target=/target -- chmod +x /root/init.sh
    - curtin in-target --target=/target -- /bin/bash /root/init.sh
    # 设置root密码(可用【openssl passwd -6 '你需要设置为的明文密码'】生成)
    - curtin in-target --target=/target -- usermod -p '$6$d6KDi1QWAAFyVYtu$8sdsHVFoG43JPz3oGRHgDjHBwBIrApRbPKewgHafhvXO21qTwKMusLxrSlXBH3/o91vs3k6TNWUZNFNrX.78L.' root
bash 复制代码
#系统安装完成后需执行的命令

#1-进入Ubuntu系统ISO镜像所在路径
cd /var/www/cobbler/ubuntu24/

#2-创建系统安装完成后需执行的内容
mkdir bash
cd bash

#3-更改Ubuntu系统的源(使用阿里云的源)
vi sources.list
#【sources.list】完整内容如下:
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse


#4-Ubuntu系统安装完成后需执行的脚本操作
vi init.sh
#【init.sh】脚本的完整内容如下(启用root可ssh连接、禁用ufw防火墙、设置NTP时钟、优化参数):
#!/bin/bash
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart sshd
systemctl stop ufw.service
systemctl disable ufw.service
echo -e "NTP=ntp1.aliyun.com\nFallbackNTP=ntp.ubuntu.com" >> /etc/systemd/timesyncd.conf
systemctl restart systemd-timesyncd
cat >> /etc/security/limits.conf << EOF
*       soft        nofile  655350
*       hard        nofile  655350
*       soft        nproc   655350
*       hard        nproc   655350
root        soft        nofile  655350
root        hard        nofile  655350
root        soft        nproc   655350
root        hard        nproc   655350
EOF
rm -rf /root/init.sh

2.6、同步cobbler的所有配置

只要cobbler中的任何配置内容有变动,都需要执行【cobbler sync】命令将【/var/lib/cobbler/loaders】目录下的内容都同步到【/var/lib/tftpboot/】目录下。

三、客户端测试UEFI网络引导全自动安装系统

找一台全新的服务器或者新建一个虚拟机与我们这里搭建好的TFTP+DHCP(Cobbler)服务器在同一个网段内(如:我这里是192.168.1网段);然后设置该设备从网络引导是否可以显示【Ubuntu24.04.4 autoinstall】并选择该系统后,耐心等待全自动安装我们部署好的Ubuntu24.04.4系统即可(注意:在安装之前:可以先在TFTP服务器上执行【tail -f /var/log/messages】命令查看系统安装的流程或报错内容)详细操作如下所示:

注意1:若运行到这里如下图所示显示【Out memory】字样,则表示当前客户端的内存不够(建议在虚拟机设置11g内存),增加内存后重试(否则就不会自动安装系统,需要手动安装配置了)。

注意2:若在安装时报错找不到/dev/sda磁盘,则需要确认当前服务器的磁盘类型,在user-data中修改为自己磁盘对应的类型即可【详情请查看如下的《磁盘命名解析》】:

|------------------------|-------------------|-----------------------|
| 硬件 / 虚拟化类型 | 系统盘默认名称 | 说明 |
| NVMe SSD 物理机 | /dev/nvme0n1 | 现在服务器标配 NVMe,几乎不用 sda |
| KVM/Proxmox/VMware 虚拟机 | /dev/vda | 半虚拟化磁盘,不是 sda |
| 多磁盘物理机 | /dev/sdb /dev/sdc | sda 可能被其他盘占用 |
| 传统 SATA/SAS 盘 | /dev/sda | 仅老硬件保留 |
[磁盘命名解析]

最后等待系统安装完成后进入系统界面,如下图所示:

bash 复制代码
#登录系统后检查内容

#1-检查磁盘分区情况是否与user-data自动安装系统文件中的配置相符
df -hT

#2-查看主机名称
hostname

#3-查看当前的系统的源
cat /etc/apt/sources.list

#4-查看user-data自动创建的用户(如:ck)
id ck

到这里,恭喜你,使用基于Cobbler服务实现UEFI网络引导全自动安装Ubuntu20及其更高版本系统成功!

相关推荐
夜阑卧听风吹雨,铁马冰河入梦来2 小时前
字节Midscene 与智谱 AutoGLM-Phone 工具对比
ai·自动化
wanhengidc2 小时前
云手机与模拟器的关系
大数据·运维·服务器·分布式·智能手机
喵手3 小时前
Python爬虫实战:手把手教你Python 自动化构建志愿服务岗位结构化数据库!
爬虫·python·自动化·数据采集·爬虫实战·零基础python爬虫教学·志愿服务岗位结构数据库打造
喵手3 小时前
Python爬虫实战:手把手教你如何采集开源字体仓库目录页(Google Fonts / 其他公开字体目录)!
爬虫·python·自动化·数据采集·爬虫实战·零基础python爬虫教学·开源字体仓库目录页采集
fresh hacker3 小时前
【Linux系统】通用的“系统排障”
linux·运维·服务器·网络·php
STKingA13 小时前
Win11 WSL2+Ubuntu开发环境配置全攻略
linux·运维·ubuntu
艾莉丝努力练剑3 小时前
【Linux:文件】文件基础IO进阶
linux·运维·服务器·c语言·网络·c++·centos
Agent产品评测局3 小时前
企业自动化项目,如何做好内部推广与员工培训?——企业级智能体落地与人才赋能实测指南
运维·人工智能·ai·chatgpt·自动化
艾莉丝努力练剑4 小时前
【MYSQL】MYSQL学习的一大重点:表的约束
linux·运维·服务器·开发语言·数据库·学习·mysql