Привет. Понадобилось собрать пакет под trusty/xenial. Ставить виртуалки мне было лень, ведь есть же debootstrap. Накидал пару скриптов, которые делают chroot окружения и собирают пакет внутри них.
Что делают скрипты:- С помощью debootstrap создают chroot окружение выбранной вами версии Ubuntu/Debian
- Делают checkout ваших исходников из git или svn
- Собирают deb пакет внутри всех закешированных chroot окружений. Подразумевается, что ваши исходники содержат всё необходимое для сборки стандартно в подкаталоге debian/ (control, rules и т.д.)
Хост-система:Желательно использовать последнюю 64-битную версию Ubuntu. Последнюю - потому что последний debootstrap понимает все версии Ubuntu/Debian. 64-битную - потому что под 64-бит можно сделать chroot в 32-битную систему, наоборот - нет. Если вам не нужно 64-бит, то можно использовать и i386.
Пример сборки:# Создаём chroot окружения для Trusty и Xenial, i386 и amd64
# Образы закешируются в подкаталог images/
sudo ./debootstrap ubuntu xenial amd64 i386
sudo ./debootstrap ubuntu trusty amd64 i386
# Указываем URL на ваши исходники в GIT или SVN
nano build.conf
# Запускаем сборку пакетов
sudo ./chroot-and-build
Если всё нормально, то в текущем каталоге создадутся 4 подкаталога result-* с дебками.
Пример файла build.conf для сборки vlc-qt:# у меня много ядер и памяти
smp=1
# то что нужно перед сборкой за исключением Build-Depends
required_packages="git ca-certificates build-essential devscripts fakeroot"
# откуда брать исходники
url_type="git"
url="
https://github.com/vlc-qt/vlc-qt.git"
Проблемы:- парсер поля Build-Depends достаточно примитивный. Например, из комбинации packageA | packageB | packageC он возьмёт packageA, отбросив остальное, даже несмотря на то, что packageA может быть недоступен. Это может вызвать проблемы сборки некоторых исходников
TODO:- Наврятли я буду этим заниматься, но желающие могут добавить поддержку RPM-based дистрибутивов с помощью rinse
Высказывайте предложения и пишите о багах