大多数 Busybox 问题都与用户在启动时由于某些未知问题而进入 Busybox shell 有关。这必定使 Busybox 成为最令人讨厌的软件之一。
我的问题恰恰相反。我想在启动时故意从 GRUB 启动 Busybox,甚至在 GRUB 之前启动。这可能吗?我该怎么做?目的是在重新启动启动顺序之前执行一些命令。所以基本上我想执行一些命令以使一些硬件可供引导加载程序使用。
答案1
您将需要制作一个自定义的 initrd。
提取 initrd,注意我将其~/initrd
用作工作目录
cp /boot/initrd_your_version ~
cd ~/initrd
gzip -dc ../initrd_your_version | cpio -imvd --no-absolute-filenames
您没有提到您想做什么,所以我只能在这里提供一般性建议。
现在,将您需要的任何库和/或二进制文件添加到 中~/initrd
。使用 ldd 来识别依赖项。
编辑 ~/initrd/init ,它是一个 shell 脚本,因此添加您需要的内容。
打包
cd ~/initrd
find . | cpio --quiet --dereference -o -H newc | gzip -9 > ../initrd-custom.img.your_version
也可以看看:http://en.gentoo-wiki.com/wiki/Initramfs
确定该链接是 gentoo,但我不知道 Ubuntu 是否有如此详细的文档。
答案2
我曾使用这种方式远程解锁加密分区,所以我想它可以满足您的需要。
- 嵌入
dropbear
initramfs。
apt-get install openssh-server dropbear busybox
- 复制已自动生成的 SSH 密钥。
scp [email protected]:/etc/initramfs-tools/root/.ssh/id_rsa ~/id_rsa.initramfs
- 如果您没有使用 DHCP,请编辑
/etc/default/grub
并在您的配置中添加类似的行:
GRUB_CMDLINE_LINUX="ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>"
- 重新加载 grub 配置
update-grub
和
reboot
请小心,因为不同的 grub 版本有不同的配置选项。
现在您应该能够通过 SSH 密钥进行远程连接并在启动过程中传递一些命令。
您可以找到更多信息这里。