Я пытаюсь установить pkg во встроенную систему с ограниченным пространством. Я использую dpkg от busybox. Чтобы 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
Как отметить сетевую базу как установленную? Я имею в виду чит, чтобы позволить dpkg лечить его можно было установить.
Вам нужен dpkg, чтобы игнорировать зависимости, используйте следующую команду:
dpkg -i --force-depends mypackage.deb
Или, если у вас возникнут другие проблемы, используйте:
dpkg -i --force-all mypackage.deb
Но будьте осторожны, зависимости пакетов почти всегда правда зависимости, например, программа может быть связана с ними.
И используя приведенные выше команды, пакет будет установлен нормально, но dpkg пометит его как сломанный.
В любом случае ответом может быть использование 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 находится в моей папке iso, которую я использую для создания загрузочного компакт-диска.
После загрузки компакт-диска, на котором есть только минималистский initramfs busybox, я могу просто распаковать эту файловую систему и завершить установку:
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
На данный момент у меня есть готовый настроенный системный корень debian в / tmp / root.
Ответ, очевидно, неполный, но если бы мы смогли выяснить, какие файлы необходимы, и удастся очистить систему busybox, мы могли бы найти способ. Этот ресурс тоже был весьма полезен - http://lists.busybox.net/pipermail/busybox/2014-June/081017.html
Я должен иметь возможность переключиться на новый корень таким образом, но в моем ядре нет devtmpfs, который требуется для systemd init:
echo > /proc/sys/kernel/hotplug
umount /proc
umount /sys
exec switch_root -c /dev/console /tmp/root /sbin/init
С уважением, Роб