Система сборки deb-пакетов. Служит для упрощения некоторых процессов сборки, таких как компиляция и создание окружения под неё. Для работы с окружениями же используется утлилита schroot.
Нам понадобится:
Здесь всё достаточно просто:
# apt-get install sbuild debhelper devscripts
Дальше на вкус и цвет пакеты можно доставлять в зависимости от используемых бэкендов для sbuild:
Я успел попробовать только два первых решения, так что на них и остановимся подробнее.
Как работать с LVM я рассказал в другой статье, так что здесь мы будем отталкиваться от того, что и группа у нас есть, и диск мы уже создали. Назовём его stretch.
Итак, сначала создаём ФС
# mkfs.ext4 /dev/build_roots/stretch
После чего монтируем ФС и распаковывем базовую систему:
# mount /dev/build_roots/stretch /mnt # debootstrap --keyring=/etc/apt/trusted.gpg stretch /mnt http://repo.owlhost.in/debian
На выходе получаем готовый к запуску stretch с минимальным набором пакетов. Отмонтируем ФС и переходим к конфигурации schroot, где в /etc/schroot/schroot.conf дописываем:
[stretch] type=lvm-snapshot description=Debian stretch LVM snapshot groups=sbuild,root root-users=owlbook root-groups=root,sbuild device=/dev/build_roots/stretch mount-options=-o atime,sync,user_xattr lvm-snapshot-options=--size 8G
По большей части настройки, я думаю, понятны, в крайнем случае есть ман.
После того, как всё подготовлено пробуем попасть в chroot:
# schroot -c stretch
Если всё успешно, к PS1 в начале должно добавиться (stretch). Если что-то пошло не так - вам обязательно скажут.
Второй тип aufs, который позволяет хранить только разницу между базовой директорией и пользовательскими изменениями.
Первые этапы такие же, создаём раздел, делаем на него debootstrap системы, однако дальше всё идёт несколько иначе.
В /etc/fstab нужно добавить строчку монтирования нашего раздела, чтобы при перезагрузке ничего не ломалось:
/dev/build_roots/stretch /srv/build/stretch ext4 noatime 0 0
После этого выполнить
# mount -a
и проверить, что раздел успешно процепился.
Далее в /etc/schroot/schroot.conf требуется добавить секцию вида:
[stretch] aliases=stable type=directory directory=/srv/build/stretch description=Debian stretch groups=sbuild,root root-users=owlbook root-groups=root,sbuild union-type=aufs
И проверить, что с schroot всё хорошо:
# schroot -c stretch
Дополнительные крутилки
Вообще стоит почитать директорию /etc/schroot и поглядеть какие скрипты она использует. Вещь полностью кастомизируемая.
После всех шаманств с schroot можно наконец перейти к настройке самого билдера. Не ходя далеко начинаем с файла конфигурации /etc/sbuild/sbuild.conf
$build_arch_all = 1; $build_source = 0; $distribution = 'stable'; $chroot_mode = 'schroot'; $chroot_split = 0; $purge_build_deps="never"; $sbuild_mode = "user"; $apt_allow_unauthenticated = 0; $apt_update = 1; $apt_upgrade = 1; $apt_distupgrade = 0; $check_space = 1; 1;
В общем и целом это всё, что используется в моей инсталляции, но если чего-то не будет хватать - добро пожаловать в man.
Для обновления пакетов в базовой системе и вообще выполнения практически любых операций у sbuild есть пачка утилит
sbuild-update - обновляет репозитории в заданном дистрибутиве sbuild-apt <distro> apt-get install <package> - устанавливает в <distro> выбранные <package> sbuild-upgrade - обновляет заданный дистрибутив
Итак, систему вроде бы настроили, теперь настало время собирать пакет. Здесь нет ничего сложного, нужно просто осилить тонные бессмысленной документации DPKG, которая ничего не объясняет, а в довесок даёт ещё больше вопросов.
Вкратце сборка пакетов выглядит так: