Как может я chroot в файловую систему с другим architechture?

Хорошо, я нашел путь, хотя это не выглядит очень чистым ;)

Я запущу с конца - выполняющий эту остроту, скажет Вам истину:

grep "USB.*pci" /proc/acpi/wakeup |\
    cut -d ':' -f 2- |\
    while read aaa; do \
        find /dev/.udev \
            -name "*$aaa*" \
            -print \
            -exec grep "$aaa" /proc/acpi/wakeup \; -exec echo \; ;\
    done

Хороший, не так ли? И вот, как это работает:

  • Начало должно быть очевидным: grep "USB.*" /proc/acpi/wakeup выписки из списка только USB-устройства, которые имеют известный sysfs узел.
  • cut -d ':' -f 2- листы просто конечное (числа) после 'PCI': на каждой строке.
  • Затем для каждого окончания (aaa=0000:00:1d.2 и так далее), попытайтесь найти udev символьную ссылку устройства, которая содержит строку.
  • Для каждой найденной символьной ссылки устройства, команда находки:
    • печатает название udev символьной ссылки, <-это - самая полезная часть
    • выполняет grep для отображения строки от /proc/acpi/wakeup это соответствует найденному устройству,
    • добавляет пустую строку для выходной ясности.

Так, благодаря значимому именованию символьных ссылок устройства udev можно сказать, какое USB-устройство является клавиатурой, мышью и т.д.

38
11.03.2015, 22:46
9 ответов

Вы не можете chroot в другую архитектуру. chrooting Вы выполняете двоичные файлы (от chroot) на Вашей архитектуре. Выполнение двоичных файлов ARM на x86 (и x86_64 в том вопросе) привело бы к "Исполнительной ошибке формата".

Если Вы захотите выполнить двоичные файлы от другой архитектуры, то Вам будет нужен Эмулятор. Qemu является хорошим кандидатом на это, но необходимо будет изучить, как использовать его. Это включило бы создание RootFS и компиляцию ядра для ARM. Вам будет нужен набор инструментальных средств для компиляции двоичных файлов ARM (и ядро), возможно. Одна вещь наверняка: Забудьте chroot метод, Вы не можете выполнить двоичные файлы, скомпилированные для ARM на x86 (x86_64).

Править: После светской беседы с @UrichDangel я понял, должно быть возможно войти в chroot среду с qemu-пользовательскими программами (qemu-рука в этом случае). Chroot должен выполнять qemu-руку, скомпилированную для Вашей архитектуры хоста, затем qemu-рука может выполнить Ваш/bin/sh (скомпилированный для руки).

14
27.01.2020, 19:36
  • 1
    Необходимо смочь использовать binfmt и qemu в комбинации для выполнения не собственных целей - wiki.debian.org/QemuUserEmulation –  Ulrich Dangel 29.06.2012, 01:59
  • 2
    , который я знаю, как использовать Qemu для эмуляции. По-видимому, можно использовать его с chroot, хотя ясно я не могу удаться как. –  Jivings 29.06.2012, 02:01
  • 3
    , который я знаю, как использовать Qemu для эмуляции. По-видимому, можно использовать его с chroot, хотя ясно я не могу удаться как. –  Jivings 29.06.2012, 02:01
  • 4
    @UlrichDangel, Да, это - хорошая информация. Но я думаю, что OP не искали этого короля решения. binfmt был бы возможен, после того как он правильно установил qemu с эмуляцией qemu-руки, но я полагаю, что он желает ввести свою среду эмуляции ARM (например, Raspberry Pi), где ему был бы нужен qemu-system-arm. –  0xAF 29.06.2012, 02:07
  • 5
    @0xAF, но binfmt/qemu-user решение точно, во что OP описала, способность к chroot в руку chroot и выполнила команды без потребности создать специализированный rootfs и т.д. –  Ulrich Dangel 29.06.2012, 02:09
  • 6
    @UlrichDangel, теперь на секунде, хотя, я полагаю, что Вы правы. Возможно ввести эмулированный chroot qemu-рукой (или должен быть). Я Отредактирую свой комментарий к этому. –  0xAF 29.06.2012, 02:16

Я думаю, что проблема состоит в том, что Вы не должны копировать qemu-arm но qemu-arm-static. Это - статический скомпилированный исполняемый файл, который в состоянии работать из chroot без любых библиотек.

Можно также заглянуть /proc/sys/fs/binfmt_misc если там существует файл qemu-arm. Если не перезапускают сервис binfmt_support.

11
27.01.2020, 19:36
  • 1
    Secure Erase я должен был вручную работать: обновление-binfmts - importdir/var/lib/binfmts/-импортирует затем, все обнаружилось в/proc/sys/fs/binfmt_misc и работах chroot. –  Mariano Alvira 03.01.2015, 00:58

Я просто столкнулся с той же проблемой о Ubuntu. Я действительно имел binfmt настроенный и qemu-arm-static скопированный в того же chroot-редактора соединяют каналом как в хост-системе.

После часа я сделал set|grep bash на хост-машине. Я нашел, что имел /bin/bash в двух огибающих переменных: SHELL и SUDO_COMMAND. После замены переменных работал мой chroot к ARM:

SHELL=/bin/sh SUDO_COMMAND=/bin/sh chroot hd
0
27.01.2020, 19:36
[1178704]Вы определенно можете 'chroot' в (смонтированную) файловую систему, предназначенную для другой архитектуры, и сделать некоторую осмысленную работу, вам просто нужны правильные инструменты.[12212]Взгляните на PRoot, которая является реализацией chroot в пользовательском пространстве, mount --bind и binfmt_misc: [1179236]https://proot-me.github.io/[12213]Вместе с эмуляторами пользовательского режима QEMU, вы все настроены.[12214]Хотя вы обычно не можете выполнить 'полную' загрузку (т.е. запуск init и служб), достаточно хорошо запустить некоторые двоичные файлы из их 'естественного' места, с доступом ко всем их конфигурационным файлам, включая некоторые, которые привязаны к системе 'host', и т.д.[1178711].
6
27.01.2020, 19:36

Это не похоже на то, что вы сказали, что он, по крайней мере, редактирует файл Resolv.conf, чтобы начать с. Я изначально исключил все вещи, связанные с функциями уровня ОС, чисто на основе этого.

Я знаю, что вы упомянули, что ваш домен имеет правильность в PFSense, но в каком контексте?

в вашем PFSense, перейдите в SpearVPN Server -> Настройки клиента -> Домен DNS по умолчанию. Этот флажок проверен? Если это так, это наследенно правильно? Если оно появляется пустой, проверьте космический символ. Я имею в виду, действительно ... если это пусто, снимите его. Далее тест, чтобы посмотреть, если добавлять TEX.com и перезапустите енот на воротах. См. Если подключение изменяет ваш Resolv.conf с доменом Test.com.

-121--116439-

Чтобы получить его на работу, я установил QEMU-Static-Arm и BINFMT-yumb от AUR.

Прочитайте комментарии для QEMU-User-Static . Мне пришлось обновить PKGBUILD с самым последним URL-адресом и загрузкой URL и хешими для MakePKG.

(Для установки из AUR загрузите Tarball, UNTRAR , CD , запустить MAKEPKG -I )

Ответ Христианского Волфа важен. UPDATE-BINFMTS не выполняется должным образом, чтобы включить эти форматы. Для этого я бегал:

update-binfmts --importdir /var/lib/binfmts/ --import

, как описано в Manpage для обновления-Binfmts. После этого CAT / PROC / SYS / FS / BINFMT_MISC покажет различные Binfmts.

Затем убедитесь, что скопируйте QEMU - * - статичный в каталог USR / BIN / в том, что вы хотите Chroot, а затем Chroot должно сработать.

7
27.01.2020, 19:36

Время от времени я использую ARM-хроот: мой телефон работает под Linux Deploy и образ время от времени умирает. Затем я копирую его на свой компьютер и изучаю ситуацию с chroot следующим образом:

# This provides the qemu-arm-static binary
apt-get install qemu-user-static

# Mount my target filesystem on /mnt
mount -o loop fs.img /mnt

# Copy the static ARM binary that provides emulation
cp $(which qemu-arm-static) /mnt/usr/bin
# Or, more simply: cp /usr/bin/qemu-arm-static /mnt/usr/bin

# Finally chroot into /mnt, then run 'qemu-arm-static bash'
# This chroots; runs the emulator; and the emulator runs bash
chroot /mnt qemu-arm-static /bin/bash
35
27.01.2020, 19:36

Я считаю, что для этого OP все, что ему нужно было сделать, это настроить binfmts, просто выполнив:

update-binfmts --enable qemu-arm

После запуска этого можно было бы chroot в файловую систему arm.

0
27.01.2020, 19:36
sudo apt-get update
sudo apt-get install debootstrap qemu qemu-user-static
sudo qemu-debootstrap --arch armhf bionic armhf-chroot
sudo chroot armhf-chroot

uname -m 
2
27.01.2020, 19:36

Добавляя к ответу Люка :, вам нужно убедиться, что расположение интерпретатора в chroot такое же, как и в основной файловой системе. Это связано с тем, что ядро ​​определяет архитектуру исполняемого файла, а затем использует расположение интерпретатора, как показано update-binfmts --display, для его запуска. Итак, строка

cp $(which qemu-arm-static) /mnt/usr/bin

на самом деле должно быть

cp $(which qemu-arm-static) /mnt/$(which qemu-arm-static)

В противном случае вы можете получить ошибку «Не найдено» -внутри вашего chroot, поскольку ваше ядро ​​​​не может найти требуемый интерпретатор, если местоположение qemu-arm-staticне находится внутри /usr/binв вашей системе.

1
27.01.2020, 19:36

Теги

Похожие вопросы