银河麒麟V10SP1 Kickstart实战从图形配置到后脚本优化的全链路避坑手册第一次接触银河麒麟V10SP1的Kickstart无人值守安装时我像大多数新手一样以为照着官方文档就能顺利完成。直到凌晨三点还在排查为什么分区方案没生效、后脚本执行失败时才意识到这趟旅程需要更多实战经验。本文将分享那些官方手册没写清楚的细节特别是如何避开图形工具生成的配置陷阱以及如何编写健壮的安装后脚本。1. 图形化工具system-config-kickstart的隐藏陷阱许多教程都会推荐使用system-config-kickstart这个图形工具生成基础配置但它生成的ks.cfg文件在实际部署中可能会遇到各种兼容性问题。经过多次测试我发现以下几个关键点需要特别注意网络配置的坑图形界面生成的--deviceens33在实际环境中可能因网卡命名规则不同而失效--onbootoff参数会导致安装后网络服务不自动启动静态IP配置缺少DNS设置时会导致后续软件包安装失败推荐改用以下手动配置network --bootprotostatic --ip192.168.1.100 --netmask255.255.255.0 --gateway192.168.1.1 --nameserver8.8.8.8 --hostnamekylin-node01 --devicelink分区方案的局限性图形工具只能生成基础的autopart方案无法直接配置LVM thin provisioning等高级特性对NVMe磁盘的支持需要额外参数一个可靠的手动分区示例clearpart --all --initlabel part /boot --fstypeext4 --size1024 part pv.01 --size1 --grow volgroup vg_root pv.01 logvol / --fstypexfs --namelv_root --vgnamevg_root --size20480 logvol swap --fstypeswap --namelv_swap --vgnamevg_root --size40962. 定制化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/SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config %end3. 后脚本(%post)的可靠性工程后脚本执行失败是导致部署不完整的最常见原因。以下是提升可靠性的关键策略错误处理最佳实践%post #!/bin/bash exec /root/postinstall.log 21 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] nameKylin Linux Advanced Server 10 SP1 baseurlfile:///mnt/iso enabled1 gpgcheck0 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.log4. 镜像制作与验证的完整流程当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.cfglabel linux menu label ^Install Kylin V10SP1 kernel vmlinuz append initrdinitrd.img inst.stage2hd:LABELKYLIN-V10 inst.kshd:LABELKYLIN-V10:/ks/ks.cfg quiet修改/iso/EFI/BOOT/grub.cfgmenuentry Install Kylin V10SP1 { linuxefi /images/pxeboot/vmlinuz inst.kshd:LABELKYLIN-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. 典型问题排查指南即使按照最佳实践操作仍可能遇到各种意外情况。以下是几个常见问题的解决方案安装卡在分区阶段检查磁盘识别情况在安装界面按CtrlAltF2切换到控制台执行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%以上的常见问题。最难排查的往往是那些看似简单的配置错误比如错把-当成_或者遗漏了一个分号。建议在正式部署前先在测试环境完整跑通整个流程。