Дошли руки починить сборку Midnight Commander для ARM. Раньше я использовал qemu-user-static и qemu-system-arm для сборки пакетов для архитектур armel, armhf и arm64, но это было медленно и часто заканчивалось ошибками или зависанием сборки. Начиная с Raspberry PI 3 появилась поддержка ARM64 и теперь можно собирать пакеты не прибегая к помощи эмулятора.
После снижения цен на Raspberry PI 4 с 2GB до 35$ я заказал себе такую на Seeedstudio и вдобавок корпус с активным охлаждением. Но если гонять pbuilder на SD карте это будет медленно и карта довольно быстро придет в негодность. Чтобы этого избежать я выношу весь /var/cache/pbuilder на NFS, который раздает домашний сервер. Такой подход хорошо работает с базовыми образами, кешем APT и результатами сборки, но слишком медленный для /var/cache/pbuilder/build/. В этой директории pbuilder хранит распакованные chroot'ы и эти файлы не важны. Чтобы ускорить сборку можно смонтировать tmpfs и сборка будет упираться в процессор, а не в I/O.
Для tmpfs я выделил 1GB и этого хватило чтобы собрать базовые образы для всех актуальных систем кроме Debian Sid armel/armhf - по какой-то причине базовый образ получается в три раза больше Debian Sid arm64.
$ ls -lh /var/cache/pbuilder/*.tgz -rw-r--r-- 1 root root 123M Oct 17 20:33 /var/cache/pbuilder/debian-buster-arm64-base.tgz -rw-r--r-- 1 root root 112M Oct 17 20:13 /var/cache/pbuilder/debian-buster-armel-base.tgz -rw-r--r-- 1 root root 111M Oct 17 20:23 /var/cache/pbuilder/debian-buster-armhf-base.tgz -rw-r--r-- 1 root root 103M Oct 17 19:32 /var/cache/pbuilder/debian-jessie-arm64-base.tgz -rw-r--r-- 1 root root 103M Oct 17 19:13 /var/cache/pbuilder/debian-jessie-armel-base.tgz -rw-r--r-- 1 root root 102M Oct 17 19:23 /var/cache/pbuilder/debian-jessie-armhf-base.tgz -rw-r--r-- 1 root root 136M Oct 17 20:52 /var/cache/pbuilder/debian-sid-arm64-base.tgz -rw-r--r-- 1 root root 335M Oct 18 07:11 /var/cache/pbuilder/debian-sid-armel-base.tgz -rw-r--r-- 1 root root 330M Oct 18 08:18 /var/cache/pbuilder/debian-sid-armhf-base.tgz -rw-r--r-- 1 root root 102M Oct 17 20:02 /var/cache/pbuilder/debian-stretch-arm64-base.tgz -rw-r--r-- 1 root root 102M Oct 17 19:43 /var/cache/pbuilder/debian-stretch-armel-base.tgz -rw-r--r-- 1 root root 98M Oct 17 19:52 /var/cache/pbuilder/debian-stretch-armhf-base.tgz -rw-r--r-- 1 root root 91M Oct 17 21:44 /var/cache/pbuilder/ubuntu-bionic-arm64-base.tgz -rw-r--r-- 1 root root 84M Oct 17 21:36 /var/cache/pbuilder/ubuntu-bionic-armhf-base.tgz -rw-r--r-- 1 root root 99M Oct 17 22:02 /var/cache/pbuilder/ubuntu-focal-arm64-base.tgz -rw-r--r-- 1 root root 90M Oct 17 21:53 /var/cache/pbuilder/ubuntu-focal-armhf-base.tgz -rw-r--r-- 1 root root 74M Oct 17 21:09 /var/cache/pbuilder/ubuntu-trusty-arm64-base.tgz -rw-r--r-- 1 root root 74M Oct 17 21:01 /var/cache/pbuilder/ubuntu-trusty-armhf-base.tgz -rw-r--r-- 1 root root 92M Oct 17 21:27 /var/cache/pbuilder/ubuntu-xenial-arm64-base.tgz -rw-r--r-- 1 root root 89M Oct 17 21:17 /var/cache/pbuilder/ubuntu-xenial-armhf-base.tgz
После распаковки базовый образ Debian Sid armel занимает 926MB на диске. Выделять больше места под tmpfs не решит всех проблем, т.к. еще нужно достаточно места для установки сборочных зависимостей.
Решить ситуацию поможет bcache у которого backing device будет файл, который лежит на NFS, а cache device будет рамдиск.
Скрипт, который реализует подобное поведение, выглядит так
Чтобы монтирование происходило автоматически при загрузке системы нужно обернуть этот скрипт в systemd сервис
Вот несколько замеров времени распаковки базового образа Debian Sid armel на sd карту, NFS, tmpfs и bcache:
SD карта
real 1m13.394s user 0m38.117s sys 0m16.404s
NFS (tmpfs)
real 0m52.931s user 0m25.294s sys 0m15.170s
tmpfs
real 0m17.747s user 0m16.278s sys 0m5.089s
bcache
real 0m40.882s user 0m35.255s sys 0m16.321s
Комментариев нет:
Отправить комментарий