Сборка deb-пакета#

Подготовка к сборке#

Сборка пакетов может осуществляться несколькими способами:

  • на отдельном компьютере (с использованием chroot-окружения)

  • в контейнерах

  • в виртуальных машинах

Примечание

Пакеты, необходимые для сборки:

  • dpkg-dev — набор инструментов для работы с исходными файлами;

  • devscripts — набор скриптов для сборки пакетов;

  • equivs — необходим для запуска утилиты mk-build-deps для установки зависимых пакетов.

Минимально необходимые каталоги и файлы для сборки:

  1. Каталог с названием собираемого пакета и версией (например astra-sample-app-0.1.2)

  2. Каталог debian внутри каталога из п.1

Файлы в каталоге debian:

  1. control — основной файл с описание собираемого пакета и его зависимостей

  2. changelog — файл с описанием истории изменения пакета

  3. 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