Назад | Перейти на главную страницу

Как использовать dpkg в busybox

Я пытаюсь установить 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

С уважением, Роб