银河麒麟V10SP1 Kickstart实战:从图形配置到后脚本优化的全链路避坑手册
第一次接触银河麒麟V10SP1的Kickstart无人值守安装时,我像大多数新手一样,以为照着官方文档就能顺利完成。直到凌晨三点还在排查为什么分区方案没生效、后脚本执行失败时,才意识到这趟旅程需要更多实战经验。本文将分享那些官方手册没写清楚的细节,特别是如何避开图形工具生成的配置陷阱,以及如何编写健壮的安装后脚本。
1. 图形化工具system-config-kickstart的隐藏陷阱
许多教程都会推荐使用system-config-kickstart这个图形工具生成基础配置,但它生成的ks.cfg文件在实际部署中可能会遇到各种兼容性问题。经过多次测试,我发现以下几个关键点需要特别注意:
网络配置的坑:
- 图形界面生成的
--device=ens33在实际环境中可能因网卡命名规则不同而失效 --onboot=off参数会导致安装后网络服务不自动启动- 静态IP配置缺少DNS设置时会导致后续软件包安装失败
推荐改用以下手动配置:
network --bootproto=static --ip=192.168.1.100 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=8.8.8.8 --hostname=kylin-node01 --device=link分区方案的局限性:
- 图形工具只能生成基础的autopart方案
- 无法直接配置LVM thin provisioning等高级特性
- 对NVMe磁盘的支持需要额外参数
一个可靠的手动分区示例:
clearpart --all --initlabel part /boot --fstype="ext4" --size=1024 part pv.01 --size=1 --grow volgroup vg_root pv.01 logvol / --fstype="xfs" --name=lv_root --vgname=vg_root --size=20480 logvol swap --fstype="swap" --name=lv_swap --vgname=vg_root --size=40962. 定制化ks.cfg文件的进阶技巧
当基础配置无法满足需求时,就需要手动编辑ks.cfg文件。以下是几个实战中总结的关键技巧:
软件包选择的艺术:
%packages @^kylin-server-product-environment kexec-tools vim-enhanced -*firmware %end注意:使用
-前缀可以排除特定软件包组,这在精简安装时特别有用
多阶段脚本执行:
%pre --interpreter=/bin/bash #!/bin/bash # 预安装脚本:检查硬件配置 if [ $(grep -c processor /proc/cpuinfo) -lt 4 ]; then echo "ERROR: Insufficient CPU cores" >&2 exit 1 fi %end %post --nochroot #!/bin/bash # 安装后脚本(chroot前):处理许可证文件 cp /run/install/repo/.kyinfo $ANA_INSTALL_PATH/etc/ %end %post #!/bin/bash # 主安装后脚本:系统基础配置 sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config %end3. 后脚本(%post)的可靠性工程
后脚本执行失败是导致部署不完整的最常见原因。以下是提升可靠性的关键策略:
错误处理最佳实践:
%post #!/bin/bash exec >/root/postinstall.log 2>&1 set -xe # 检查网络连通性 ping_check() { for i in {1..5}; do if ping -c1 8.8.8.8 &>/dev/null; then return 0 fi sleep 5 done return 1 } # 配置yum源 cat > /etc/yum.repos.d/kylin.repo <<EOF [ks10sp1] name=Kylin Linux Advanced Server 10 SP1 baseurl=file:///mnt/iso enabled=1 gpgcheck=0 EOF # 关键软件包安装 yum_install() { for pkg in "$@"; do if ! rpm -q $pkg &>/dev/null; then yum -y install $pkg || echo "WARN: Failed to install $pkg" >> /root/postinstall.err fi done } yum_install openssh-server chrony telnet %end依赖管理技巧:
- 使用
rpm -q检查软件包是否已安装 - 对非关键操作添加错误抑制(
|| true) - 为长时间操作设置超时(
timeout 300 command) - 记录详细日志到
/var/log/postinstall.log
4. 镜像制作与验证的完整流程
当ks.cfg文件准备就绪后,制作可启动ISO的完整过程如下:
目录结构准备:
mkdir -p /iso/{isolinux,images,ks} mount /dev/cdrom /mnt rsync -a /mnt/ /iso/ cp ks.cfg /iso/ks/关键配置文件修改:
- 编辑
/iso/isolinux/isolinux.cfg:
label linux menu label ^Install Kylin V10SP1 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=KYLIN-V10 inst.ks=hd:LABEL=KYLIN-V10:/ks/ks.cfg quiet- 修改
/iso/EFI/BOOT/grub.cfg:
menuentry 'Install Kylin V10SP1' { linuxefi /images/pxeboot/vmlinuz inst.ks=hd:LABEL=KYLIN-V10:/ks/ks.cfg initrdefi /images/pxeboot/initrd.img }ISO生成命令:
mkisofs -U -A "KYLIN-V10" -V "KYLIN-V10" \ -volset "KYLIN-V10" -J -joliet-long -r -v \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -eltorito-alt-boot -e images/efiboot.img \ -no-emul-boot -o /kylin10-custom.iso /iso验证环节:
- 使用
isoinfo -d -i kylin10-custom.iso检查卷标 - 通过虚拟机测试ISO启动流程
- 检查
/root/anaconda-ks.cfg与预期配置的一致性 - 验证后脚本生成的日志文件是否完整
5. 典型问题排查指南
即使按照最佳实践操作,仍可能遇到各种意外情况。以下是几个常见问题的解决方案:
安装卡在分区阶段:
- 检查磁盘识别情况:在安装界面按Ctrl+Alt+F2切换到控制台,执行
lsblk - 确认ks.cfg中的磁盘标识符与实际一致
- 尝试添加
ignoredisk --only-use=/dev/sda参数
后脚本未执行:
- 检查
/var/log/anaconda/postinstall.log是否存在 - 确认脚本开头包含shebang(如
#!/bin/bash) - 确保没有语法错误:
bash -n /path/to/script
网络配置不生效:
%post nmcli con add con-name eth0 ifname eth0 type ethernet ip4 192.168.1.100/24 gw4 192.168.1.1 nmcli con mod eth0 ipv4.dns "8.8.8.8 8.8.4.4" nmcli con up eth0 %end软件源配置问题:
- 使用
yum repolist all检查可用仓库 - 临时使用HTTP源测试连通性:
%post curl -I http://archive.kylinos.cn | head -1 %end经过数十次实际部署的验证,这些技巧能解决90%以上的常见问题。最难排查的往往是那些看似简单的配置错误,比如错把-当成_,或者遗漏了一个分号。建议在正式部署前,先在测试环境完整跑通整个流程。