我正在尝试在空间有限的嵌入式系统中安装 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