DevOps自动化运维实践_基于Cobbler搭建UEFI网络引导的自动安装平台

DevOps自动化运维实践_Legacy Boot与UEFI Boot网络启动(PXE)的原理解析https://blog.csdn.net/xiaochenXIHUA/article/details/159351845

基于Cobbler的系统自动化安装部署------基于Cobbler搭建传统BIOS网络引导自动安装平台https://blog.csdn.net/xiaochenXIHUA/article/details/159314778?spm=1001.2014.3001.5501

一、使用Cobbler构建UEFI网络引导自动安装平台原理

Cobbler对UEFI的支持不是很好,因此为了方便可基于PXE+TFTP+DHCP环境构建出一套基于UEFI网络自动引导的自动安装平台;由于Cobbler环境已经自带了PXE+TFTP+DHCP环境,因此只需要在Cobbler环境的基础上进行配置即可。

根据Cobbler的运行机制,可在【/var/lib/cobbler/loaders】目录下创建一个uefi目录,后续的配置和操作都在这个目录中完成,由于loaders目录下的内容在执行【cobbler sync】命令后会自动拷贝到【/var/lib/tftpboot】目录下;因此,所有的配置文件和引导文件只需要放到【/var/lib/cobbler/loaders】目录下即可。但要注意:在配置完成后,必须执行【cobbler sync】命令,让uefi目录可以同步到/var/lib/tftpboot目录中。

二、使用Cobbler构建UEFI网络引导自动安装平台环境步骤

2.1、使用Cobbler构建UEFI网络引导自动安装平台环境整体步骤

|--------|------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 步骤 | 说明 |
| 1 | 挂载系统镜像并导入Cobbler中 | 将所需通过UEFI网络引导自动安装的系统镜像挂载;然后将镜像导入到Cobbler中,并指定该系统镜像的自动安装配置文件。 详细操作命令如下【Cobbler中导入所需的系统镜像操作】【新增红帽镜像的全自动安装配置ks文件(如:almalinux9系统的全自动安装配置)】。 |
| 2 | 获取UEFI引导文件 | 获取UEFI的引导文件,让DHCP识别UEFI引导文件。 有多种获取UEFI引导文件的方法: 1、常使用所需安装的系统引导文件(如:红帽系、德班系)对应的系统光盘或ISO镜像文件中获取; 2、以红帽系的Almalinux9.3为例进入【EFI/BOOT】中找到【grubx64.efi】文件,然后将该文件复制一份到【/var/lib/cobbler/loaders/uefi】目录下 |
| 3 | 构建引导菜单 | 这里使用grub构建一个引导菜单,在【/var/lib/cobbler/loaders/uefi】下创建一个【grub.cfg】文件。 详细操作请查看如下的【构建引导菜单【grub.cfg】菜单引导文件的基础示例】 |
| 4 | 获取需安装系统的 【压缩内核】与 【临时根文件系统】文件 | 在【/var/lib/cobbler/loaders/uefi】目录下创建一个需安装系统的目录(如:almalinux9),然后,进入iso介质的【images/pxeboot】目录,找到【vmlinuz】和【initrd.img】文件,把这两个文件拷贝到【/var/lib/cobbler/loaders/uefi/almalinux9】目录下。 注意:【vmlinuz】是系统的压缩内核文件;【initrd.img】是临时的根文件系统文件。 |
| 5 | 配置DHCP中UEFI加载的引导 | 详细操作请查看【Cobbler中DHCP服务的配置文件【/etc/cobbler/dhcp.template】需修改的内容如下】 |
| 6 | 同步修改的配置到tftp目录中 | 需要执行【cobbler sync】命令将【/var/lib/cobbler/loaders】目录下的内容都同步到【/var/lib/tftpboot/】目录下。 |
| 7 | 客户端测试UEFI引导安装系统 | 现在找一台全新的服务器或者新建一个虚拟机与我们这里搭建好的Cobbler服务器在同一个网段内(如:我这里是192.168.1网段);然后设置该设备从网络引导是否可以显示【almalinux9.3-x86_64】并选择该镜像后,耐心等待全自动安装我们部署好的almalinux9.3系统即可。 |
[使用Cobbler构建UEFI网络引导自动安装平台环境整体步骤]

2.2、使用Cobbler构建UEFI网络引导自动安装平台环境步骤实践

**2.2.1、挂载系统镜像并导入到Cobbler中---**新增全自动安装配置文件

将需实现自动安装的系统iso镜像文件挂载并导入到Cobbler中,并且新增系统自动安装的配置文件,操作如下所示:

bash 复制代码
#Cobbler中导入所需的系统镜像操作
 
#1-将系统镜像上传到指定目录中(如:/data/linuxos)
mkdir -p /data/linuxos
ls
 
#2-创建系统所挂载的路径并挂载上(如:将/data/linuxos/AlmaLinux-9.3-x86_64-dvd.iso系统挂载到/data/osimg/almalinux9目录中)
mkdir -p /data/osimg/almalinux9
mount -o loop /data/linuxos/AlmaLinux-9.3-x86_64-dvd.iso /data/osimg/almalinux9/
cd /data/osimg/almalinux9
 
#3-将镜像导入到Cobbler中(注意:若是导入失败,则需要检查/var空间是否足够,是否有权限
#--path:指定镜像路径;
#--name:定义安装源名称,可任意指定, 安装源唯一标识通过name参数来定义;
#--arch:指定安装源平台信息,目前支持的选项有:i386、x86_64、arm、aarch64;
#最后显示【TASK COMPLETE】则表示导入完成
#且可在web访问【Cobbler所在服务器IP/cobbler/distro_mirror/almalinux9.3-x86_64/】访问)
cobbler import --path=/data/osimg/almalinux9 --name=almalinux9.3 --arch=x86_64
 
#4-查看Cobbler中目前导入的镜像(显示结果中主要有三个内容需要关注:
#【distros】表示某个发行版的对象,不同的镜像导入后对应不同的distro(比如:almalinux9.3-x86_64)。
#【profiles】是distro的配置文件,一个distro可对应一个或多个profile。默认导入时会为distro生成一个profile。每个profile背后关联一个ks文件,用于决定kickstart安装操作系统时的配置。
#【systems】是system对象不是必须要创建的,但它可以指导cobbler进行更定制化的操作(比如:我们有多个profile文件,需要为不同的机器安装不同配置的操作系统,没有system对象时,需要手动选择profile文件,而通过system对象可以使指定机器使用指定的profile配置))
cobbler list
 
#5-查看指定的配置文件内容(如:查看名为【almalinux9.3-x86_64】的配置文件内容;
#从输出可以看到【almalinux9.3-x86_64】profile关联的ks文件是sample.ks,这个sample.ks默认路径位于【/var/lib/cobbler/templates】下。
#接下来我们要做的,就是基于原始的ks模版文件,进行修改。修改完成后,修改profile中的Kickstart文件路径,使其指向我们自己的ks模版文件。)
cobbler profile report --name=almalinux9.3-x86_64
ll /var/lib/cobbler/templates
bash 复制代码
#新增红帽镜像的全自动安装配置ks文件(如:almalinux9系统的全自动安装配置)
 
#1-进入镜像全自动安装配置目录创建该镜像对应的ks文件
cd /var/lib/cobbler/templates
vi almalinux9.ks
 
#【almalinux9.ks】文件的完整内容如下:
# This kickstart file should only be used with EL > 5 and/or Fedora > 7.
# For older versions please use the sample.ks kickstart file.
 
#platform=x86, AMD64, or Intel EM64T
# System authorization information(红帽系9及其以上版本中这里的auth,需要改为authselect)
authselect  --useshadow  --enablemd5
# System bootloader configuration
bootloader --append="crashkernel=auto" --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel
# Use text mode install(也可设置为图形界面安装【graphical】直接文字界面是【text】,首选text)
text
# Firewall configuration
firewall --disabled
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# Use network installation(地址需修改为自己Cobbler所在服务器IP)
url --url=http://192.168.1.35/cblr/links/almalinux9.3-x86_64
# If any cobbler repo definitions were referenced in the kickstart profile, include them here.
#$yum_repo_stanza
# Network information
network  --bootproto=dhcp --hostname=ck-almalinux
# Reboot after installation
reboot
 
#Root password(密码使用Cobbler配置的默认密码,也可使用【openssl passwd -1 -salt `openssl rand -hex 4` '自己需要设置为的初始密码' 】命令执行后的结果复制到这里)
rootpw --iscrypted "$1$0803bc1e$Q41qx.y9tIXPIA6rXyHB//"
# SELinux configuration
selinux --disabled
# Do not configure the X Window System(#skipx表示【安装图形界面】;skipx则表示【不安装图形界面,使用纯命令行】)
#skipx
# System timezone
timezone  Asia/Shanghai
# Install OS instead of upgrade(红帽系9及其更高版本install参数,需要注释掉,即为#install)
#install
# Clear the Master Boot Record
zerombr
# Allow anaconda to partition the system as needed
#autopart(禁用自动分配,如下为手动分配100g磁盘空间示例,默认单位是MB)
ignoredisk --only-use=sda
part /boot/efi --fstype=efi --ondisk=sda --size=512
part /boot --fstype=xfs --ondisk=sda --size=1536
part swap --fstype="swap" --ondisk=sda --size=8192
part /var --fstype="xfs" --ondisk=sda --size=20480
part /usr --fstype="xfs" --ondisk=sda --size=30720
part / --fstype="xfs" --ondisk=sda --size=10240
part /data --fstype="xfs" --ondisk=sda --grow --size=1
 
%pre
%end
 
%packages
#$SNIPPET('func_install_if_enabled')
@additional-devel
@development
@platform-devel
bash-completion
chrony
dos2unix
kexec-tools
lrzsz
sysstat
tree
vim
wget
git
net-tools

#安装图形界面【带GUI的服务器(GNOME)+开发工具组】
@^Server with GUI
@Development Tools
-aic94xx-firmware
-alsa-firmware
-ivtv-firmware
-rtas7004-firmware
%end

# 默认启动图形界面
%post --interpreter=/bin/bash
systemctl set-default graphical.target
%end

 
#2-修改导入镜像使用的自动安装ks文件为自定义的ks文件(如:almalinux9.ks)
#2.1-查看Cobbler中目前导入的镜像
cobbler list
#2.2-修改Cobbler中导入镜像名称为【almalinux9.ks】的配置文件【almalinux9.3-x86_64】的全自动安装配置ks文件为【自建的almalinux9.ks】
cobbler profile edit --name almalinux9.3-x86_64 --autoinstall=almalinux9.ks
#查看指定的配置文件内容(如:查看名为【almalinux9.3-x86_64】的配置文件内容)
cobbler profile report --name=almalinux9.3-x86_64

#3-将创建的自动安装ks文件复制一份到tftp server对应的系统文件夹中
cp ./almalinux9.ks /var/www/cobbler/distro_mirror/almalinux9.3-x86_64/

2.2.2、获取UEFI引导文件

常使用所需安装的系统引导文件(如:红帽系、德班系)对应的系统光盘或ISO镜像文件中获取;以红帽系的Almalinux9.3为例进入【EFI/BOOT】中找到【grubx64.efi】文件,然后将该文件复制一份到tftp程序的uefi(cobbler中是【/var/lib/cobbler/loaders/uefi】)目录中,如下所示:

2.2.3、构建引导菜单

在tftp程序根目录(cobbler中是【/var/lib/cobbler/loaders/uefi】)下创建一个【grub.cfg】文件,如下所示:

bash 复制代码
vi /var/lib/cobbler/loaders/uefi/grub.cfg

#构建引导菜单【grub.cfg】菜单引导文件的基础示例
set default="5"

function load_video {
  insmod efi_gop
  insmod efi_uga
  insmod video_bochs
  insmod video_cirrus
  insmod all_video
}

load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2

set timeout=15
### END /etc/grub.d/00_header ###

search --no-floppy --set=root -l 'RHEL-9-0-0-BaseOS-x86_64'

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install AlmaLinux 9.3' --class almalinux --class gnu-linux --class gnu --class os {
 linuxefi uefi/almalinux9/vmlinuz inst.stage2=http://192.168.1.35/cobbler/distro_mirror/almalinux9.3-x86_64 ins.repo=http://192.168.1.35/cobbler/distro_mirror/almalinux9.3-x86_64 inst.ks=http://192.168.1.35/cobbler/distro_mirror/almalinux9.3-x86_64/almalinux9.ks ip=dhcp quiet
 initrdefi uefi/almalinux9/initrd.img
}

2.2.4、获取需安装系统的【压缩内核】与【临时根文件系统】文件

从需安装系统的镜像中获取到【压缩内核(vmlinuz)】与【临时根文件系统(initrd.img)】文件拷贝到【tftp程序根目录下uefi/当前系统名称】(cobbler中是【/var/lib/cobbler/loaders/uefi/almalinux9】)目录中,操作如下图所示:

2.2.5、配置DHCP中UEFI加载的引导

修改DHCP服务对应的配置文件(cobbler中是【/etc/cobbler/dhcp.template】)里面的对应网络参数及其UEFI引导内容,详细操作如下:

bash 复制代码
#Cobbler中DHCP服务的配置文件【/etc/cobbler/dhcp.template】需修改的内容如下
#【subnet】表示网段。
#【option routers】表示网关。
#【option domain-name-servers】表示DNS
#【option subnet-mask】表示子网掩码
#【range dynamic-bootp】表示DHCP动态分配的IP地址范围(前提是这些IP未被使用,否则会冲突)
#【next-server】表示tftp server所在的服务器IP地址
subnet 192.168.1.0 netmask 255.255.255.0 {
     option routers             192.168.1.1;
     option domain-name-servers 223.5.5.5;
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        192.168.1.130 192.168.1.254;
     default-lease-time         21600;
     max-lease-time             43200;
     next-server                192.168.1.35;#关键配置!用于指明tftp server所在的服务器的IP地址
     class "pxeclients" {
          match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";

          # Legacy
          if option system-arch = 00:00 {
              filename "grub/grub.0";
          }
          # UEFI-32-1
          if option system-arch = 00:06 {
               # Not supported, no 32 bit UEFI grub executable
              filename "unsupported";
          }
          # UEFI-32-2
          if option system-arch = 00:02 {
              # Not supported, no 32 bit UEFI grub executable
              filename "unsupported";
          }
          # UEFI-64-1    #关键配置!用于指明引导加载程序(bootloader)文件(获取tftp根目录下的相对路径)
          else if option system-arch = 00:07 {
              filename "uefi/grubx64.efi";
          }
          # UEFI-64-2
          else if option system-arch = 00:08 {
              filename "uefi/grubx64.efi";
          }
          # UEFI-64-3
          else if option system-arch = 00:09 {
              filename "uefi/grubx64.efi";
          }
          # armv7   (aka arm 32 bit)
          else if option system-arch = 00:0a {
              filename "grub/armv7.efi";
          }
          # aarch64 (aka arm 64 bit)
          else if option system-arch = 00:0b {
              filename "grub/grubaa64.efi";
          }
          # RiskV 32 bit
          else if option system-arch = 00:25 {
              #ToDo petitboot loader
              # petitboot should support pxelinux config files
              filename "unsupported";
          }
          #RiskV 32 bit
          else if option system-arch = 00:27 {
              #ToDo petitboot loader
              # petitboot should support pxelinux config files
              filename "unsupported";
          }
          else if option system-arch = 00:0e {
              # FIXME add petitboot support for ppc64(le)
              filename "grub/grub.ppc64le";
          }
          else
          {
              filename "grub/grub.0";
          }
     }
}

2.2.6、同步cobbler中修改的配置到tftp根目录

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

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

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

图形界面安装后如下所示:

相关推荐
haaaaaaarry2 小时前
【操作系统】第三章 内存管理(一)
linux·考研·操作系统
云飞云共享云桌面2 小时前
东莞智能装备工厂10个solidworks共享一台服务器做装配体设计
运维·服务器·网络·云计算·电脑
xuxie992 小时前
N12 arm-clk时钟
运维·服务器·网络
大灰狼来喽2 小时前
OpenClaw 自动化工作流实战:用 Hooks + 定时任务 + Multi-MCP 构建“数字员工“
大数据·运维·人工智能·自动化·aigc·ai编程
lbb 小魔仙2 小时前
Docker容器化实战:从入门到精通,附完整实战案例
运维·docker·容器
by————组态2 小时前
Ricon组态系统:物联网时代的连接桥梁
运维·物联网·数学建模·组态·组态软件
java资料站2 小时前
笔记本安装Ubuntu20.04(详细
运维
jessecyj2 小时前
Nginx中$http_host、$host、$proxy_host的区别
运维·nginx·http
skiy2 小时前
Nginx搭建负载均衡
运维·nginx·负载均衡