一、Cobbler的安装
1.1、Cobbler安装前的准备内容
|--------|---------------------------------------------|
| 序号 | Cobbler安装前的准备内容 |
| 1 | 操作系统:RHEL9或红帽系系统(如:Almalinux9、Rockylinux9等) |
| 2 | IP地址:设置为静态IP (如:192.168.1.35) |
| 3 | Cobbler版本:cobbler3.3.X |
| 4 | 关闭防火墙、关闭SELinux、配置yum源、该服务器可上网。 |
[Cobbler安装前的准备内容]
bash
#1-关闭防火墙命令
#1.1-临时停止防火墙
systemctl stop firewalld.service
#1.2-永久停止防火墙
systemctl disable firewalld.service
#2-关闭SELinux
#2.1-获取当前SELinux的状态(若结果显示【enforcing】表示开启了SELinux需要禁用)
getenforce
#2.2-临时禁用SELinux
setenforce 0
#2.3-永久禁用SELinux(打开SELinux的配置文件,且将【SELINUX=enforcing】修改为【SELINUX=disabled】)
vi /etc/selinux/config
#3-配置yum源(如:我这里将Almalinux9的yum源修改为阿里云的)
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^# baseurl=https://repo.almalinux.org|baseurl=https://mirrors.aliyun.com|g' \
-i.bak \
/etc/yum.repos.d/almalinux*.repo
dnf makecache




1.2、安装Cobbler
bash
#安装Cobbler3.3.7并启动
yum install -y epel-release
yum install -y cobbler-3.3.7 dhcp-server pykickstart httpd yum-utils tftp-server
systemctl restart httpd cobblerd
systemctl enable httpd cobblerd



1.3、Cobbler的目录结构
|------------------|--------------------------------|----------------------------------------|
| Cobbler的模块 | 具体路径与文件 | 说明 |
| Cobbler的配置文件 | /etc/cobbler | 是Cobbler的配置文件目录 |
| Cobbler的配置文件 | /etc/cobbler/settings.yaml | 是Cobbler的主配置文件,文件格式是yaml;且是使用python编写的 |
| Cobbler的配置文件 | /etc/cobbler/dhcp.template | DHCP服务的配置模板 |
| |||
| Cobbler的数据目录 | /var/lib/cobbler | 是Cobbler的数据目录 |
| Cobbler的数据目录 | /var/lib/cobbler/templates | 默认存放kickstart文件(即:各系统自动安装的引导文件) |
| Cobbler的数据目录 | /var/lib/cobbler/loaders | 存放的各种引导程序 |
| |||
| 系统镜像安装目录 | /var/www/cobbler | 是各种系统镜像的安装目录 |
| 系统镜像安装目录 | /var/www/cobbler/distro_mirror | 是导入的系统镜像列表 |
| 系统镜像安装目录 | /var/www/cobbler/images | 是导入的系统镜像启动文件 |
| |||
| Cobbler日志目录 | /var/log/cobbler | 是Cobbler的日志目录 |
| Cobbler日志目录 | /var/log/cobbler/install.log | 是各客户端系统的安装日志 |
| Cobbler日志目录 | /var/log/cobbler/cobbler.log | 是Cobbler的日志 |
[Cobbler的目录结构解析]
二、Cobbler的配置
2.1、检查Cobbler的环境是否正常
bash
#1-检查Cobbler的环境是否正常命令(初次安装好后检查会有很多的内容需要修复,我们逐一修复)
cobbler check

2.2、修复Cobbler的异常环境
2.2.1、解决Cobbler主配置文件IP问题
bash
#解决"1: The 'server' field in /etc/cobbler/settings.yaml must be set to something other than localhost, or automatic installation features will not work. This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.
#2: For PXE to be functional, the 'next_server_v4' field in /etc/cobbler/settings.yaml must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
#3: For PXE to be functional, the 'next_server_v6' field in /etc/cobbler/settings.yaml must be set to something other than ::1, and should match the IP of the boot server on the PXE network."问题
#先获取Cobbler所在服务器的IP信息(获取到该主机网卡的IPV4地址与IPV6地址)
ip a
#0-打开Cobbler的主配置文件【/etc/cobbler/settings.yaml】进行如下内容修改
vi /etc/cobbler/settings.yaml
#1-将主配置文件中的【server】后内容修改为cobbler所在主机的IPV4地址(如:192.168.1.35)
server:192.168.1.35
#2-将主配置文件中的【next_server_v4】后内容修改为cobbler所在主机的IPV4地址(如:192.168.1.35)
next_server_v4:192.168.1.35
#3-将主配置文件中的【next_server_v6】后内容修改为cobbler所在主机的IPV6地址(如:2106:813c:2b34:f1a:26c:26ff:fe45:1162)
next_server_v6:2106:813c:2b34:f1a:26c:26ff:fe45:1162
#4-将主配置文件中的DHCP服务开启
manage_dhcp:true
manage_dhcp_v4: true



2.2.2、解决网络引导程序丢失问题
由于cobbler引导程序需要【pxelinux.0(引导文件)】与【menu.c32(菜单文件)】两个文件,而这两个文件是从sysliunx包里面来的。因此需要先安装这个包,然后复制到对应的位置即可;详细操作如下:
bash
#解决"4: some network boot-loaders are missing from /var/lib/cobbler/loaders. If you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely. Files in this directory, should you want to support all architectures, should include pxelinux.0, andmenu.c32."问题
#1-直接安装syslinux
yum install -y syslinux
#2-将安装好的syslinux的内容复制到Cobbler的【/var/lib/cobbler/loaders/】目录下即可
cp /usr/share/syslinux/pxelinux.0 /var/lib/cobbler/loaders/
cp /usr/share/syslinux/menu.c32 /var/lib/cobbler/loaders/

2.2.3、重启Cobbler服务并再次检查环境是否正常
bash
#重启Cobbler服务并再次检查环境是否正常
#1-重启Cobbler服务
systemctl restart cobblerd
#2-再次检查Cobbler的环境是否正常(经过检查可以发现目前还有5个异常内容;其中第二个问题,已经解决,可忽略;第三个问题的Cobbler的老版本问题可忽略,第五问题是关于电源管理功能的,是可选项也是直接忽略即可。因此,接下来只用关注解决问题一与问题四即可。)
cobbler check

2.2.4、解决DHCP问题
由于已经将DHCP交给Cobbler进行管理了,因此要配置DHCP的话,只需要修改Cobbler目录下的dhcp模板即可。**注意:**不能直接修改dhcp本身的配置文件,因为Cobbler每次同步都会进行覆盖,因此只能修改【/etc/cobbler/dhcp.template】文件。
bash
#解决"service dhcpd is not running"问题
#1-修改/etc/cobbler/dhcp.template文件
vi /etc/cobbler/dhcp.template
#2-【/etc/cobbler/dhcp.template】文件中需修改的内容如下
#【subnet】表示网段。
#【option routers】表示网关。
#【option domain-name-servers】表示DNS
#【option subnet-mask】表示子网掩码
#【range dynamic-bootp】表示DHCP动态分配的IP地址范围(前提是这些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 $next_server_v4;

2.2.5、解决安装系统后root用户的初始密码问题
bash
#解决"The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings.yaml) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one"问题
#1-生成root用户的初始密码,可自定义(如:我这里设置安装好系统root用户的明文初始密码是admin123456;获取到的SSL加密密码是:$1$98fa94df$IEvQ4GUE1S4neDBAm7p5q/)
openssl passwd -1 -salt `openssl rand -hex 4` 'admin123456'
#2-编辑Cobbler的主配置文件里面的【default_password_crypted】后的值设置为新生成的root用户初始密码
vi /etc/cobbler/settings.yaml
default_password_crypted: "$1$98fa94df$IEvQ4GUE1S4neDBAm7p5q/"


2.2.6、同步配置并重新检查环境是否正常
bash
#同步配置、且重启Cobbler服务并重新检查环境是否正常
cobbler sync
systemctl restart cobblerd
cobbler check

2.3、启动TFTP服务
TFTP服务没有额外的特殊配置,只需要启动即可。
bash
#启动TFTP服务
systemctl status tftp.socket
systemctl start tftp.socket
systemctl enable tftp.socket
#可查看TFTP目录下的内容
ll var/lib/tftpboot/


三、Cobbler中导入所需的系统镜像
3.1、将所需系统镜像导入到Cobbler中
Cobbler要实现对系统的全自动化安装,还需要安装源;因此还需要导入系统安装介质到Cobbler中(即:先下载需要安装操作系统的iso安装介质并上传到cobbler服务器上;然后再将iso系统镜像文件进行挂载)【这个导入镜像的过程,其实是将iso文件的内容统一拷贝到/var/www/cobbler/distro_mirror目录下,形成一个安装镜像源】。
bash
#Cobbler中导入所需的系统镜像操作
#1-将系统镜像上传到指定目录中(如:/data/linuxos)
mkdir -p /data/linuxos
ls
#2-创建系统所挂载的路径并挂载上(如:将/data/linuxos/CentOS-7-x86_64-DVD-2009.iso系统挂载到/data/osimg/centos7目录中)
mkdir -p /data/osimg/centos7
mount -o loop /data/linuxos/CentOS-7-x86_64-DVD-2009.iso /data/osimg/centos7/
ll /data/osimg/centos7/
#3-将镜像导入到Cobbler中(
#--path:指定镜像路径;
#--name:定义安装源名称,可任意指定, 安装源唯一标识通过name参数来定义;
#--arch:指定安装源平台信息,目前支持的选项有:i386、x86_64、arm、aarch64;
#最后显示【TASK COMPLETE】则表示导入完成)
cobbler import --path=/data/osimg/centos7 --name=centos7.9 --arch=x86_64
#4-查看Cobbler中目前导入的镜像(显示结果中主要有三个内容需要关注:
#【distros】表示某个发行版的对象,不同的镜像导入后对应不同的distro(比如:centos7-x86_64)。
#【profiles】是distro的配置文件,一个distro可对应一个或多个profile。默认导入时会为distro生成一个profile。每个profile背后关联一个ks文件,用于决定kickstart安装操作系统时的配置。
#【systems】是system对象不是必须要创建的,但它可以指导cobbler进行更定制化的操作(比如:我们有多个profile文件,需要为不同的机器安装不同配置的操作系统,没有system对象时,需要手动选择profile文件,而通过system对象可以使指定机器使用指定的profile配置))
cobbler list
#5-查看指定的配置文件内容(如:查看名为【centos7.9-x86_64】的配置文件内容;
#从输出可以看到【centos7.9-x86_64】profile关联的ks文件是sample.ks,这个sample.ks默认路径位于【/var/lib/cobbler/templates】下。
#接下来我们要做的,就是基于原始的ks模版文件,进行修改。修改完成后,修改profile中的Kickstart文件路径,使其指向我们自己的ks模版文件。)
cobbler profile report --name=centos7.9-x86_64
ll /var/lib/cobbler/templates




3.2、新增导入镜像的全自动安装ks文件
bash
#新增导入镜像的全自动安装配置ks文件(如:centos7系统的全自动安装配置)
#1-进入镜像全自动安装配置目录创建该镜像对应的ks文件
cd /var/lib/cobbler/templates
vi centos7.ks
#【centos7.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
auth --useshadow --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all --initlabel
# Use text mode install
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
url --url=http://192.168.1.35/cblr/links/centos7.9-x86_64/
# If any cobbler repo definitions were referenced in the kickstart profile, include them here.
$yum_repo_stanza
# Network information
$SNIPPET('network_config')
# Reboot after installation
reboot
#Root password
rootpw --iscrypted $default_password_crypted
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Shanghai
# Install OS instead of upgrade
install
# Clear the Master Boot Record
zerombr
# Allow anaconda to partition the system as needed
#autopart
part /boot --fstype="xfs" --ondisk=sda --size=2048
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
$SNIPPET('log_ks_pre')
$SNIPPET('kickstart_start')
$SNIPPET('pre_install_network_config')
# Enable installation monitoring
$SNIPPET('pre_anamon')
%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
%end
%post --nochroot
$SNIPPET('log_ks_post_nochroot')
%end
%post
$SNIPPET('log_ks_post')
# Start yum configuration
$yum_config_stanza
# End yum configuration
$SNIPPET('post_install_kernel_options')
$SNIPPET('post_install_network_config')
$SNIPPET('func_register_if_enabled')
$SNIPPET('download_config_files')
$SNIPPET('koan_environment')
$SNIPPET('redhat_register')
$SNIPPET('cobbler_register')
# Enable post-install boot notification
$SNIPPET('post_anamon')
# Start final steps
$SNIPPET('kickstart_done')
# End final steps
%end
#2-修改导入镜像使用的自动安装ks文件为自定义的ks文件(如:centos7.ks)
#2.1-查看Cobbler中目前导入的镜像
cobbler list
#2.2-修改Cobbler中导入镜像名称为【centos7.9】的配置文件【centos7.9-x86_64】的全自动安装配置ks文件为【自建的centos7.ks】
cobbler profile edit --name centos7.9-x86_64 --autoinstall=centos7.ks
#查看指定的配置文件内容(如:查看名为【centos7.9-x86_64】的配置文件内容)
cobbler profile report --name=centos7.9-x86_64

使用虚拟机手把手教你安装生产环境Linux系统------以AImaLinux与OpenEuler为例


3.3、让修改后的配置同步并生效及其生成可引导加载程序
bash
#生成可引导GRUB2的引导加载程序【在cobbler3版本之后,还需要手动执行如下命令生成GRUB2引导程序】
cd /var/lib/cobbler/loaders/
cobbler mkloaders
#让修改后的配置同步到Cobbler中并生效
cobbler sync
systemctl restart cobblerd
#查看cobblerd、tftp.sock、dhcpd服务是否都正常运行中
systemctl status cobblerd.service
systemctl status tftp.socket
systemctl status dhcpd



四、测试客户端全自动安装系统
现在找一台全新的服务器或者新建一个虚拟机与我们这里搭建好的Cobbler服务器在同一个网段内(如:我这里是192.168.1网段);然后设置该设备从网络引导是否可以显示【centos7.9-x86_64】并选择该镜像后,耐心等待全自动安装我们部署好的Centos7.9系统即可,如下图所示:






到这里,恭喜你,从零到一实现了全路径的【基于Cobbler的系统自动化安装部署实践】!!!
