Ports/arm/BuildHowto: различия между версиями
MikeLykov (обсуждение | вклад) (обновление путей к репо и имени пакета со static) |
|||
(не показано 18 промежуточных версий 9 участников) | |||
Строка 1: | Строка 1: | ||
[[Category:Sisyphus]] | [[Category:Sisyphus]] | ||
[[Категория:ARM]] | |||
== Prerequires == | |||
Для сборки под ARM с использованием QEmu требуется: | Для сборки под ARM с использованием QEmu требуется: | ||
* qemu-arm.static из пакета {{pkg|qemu-user-static}} >= 1.2.0 (на данный момент пакет {{pkg|qemu-user-static-arm}}) | |||
* настроенный {{pkg|}}hasher >= 1.2.6-alt1 | |||
* {{pkg|rpm}} >= 4.0.4-alt80 | |||
* репозиторий под ARM. | |||
* ядро с поддержкой binfmt_misc(во всех ядрах в Сизифе есть модуль) | |||
* опционально, пакет {{pkg|qemu-user-static-binfmt-arm}} для настройки binfmt_misc | |||
== Настройка binfmt_misc == | |||
Устанавливаем пакет {{pkg|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. | Теперь при попытке выполнить ELF для ARM, ядро будет запускать /.host/qemu-arm. | ||
Строка 37: | Строка 41: | ||
который создаст hasher. | который создаст hasher. | ||
== APT sources.list == | |||
Пишем sources.list. Что-то типа: | Пишем sources.list. Что-то типа: | ||
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus armh classic | |||
rpm | rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic | ||
rpm | |||
Можно записать прямо в /etc/apt/sources.list, но лучше положить в сторонке, и | Можно записать прямо в /etc/apt/sources.list, но лучше положить в сторонке, и | ||
написать отдельный apt.conf, | написать отдельный apt.conf, взяв за основу пример /usr/share/doc/hasher-*/apt.conf, | ||
и уже этот специально подготовленный apt.conf передавать hasher'у. | |||
Если у вас есть локальное зеркало, то стоит использовать file://путь-к-зеркалу, чтобы сократить время и траффик. | Если у вас есть локальное зеркало, то стоит использовать 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"; | |||
== Ссылки == | |||
* 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";