1、概述
1.1、背景
由于种种原因,机房服务器无法通过PXE方式自动重装,同时又不愿意手动或自动登录带外进行重装操作,可以通过以下方法进行服务器系统的自动安装。
1.2、前提
- 服务器已安装系统
- 系统除了系统盘之外,还需要有一块数据盘
- 依赖上次安装留下的kickstart文件,如果没有也能手动输出
1.3、方案
服务器启动后,会通过grub引导进入系统,修改grub配置可以引导使用OS镜像文件进行启动。
一般情况下OS镜像文件通过带外的虚拟光驱挂载到/dev/cdrom,替换方法是把镜像文件的内容拷贝到一个数据盘上。
2、实战
以下通过示例系统进行操作演示,系统盘在/dev/sdc,数据盘使用/dev/sda。
2.1、清理数据盘
直接使用mkfs格式化成ext4格式后挂载。
# 格式化/dev/sda
echo y | mkfs -t ext4 /dev/sda
2.2、上传OS镜像文件
提前准备好需要安装的系统iso文件,并上传到服务器上。
为了方便文档的后续步骤说明,上传到镜像文件命名为target.iso。
2.3、挂载镜像和数据盘
# 挂载镜像文件
mkdir /root/temp
mount /root/target.iso /root/temp
# 挂载/dev/sda数据盘
mkdir /root/sda
mount /dev/sda /root/sda
# 拷贝镜像内容到数据盘
cp -r /root/temp/* /root/sda/
2.4、拷贝kickstart文件
一般系统安装完会有当前系统的安装信息(包括时区、系统盘划分、预装软件、账号密码),文件是/root/anaconda-ks.cfg,在这个文件的基础上可以直接修改使用。
# 拷贝kickstart文件到数据盘
cp /root/anaconda-ks.cfg /root/sda/ks.cfg
2.5、导出当前网络配置(可选)
把网卡的配置文件(/etc/sysconfig/network-scripts目录下的文件)导出成一个shell脚本,导出路径为/root/network-scripts.txt。
注意:Rocky Linux使用NetworkManager配置网卡,因此配置文件不再在/etc/sysconfig/network-scripts目录下,方法不适用。
prefix='/etc/sysconfig/network-scripts'
for file in $prefix/*; do
if [[ $file == $prefix/ifcfg-bond* ]] \
|| [[ $file == $prefix/ifcfg-en* ]] \
|| [[ $file == $prefix/route* ]]; then
echo "cat > $file << EOF
$(cat $file)
EOF
" >> /root/network-scripts.txt
fi
done
2.6、修改kickstart文件
修改kickstart文件,添加自定义内容。
上图中,post追加的是我们在2.5章节导出的网卡配置脚本。
2.7、生成grub配置
一般grub的配置文件是/etc/grub2-efi.cfg或者/etc/grub2.cfg,修改/etc/grub.d/40_custom后重新用命令生成配置。
x86和ARM的主要区别是在grub中的命令,一个是linuxefi和initrdefi,一个是linux和initrd。
海光x86命令如下:
# 海光x86
cat >> /etc/grub.d/40_custom << EOF
menuentry 'Automatic Installation' --class fedora --class gnu-linux --class gnu --class os {
search --no-floppy --fs-uuid --set=root $(ls -lh /dev/disk/by-uuid/ | grep sda | awk '{print$9}')
linuxefi /images/pxeboot/vmlinuz inst.ks=hd:/dev/sda inst.stage2=hd:/dev/sda console=tty
initrdefi /images/pxeboot/initrd.img
}
EOF
鲲鹏ARM命令如下:
# 鲲鹏ARM
cat >> /etc/grub.d/40_custom << EOF
menuentry 'Automatic Installation' --class fedora --class gnu-linux --class gnu --class os {
search --no-floppy --fs-uuid --set=root $(ls -lh /dev/disk/by-uuid/ | grep sda | awk '{print$9}')
linux /images/pxeboot/vmlinuz inst.ks=hd:/dev/sda inst.stage2=hd:/dev/sda console=tty
initrd /images/pxeboot/initrd.img
}
EOF
2.8、生成配置
# 重新生成配置
grub2-mkconfig -o /etc/grub2-efi.cfg
# 此处指定下次重启使用第三个选项(正常默认是两个,我们新增了一个,可以参考后续的图片说明为什么是第三个)
grub2-reboot 2
2.9、重启服务器
服务器系统中直接执行重启命令,或者带外进行重启。
2.10、等待重装完成
安装过程可以通过带外进行查看。
下图可以看到我们2.7章节追加的“Automatic Installation”选项,并且可以看到为什么2.8章节说的是第三个选项。
自动根据KickStart文件内容填充安装过程需要配置的选项,安装完成后会自动重启。
如果在2.5章节配置了网络相关,安装完成后可以直接连接上去;如果没有,就需要登录带外进行网络配置。
3、总结
建议是在能登录带外的情况下进行使用,盲目配置很容易卡在系统启动引导的界面而无法进入系统。
如果在环境稳定且频繁需要重装的情况,该方法能在不改动环境网络的情况下,快速完成服务器系统的重装。