启动 Alpine netboot 后运行脚本

启动 Alpine netboot 后运行脚本

我从这个网址下载了 alpine netboot 发行版:

https://dl-cdn.alpinelinux.org/alpine/v3.16/releases/x86/alpine-netboot-3.16.1-x86.tar.gz

我已经用 qemu 运行了一个虚拟机,方式如下:

qemu-system-i386 -m 256 -kernel boot/vmlinuz-lts -initrd boot/initramfs-lts -append "console=ttyS0 ip=dhcp alpine_repo=http://dl-cdn.alpinelinux.org/alpine/edge/main/" 

该命令会创建一个虚拟机,并安装22个apk包。

我可以安装额外的 apk 包,但我必须手动完成(apk add 命令)。

如何在 qemu 命令行中编写脚本包安装?

请注意我可以更换http://dl-cdn.alpinelinux.org/通过本地镜像。所以我也可以更改存储库上的文件

谢谢

答案1

它不完全是“脚本化”软件包安装,但在手动安装软件包后,您可以使用命令创建一个覆盖文件lbu,然后在后续启动时应用该文件。请参阅https://wiki.alpinelinux.org/wiki/Alpine_local_backuphttps://wiki.alpinelinux.org/wiki/PXE_boot了解详情。

例如,如果我使用您的命令启动,然后随后运行:

apk add --update curl git

我可以通过运行来创建本地备份文件lbu package。这将apkovl在我当前目录中创建一个文件:

localhost:~# ls
localhost.apkovl.tar.gz

如果我将此文件放在可以通过 http 访问的本地系统上的某个位置,我就可以像这样启动映像:

qemu-system-i386 -m 256 -kernel boot/vmlinuz-lts \
  -initrd boot/initramfs-lts \
  -append "console=ttyS0 ip=dhcp alpine_repo=http://dl-cdn.alpinelinux.org/alpine/edge/main/ apkovl=http://10.0.2.2:8080/localhost/apkovl.tar.gz" 

当alpine完成启动后,我会发现curlgit已经安装好了。


如果您想在启动时明确运行脚本,而不是简单地安装软件包,您可以:

  1. 启用local服务:

    rc-update add local default
    
  2. 将您的脚本放入/etc/local.d/<something>.start并确保它是可执行的。

  3. 按照前面的说明生成和使用覆盖。

相关内容