Ports/arm/chroot: различия между версиями

Материал из ALT Linux Wiki
< Ports‎ | arm
(→‎binfmt_misc: Описал, как бороться с ошибкой "-bash: echo: write error: Invalid argument" (по итогам обсуждения в рассылке))
Нет описания правки
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
[[Category:Sisyphus]]
[[Category:Sisyphus]]
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/ports/arm/chroot}}
[[Категория:ARM]]
{{Устарело}}


=== Chroot into ARM root ===
=== Chroot into ARM root ===
Строка 13: Строка 14:
На данный момент можно использовать qemu-user-binfmt_misc-0.12.1, готовый пакет подходит. В нем содержится /usr/bin/qemu-arm.static который и требуется для задачи. (apt-get install qemu-user-binfmt_misc). Но если вам надо собрать самостоятельно, как было раньше до появления готового пакета, то:
На данный момент можно использовать qemu-user-binfmt_misc-0.12.1, готовый пакет подходит. В нем содержится /usr/bin/qemu-arm.static который и требуется для задачи. (apt-get install qemu-user-binfmt_misc). Но если вам надо собрать самостоятельно, как было раньше до появления готового пакета, то:


<pre>> git-clone git://git.altlinux.org/people/kas/packages/qemu.git
<pre>git-clone git://git.altlinux.org/people/kas/packages/qemu.git
> gear-hsh-build --prefix="/home/kas/hasher" --target=x86_64 -- -- --packager='Kirill A. Shutemov <kas@altlinux.org>'
gear-hsh-build --prefix="/home/kas/hasher" --target=x86_64 -- -- --packager='Kirill A. Shutemov <kas@altlinux.org>'
> sudo rpm -Uvh /home/kas/hasher/*/%_target_cpu/RPMS.hasher/qemu-0.8.2-alt1.1.%_target_cpu.rpm</pre>
sudo rpm -Uvh /home/kas/hasher/*/%_target_cpu/RPMS.hasher/qemu-0.8.2-alt1.1.%_target_cpu.rpm</pre>


==== binfmt_misc ====
==== binfmt_misc ====
Строка 21: Строка 22:
Конфигурируем binfmt_misc на использование qemu для arm-овых elf'ов:
Конфигурируем binfmt_misc на использование qemu для arm-овых elf'ов:


<pre>> sudo modprobe binfmt_misc
<pre>sudo modprobe binfmt_misc
> sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
> sudo sh -c 'echo ":arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm.static:" > /proc/sys/fs/binfmt_misc/register'</pre>
sudo sh -c 'echo ":arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm.static:" > /proc/sys/fs/binfmt_misc/register'</pre>


Вероятно, что первые две операции вам не потребуются потому что они уже сделаны при загрузке (например, при установленном wine).
Вероятно, что первые две операции вам не потребуются потому что они уже сделаны при загрузке (например, при установленном wine).
Строка 51: Строка 52:


Распаковываем в /home/user/arm/:
Распаковываем в /home/user/arm/:
<pre>> sudo mkdir -p /home/user/arm/
<pre>sudo mkdir -p /home/user/arm/
> cd /home/user/arm/
cd /home/user/arm/
> sudo tar -xf arm-rootfs.tar</pre>
sudo tar -xf arm-rootfs.tar</pre>


получаем в /home/user/arm/rootfs/ весь набор каталогов /bin, /etc и т.д.
получаем в /home/user/arm/rootfs/ весь набор каталогов /bin, /etc и т.д.
Строка 59: Строка 60:
Копируем хостовый статический  qemu-arm внутрь arm'ового root'а:
Копируем хостовый статический  qemu-arm внутрь arm'ового root'а:


<pre>> sudo cp /usr/bin/qemu-arm.static /home/user/arm/rootfs/usr/bin</pre>
<pre>sudo cp /usr/bin/qemu-arm.static /home/user/arm/rootfs/usr/bin</pre>
 


==== chroot ====
==== chroot ====

Текущая версия от 16:49, 21 декабря 2023

48px-Mail-mark-junk red.svg.png
Эта статья конкретно протухла.
Статья уже не подходит под современные реалии, под современные версии Альта или сломана совсем. Возможно, её уже не доработать и не поместить в архив.


Chroot into ARM root

Для того чтобы сделать chroot в arm-овый root с "большой" машины нам понадобится qemu, ядро с поддержкой binfmt и собственно готовая распакованная или смонтированная rootfs куда будем chroot'иться.

Поехали.

Для примера предположим, что rootfs будет находиться в каталоге /home/user/arm.

Qemu

На данный момент можно использовать qemu-user-binfmt_misc-0.12.1, готовый пакет подходит. В нем содержится /usr/bin/qemu-arm.static который и требуется для задачи. (apt-get install qemu-user-binfmt_misc). Но если вам надо собрать самостоятельно, как было раньше до появления готового пакета, то:

git-clone git://git.altlinux.org/people/kas/packages/qemu.git
gear-hsh-build --prefix="/home/kas/hasher" --target=x86_64 -- -- --packager='Kirill A. Shutemov <kas@altlinux.org>'
sudo rpm -Uvh /home/kas/hasher/*/%_target_cpu/RPMS.hasher/qemu-0.8.2-alt1.1.%_target_cpu.rpm

binfmt_misc

Конфигурируем binfmt_misc на использование qemu для arm-овых elf'ов:

sudo modprobe binfmt_misc
sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
sudo sh -c 'echo ":arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm.static:" > /proc/sys/fs/binfmt_misc/register'

Вероятно, что первые две операции вам не потребуются потому что они уже сделаны при загрузке (например, при установленном wine). Последнее поле в третьей строке, разделенной знаками : - это путь, по которому будет скопирован файл qemu-arm.static из пакета qemu-user-binfmt_misc (относительно корня rootfs).

Если в /proc/sys/fs/binfmt_misc/register уже что-то писалось, третья команда может выдавать ошибку:

-bash: echo: write error: Invalid argument

Это исправляется командой

echo -1 > /proc/sys/fs/binfmt_misc/arm

и повторным вводном третьей команды.

Готовим rootfs

rootfs можно собрать самостоятельно на основе ALTLinux и вот этого профиля, например. см. прилагаемый README с примерным кратким списком команд.

Можно взять и готовый не от ALTLinux:

Можно посмотреть тут.

Или к примеру (вероятно, устарел) http://gentoo.osuosl.org/experimental/arm/embedded/stages/stage3-arm-uclibc-softfloat-20050811.tar.bz2.

Распаковываем в /home/user/arm/:

sudo mkdir -p /home/user/arm/
cd /home/user/arm/
sudo tar -xf arm-rootfs.tar

получаем в /home/user/arm/rootfs/ весь набор каталогов /bin, /etc и т.д.

Копируем хостовый статический qemu-arm внутрь arm'ового root'а:

sudo cp /usr/bin/qemu-arm.static /home/user/arm/rootfs/usr/bin

chroot

Собственно chroot'имся

$ sudo chroot /home/user/arm/rootfs bin/bash
bash-3.2# uname -a
Linux combr.local 2.6.27-std-def-alt15 #1 SMP Tue Mar 24 15:17:22 UTC 2009 armv5tel GNU/Linux
bash-3.2# ls
bin   dev  home  media  opt   root  srv  tmp  var
boot  etc  lib   mnt    proc  sbin  sys  usr

Надеюсь кому-нить понадобится ;)