busybox dpkg 使用方法

busybox dpkg 使用方法

我正在尝试在空间有限的嵌入式系统中安装 pkg。我使用 busybox 的 dpkg。为了让 dpkg 工作,我只需触摸一个文件

touch /var/lib/dpkg/status                                               

但是,它仍然无法工作。

$dpkg -i ntpdate_4.2.4p4+dfsg-8lenny3_sh4.deb                           
dpkg: package ntpdate depends on netbase, which is not installed or flagged to be installed

如何将 netbase 标记为已安装?我的意思是作弊让 dpkg 认为它可以安装。

答案1

您需要 dpkg 来忽略依赖关系,使用以下命令:

dpkg -i --force-depends mypackage.deb

或者,如果您遇到更多问题,请使用:

dpkg -i --force-all mypackage.deb

但要注意,包依赖关系几乎总是真的依赖关系,例如,程序可能会与它们相链接。

使用上述命令,将正确安装该包,但 dpkg 会将其标记为损坏。

答案2

答案可能是使用 debootstrap。以下是操作方法https://www.debian.org/releases/lenny/arm/apds03.html.en

我设法使用的过程是使用 --foreign 参数,该参数创建一个可引导的根文件系统。我的命令:

debootstrap --foreign --arch amd64 --variant minbase \
   --keyring /usr/share/keyrings/debian-keyring.gpg \
   jessie debstaged

cd debstaged
tar -czf ../iso/debstaged.tar.gz *
cd ..

根文件系统 tar/gzipped 位于我用来创建可启动 CD 的 iso 文件夹中

一旦我启动仅具有极简 busybox initramfs 的 CD,我就可以简单地解压该文件系统并完成安装:

mount /dev/sr0 /mnt
mkdir /tmp/root
mount -t tmpfs debroot /tmp/root
cd /tmp/root
tar -xzf /mnt/debstaged.tar.gz
umount /mnt
chroot . /debootstrap/debootstrap --second-stage

此时,我在 /tmp/root 中已经有一个配置好的 debian 系统根目录。

答案显然是不完整的,但如果我们能找出哪些文件是必要的,并设法将 busybox 系统去二进制化,那就有办法了。这个资源也很有用 -http://lists.busybox.net/pipermail/busybox/2014-June/081017.html

我应该能够像这样切换到新的根,但是我的内核没有 systemd init 所需的 devtmpfs:

echo > /proc/sys/kernel/hotplug
umount /proc
umount /sys

exec switch_root -c /dev/console /tmp/root /sbin/init

谨致问候,Rob

相关内容