У меня есть снимок rootfs встроенной системы ARM, которая использует rpm в качестве менеджера пакетов, как двоичный образ, который можно монтировать на петле на моем хосте, так и тарбол.

Я хотел бы выдать несколько rpm-запросов для этого снимка, например, rpm -qa или rpm -qf /some/file и так далее.

Есть ли способ сделать это на моем хосте x86?

На данный момент я вынужден прибегнуть к фактическому запуску образа под qemu-arm и выполнить запросы к моделируемой цели, но это не удобный способ сделать что-то.

Я попытался поиграть с --dbpath и --root в rpm и rpmdb , но безрезультатно (они просто молча завершаются без каких-либо ошибок).

1 ответ1

0

В моей системе Debian пакет qemu-user-static содержит статически связанные двоичные файлы эмуляции пользователя (в отличие от эмуляции системы), включая /usr /bin /qemu-arm-static

Все они зарегистрированы с помощью средства binfmt (с помощью этого пакета с помощью вспомогательного пакета binfmt-support). Так, например:

# cat /proc/sys/fs/binfmt_misc/qemu-arm
enabled
interpreter /usr/bin/qemu-arm-static
flags: OC
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff

Теперь просто смонтируйте корневую файловую систему arm в /mnt и скопируйте /usr /bin /qemu-arm-static (двоичный файл x86) в /mnt /usr /bin /qemu-arm-static

С вашего хоста x86, просто chroot:

chroot /mnt

И теперь вы можете запускать большинство команд и думать, что вы работаете с системой arm (сайт qemu документирует, что не работает, включая вызовы ptrace). Не забудьте при необходимости смонтировать другие файловые системы (/proc, /var ...).

Я думаю, что LXC может работать с такой эмуляцией внутри контейнера. Выполнение chroot не изолирует, а установка пакетов может вызвать проблемы (запускаются бинарные демоны ...)

Вы не сказали, какой дистрибутив вашего хоста, поэтому я не могу сказать больше. Ручной метод добавления интерпретатора для двоичного исполняемого файла описан там:https://www.kernel.org/doc/Documentation/binfmt_misc.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .