我从这个网址下载了 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_backup和https://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完成启动后,我会发现curl
和git
已经安装好了。
如果您想在启动时明确运行脚本,而不是简单地安装软件包,您可以:
启用
local
服务:rc-update add local default
将您的脚本放入
/etc/local.d/<something>.start
并确保它是可执行的。按照前面的说明生成和使用覆盖。