我正在尝试实现无人值守的Alpine Linux安装。我穿越了阿尔卑斯山自动安装指南但安装过程中仍然需要很多手动干预!例如,提供 root 用户名、创建应答文件 ( setup-alpine -c answerfileName
)、编辑应答文件、调用实际安装命令 ( setup-alpine -f answerfileName
) 以及重置 root 密码。
有没有办法将应答文件包含在 ISO 映像中,在开始安装之前默认选择 root 用户,并在安装完成后设置其密码。在 CentOS 中,我们可以在以下位置提供 kickstart 文件isolinux.cfg
:
label MyMENU2
menu label ^Deploy Manager Node
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=MYISO inst.ks=hd:LABEL=MYISO:/ks/ks1.cfg quiet
Alpine Linux 中有类似的东西吗?
答案1
Alpine 有一项名为 的服务local
。
当该服务启动时,它将执行*.start
在/etc/local.d/
.
但local
默认情况下不启用服务。
按照以下步骤启用local
服务,并让它执行我们的脚本:
编写安装脚本,保存到
myscript.start
参考:https://docs.alpinelinux.org/user-handbook/0.1a/Installing/manual.html
例如:
# show script's output exec > >(tee -a /dev/tty0) 2>&1 # delete this hack # otherwise this script will run on the system we newly installed rm -f /etc/local.d/myscript.start rm -f /etc/runlevels/default/local # do the system installation setup-interfaces -a rc-update add networking boot echo root:123@@@ | chpasswd printf '\nyes' | setup-sshd setup-keymap us us setup-timezone -i Asia/Shanghai setup-ntp chrony || true true >/etc/apk/repositories setup-apkrepos -1 printf 'y' | setup-disk -m sys /dev/sda reboot
提炼
initramfs-lts
。需要在空文件夹中执行此操作zcat initramfs-lts | cpio -idm rm -f initramfs-lts
编辑
init
文件。寻找exec switch_root $switch_root_opts $sysroot $chart_init "$KOPT_init" $KOPT_init_args
在命令前添加以下 3 行
exec
:cp /myscript.start \$sysroot/etc/local.d/ chmod a+x \$sysroot/etc/local.d/myscript.start ln -s /etc/init.d/local \$sysroot/etc/runlevels/default/
复制到文件
myscript.start
的同一文件夹init
重新包装
initramfs-lts
find . | cpio -o -H newc | gzip -1 >initramfs-lts
从 iso替换
initramfs-lts
为新的。
答案2
对于虚拟机,我编写了一些代码来直接使用原始 .iso 来自动安装。看一眼https://gitlab.alpinelinux.org/ultrotter/alpine-autosetup进行初步概念证明。