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及其更高版本系统成功!

相关推荐
荣--17 小时前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森17 小时前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜1 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode4 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工7 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信