Предисловие
Собирать пакеты на ARM устройстве не очень удобно, так как правило ресурсы такого устройства зачастую очень ограничены и компиляция и сборка занимает продолжительное время (сборка ядра или громоздких программ может выполняться больше чем 12-ть часов). Для этих целей удобнее использовать более мощные компьютера, допустим построенные на архитектуре x86_64. На момент написания данного руководства, существуют несколько вариантов решения данной задачи, одним из вариантов есть Distcc Cross-Compiling, но не всегда удобно развертывать для этих целей громоздкое и непростое в настройке программное обеспечение, проще воспользоваться привычным нам chroot.
Установка и настройка
В зависимости от поставленной задачи порядок действий может немного отличаться. Если мы планируем использовать chroot просто для сборки пакетов, то можно просто обойтись созданием произвольного каталога и в дальнейшем просто его использовать, если же планируется подготовить образ для дальнейшего копирования на накопитель устройства ARM, то нужно подготовить raw образ диска, а потом уже примонтировать его.
Создание пустого образа диска, с размером 4G:
dd of=archlinuxarm.img bs=1 seek=4G count=0
Создание файловой системы ext4 для всего образа диска:
mkfs.ext4 -F archlinuxarm.img
Создание директории и монтирование образа диска:
# mkdir arm-chroot
# mount archlinuxarm.img arm-chroot
Далее нужно загрузить архив с root-fs с сайта archlinuxarm.org и разархивировать в заранее созданную папку для chroot. Пример для sun7i (armv7h):
$ wget http://archlinuxarm.org/os/ArchLinuxARM-armv7-latest.tar.gz # tar -xvf ArchLinuxARM-armv7-latest.tar.gz -C arm-chroot Для работы ARM в chroot потребуется установить несколько пакетов arch-install-scripts, binfmt-qemu-static-sl (последний имеет зависимость qemu-user-static): # pacman -S arch-install-scripts binfmt-qemu-static-sl После установки пакетов скопируем в папку с chroot бинарный файл qemu-arm-static:
# cp /usr/bin/qemu-arm-static arm-chroot/usr/bin
Что бы в chroot заработал DNS, нужно удалить ссылку resolv.conf и скопировать образез resolv.conf.
# sudo rm arm-chroot/etc/resolv.conf
# sudo cp -a arm-chroot/etc/resolvconf.conf arm-chroot/etc/resolv.conf
Что бы в chroot pacman не выдавал ошибок, инициализируем связки ключей и сделаем первоначальную настройку:
# arch-chroot arm-chroot pacman-key --init
# arch-chroot arm-chroot pacman-key --populate archlinuxarm
Обновляем систему, устанавливаем base-devel, заходим в chroot и можно пробовать собирать пакеты:
# arch-chroot arm-chroot pacman -Syu base-devel
Если makepkg выдает ошибки возможно в систему с chroot нужно установить fakeroot-tcp:
# arch-chroot arm-chroot pacman -S fakeroot-tcp