Сборка deb-пакета#
Подготовка к сборке#
Сборка пакетов может осуществляться несколькими способами:
на отдельном компьютере (с использованием chroot-окружения)
в контейнерах
в виртуальных машинах
Примечание
Пакеты, необходимые для сборки:
dpkg-dev — набор инструментов для работы с исходными файлами;
devscripts — набор скриптов для сборки пакетов;
equivs — необходим для запуска утилиты mk-build-deps для установки зависимых пакетов.
Минимально необходимые каталоги и файлы для сборки:
Каталог с названием собираемого пакета и версией (например astra-sample-app-0.1.2)
Каталог debian внутри каталога из п.1
Файлы в каталоге debian:
control — основной файл с описание собираемого пакета и его зависимостей
changelog — файл с описанием истории изменения пакета
rules — файл с правилами компиляции пакета во время его сборки
Дополнительные файлы в каталоге debian:
postinst — скрипт, запускаемый после установки пакета
postrm — скрипт, запускаемый после удаления пакета
preinst — скрипт, запускаемый перед установкой пакета
prerm — скрипт, запускаемый перед удалением пакета
Совет
Полное описание файлов содержится в Debian Policy.
Для сборки пакета под конкретные версии различных дистрибутивов Linux быстрее и удобнее всего использовать отдельные chroot-окружения.
Совет
Chroot-окружение — это самый простой способ запустить Linux внутри Linux, например, запустить архитектуру arm64 (aarch64) под архитектурой amd64 (x86_64).
Cпособ настройки.
1. Настройки сборочного окружения#
Для настройки сборочного окружения необходимо установить следующие пакеты командой:
sudo apt install debootstrap qemu-user-static
2. Подготовка сборочного окружения#
Подготовить сборочное окружение при помощи утилиты debootstrap.
Совет
Передаваемые аргументы:
–arch= архитектура
–components= список компонентов репозитория
codename репозитория (4.7_arm / 1.7_x86-64)
директория, в которую будет загружена базовая система (например chroot-arm64)
ссылка на репозиторий
Примечание
Более подробно - см. man debootstrap (https://linux.die.net/man/8/debootstrap)
2.1 Сборочное окружение под amd64#
Необходимо выполнить следующую команду:
sudo debootstrap --arch=amd64 --components=main,contrib,non-free 1.7_x86-64 chroot-amd64 http://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base/
Список репозиториев для amd64 Astra Linux 1.7 (chroot-amd64/etc/apt/sources.list):
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free
Примечание
Т.к. repository-base включает в себя репозиторий repository-main, в перечень репозиториев его не добавляем.
Список репозиториев для amd64 Astra Linux 1.7 (chroot-amd64/etc/apt/sources.list):
deb https://download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.1/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
deb https://download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.1/main-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
Далее необходимо выполнить следующие команды для подготовки общей директории для сборки пакетов (для примера будем использовать chroot-amd64/opt):
echo "export LC_ALL=C" | sudo tee -a chroot-amd64/root/.bashrc
sudo chroot chroot-amd64 apt update
sudo chroot chroot-amd64 apt install devscripts quilt equivs
sudo chown -R "${USER}:${USER}" chroot-amd64/opt/
2.2 Сборочное окружение под arm64#
Необходимо выполнить следующую команду:
sudo debootstrap --arch=arm64 --components=main,contrib,non-free 4.7_arm chroot-arm64 http://download.astralinux.ru/astra/stable/4.7_arm/repository-base/
Список репозиториев для arm64 (chroot-arm64/etc/apt/sources.list):
deb https://download.astralinux.ru/astra/stable/4.7_arm/repository-base/ 4.7_arm main contrib non-free
deb https://download.astralinux.ru/astra/stable/4.7_arm/repository-extended/ 4.7_arm main contrib non-free
Примечание
Т.к. repository-base включает в себя репозиторий repository-main, в перечень репозиториев его не добавляем.
Далее необходимо выполнить следующие команды для подготовки общей директории для сборки пакетов (для примера будем использовать chroot-arm64/opt):
echo "export LC_ALL=C" | sudo tee -a chroot-arm64/root/.bashrc
sudo chroot chroot-arm64 /debootstrap/debootstrap --second-stage
sudo chroot chroot-arm64 apt update
sudo chroot chroot-arm64 apt install devscripts quilt equivs
sudo chown -R "${USER}:${USER}" chroot-arm64/opt/
3. Сборка пакетов для arm64#
Примечание
Сборка пакета под amd64 выполняется аналогичным способом, только вместо chroot-arm64 используется chroot-amd64.
Перед сборкой пакетов, необходимо выполнить операции монтирования из хостовой машины:
sudo mount -t proc proc chroot-arm64/proc
sudo mount -t sysfs sys chroot-arm64/sys
sudo mount -t devpts devpts chroot-arm64/dev/pts
sudo mount -o bind /dev/shm chroot-arm64/dev/shm
Затем необходимо скопировать нужную папку в директорию chroot-arm64/opt и выполнить chroot командами:
cp -a astra-sample-app-0.1.2 chroot-arm64/opt/
sudo chroot chroot-arm64
Внутри chroot выполняем следующие команды для сборки пакета:
cd /opt/astra-sample-app-0.1.2
mk-build-deps -i -r
dpkg-buildpackage -us -uc -ui -j$(nproc)
Собранный пакет будет находиться в директории chroot-arm64/opt.
Для очистки сборочного окружения необходимо выполнить следующие команды:
dpkg -l | grep build-deps
apt purge '*build-deps*'
apt autoremove --purge
После сборки пакетов необходимо размонтировать папки из хостовой системы командами:
sudo umount chroot-arm64/proc
sudo umount chroot-arm64/sys
sudo umount chroot-arm64/dev/pts
sudo umount chroot-arm64/dev/shm