自动化 Alpine Linux 安装

自动化 Alpine Linux 安装

我正在尝试实现无人值守的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服务,并让它执行我们的脚本:

  1. 编写安装脚本,保存到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
    
  2. 提炼initramfs-lts。需要在空文件夹中执行此操作

    zcat initramfs-lts | cpio -idm
    rm -f initramfs-lts
    
  3. 编辑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/
    
  4. 复制到文件myscript.start的同一文件夹init

  5. 重新包装initramfs-lts

    find . | cpio -o -H newc | gzip -1 >initramfs-lts
    
  6. 从 iso替换initramfs-lts为新的。

答案2

对于虚拟机,我编写了一些代码来直接使用原始 .iso 来自动安装。看一眼https://gitlab.alpinelinux.org/ultrotter/alpine-autosetup进行初步概念证明。

相关内容