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

Материал из ALT Linux Wiki
< Ports‎ | arm
(Import from freesource.info)
 
 
(не показано 19 промежуточных версий 10 участников)
Строка 1: Строка 1:
[[Category:Sisyphus]]
[[Category:Sisyphus]]
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/Ports/arm/BuildHowto}}
[[Категория:ARM]]


0. Prerequires
== Prerequires ==


Для сборки под ARM с использованием QEmu требуется:
Для сборки под ARM с использованием QEmu требуется:
- qemu-user-static - чем новее, тем лучше
* qemu-arm.static из пакета {{pkg|qemu-user-static}} >= 1.2.0 (на данный момент пакет {{pkg|qemu-user-static-arm}})
- настроенный hasher >= 1.2.6-alt1
* настроенный {{pkg|}}hasher >= 1.2.6-alt1
- rpm >= 4.0.4-alt80
* {{pkg|rpm}} >= 4.0.4-alt80
- репозиторий под ARM. Можно взять [ftp://ftp.altlinux.org/pub/people/kas/arm тут]
* репозиторий под ARM.
- ядро с поддержкой binfmt_misc(во всех ядрах в Сизифе есть модуль)
* ядро с поддержкой binfmt_misc(во всех ядрах в Сизифе есть модуль)
* опционально, пакет {{pkg|qemu-user-static-binfmt-arm}} для настройки binfmt_misc


1. Configuring binfmt_misc
== Настройка binfmt_misc ==


Настраиваем binfmt_misc:
Устанавливаем пакет {{pkg|qemu-user-static-binfmt-arm}} и запускаем
systemctl start systemd-binfmt.service


- монтируем файловую систему binfmt_misc(если ещё не примонтирована)
Либо настраиваем binfmt_misc вручную: для этого


<pre># mount -t binfmt_misc none /proc/sys/fs/binfmt_misc</pre>
* монтируем файловую систему binfmt_misc(если ещё не примонтирована)


- регистрируем qemu-arm, как интерпретатор ARM'овских ELF'ов:
  # mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
 
* регистрируем qemu-arm, как интерпретатор ARM'овских ELF'ов (команда от root):
 
# 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:/.host/qemu-arm:" > /proc/sys/fs/binfmt_misc/register
 
* Выглядит /proc/sys/fs/binfmt_misc/arm после этого так:
 
enabled
interpreter /.host/qemu-arm
flags:
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff


<pre># 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:/.host/qemu-arm:" > /proc/sys/fs/binfmt_misc/register</pre>


Теперь при попытке выполнить ELF для ARM, ядро будет запускать /.host/qemu-arm.
Теперь при попытке выполнить ELF для ARM, ядро будет запускать /.host/qemu-arm.
Строка 27: Строка 41:
который создаст hasher.
который создаст hasher.


2. APT sources.list
== APT sources.list ==


Пишем sources.list. Что-то типа:
Пишем sources.list. Что-то типа:


<pre>rpm ftp://ftp.altlinux.org/pub/people/kas/arm/sisyphus arm hasher
  rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus armh classic
rpm ftp://ftp.altlinux.org/pub/people/kas/arm/patched arm hasher
  rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic
rpm ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic</pre>


Можно записать прямо в /etc/apt/sources.list, но лучше положить в сторонке, и
Можно записать прямо в /etc/apt/sources.list, но лучше положить в сторонке, и
написать отдельный apt.conf, который подсовывать hasher'у.
написать отдельный apt.conf, взяв за основу пример /usr/share/doc/hasher-*/apt.conf,
и уже этот специально подготовленный apt.conf передавать hasher'у.
Если у вас есть локальное зеркало, то стоит использовать file://путь-к-зеркалу, чтобы сократить время и траффик.
 
== Hasher ==
 
Теперь всё готово. Можно использовать [[hasher]]:
 
hsh --with-qemu=arm --target=armh --apt-config=/path/to/apt-arm.conf --initroot-only


Можно заметить, что репозитория два. В sisyphus попадают пакеты, которые
Если hasher ругается:
пересобраны из Сизифа "как есть". В patched, пакеты в которые вносились
hsh-initroot: Created entry point: /home/stanv/hasher/chroot/.host/entry
изменения.
mmap: Operation not permitted
hsh-initroot: Failed to create RPM database.


3. Hasher
тогда необходимо:
# echo 32768 > /proc/sys/vm/mmap_min_addr


Теперь всё готово. Можно использовать hasher:
Не забудьте прописать в apt-arm.conf строчки - Dir::Etc::SourceParts "/var/empty"; и Dir::Etc::main "/dev/null";


<pre>hsh --with-qemu=arm --target=arm --apt-config=/path/to/apt-arm.conf foo.src.rpm</pre>
== Ссылки ==
* http://lists.altlinux.org/pipermail/devel-ports/2008-January/000352.html

Текущая версия от 13:07, 5 августа 2020


Prerequires

Для сборки под ARM с использованием QEmu требуется:

  • qemu-arm.static из пакета qemu-user-static >= 1.2.0 (на данный момент пакет qemu-user-static-arm)
  • настроенный hasher >= 1.2.6-alt1
  • rpm >= 4.0.4-alt80
  • репозиторий под ARM.
  • ядро с поддержкой binfmt_misc(во всех ядрах в Сизифе есть модуль)
  • опционально, пакет qemu-user-static-binfmt-arm для настройки binfmt_misc

Настройка binfmt_misc

Устанавливаем пакет qemu-user-static-binfmt-arm и запускаем

systemctl start systemd-binfmt.service

Либо настраиваем binfmt_misc вручную: для этого

  • монтируем файловую систему binfmt_misc(если ещё не примонтирована)
 # mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
  • регистрируем qemu-arm, как интерпретатор ARM'овских ELF'ов (команда от root):
# 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:/.host/qemu-arm:" > /proc/sys/fs/binfmt_misc/register
  • Выглядит /proc/sys/fs/binfmt_misc/arm после этого так:
enabled
interpreter /.host/qemu-arm
flags:
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff


Теперь при попытке выполнить ELF для ARM, ядро будет запускать /.host/qemu-arm. Именно по этому пути будет лежать статически собранный qemu-arm внутри чрута, который создаст hasher.

APT sources.list

Пишем sources.list. Что-то типа:

 rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus armh classic
 rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic

Можно записать прямо в /etc/apt/sources.list, но лучше положить в сторонке, и написать отдельный apt.conf, взяв за основу пример /usr/share/doc/hasher-*/apt.conf, и уже этот специально подготовленный apt.conf передавать hasher'у. Если у вас есть локальное зеркало, то стоит использовать file://путь-к-зеркалу, чтобы сократить время и траффик.

Hasher

Теперь всё готово. Можно использовать hasher:

hsh --with-qemu=arm --target=armh --apt-config=/path/to/apt-arm.conf --initroot-only

Если hasher ругается:

hsh-initroot: Created entry point: /home/stanv/hasher/chroot/.host/entry
mmap: Operation not permitted
hsh-initroot: Failed to create RPM database.

тогда необходимо:

# echo 32768 > /proc/sys/vm/mmap_min_addr

Не забудьте прописать в apt-arm.conf строчки - Dir::Etc::SourceParts "/var/empty"; и Dir::Etc::main "/dev/null";

Ссылки