Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: Alex Custov от Апрель 18, 2016, 15:46



Название: Сборка deb пакетов по разные Ubuntu/Debian
Отправлено: Alex Custov от Апрель 18, 2016, 15:46
Привет. Понадобилось собрать пакет под 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 (http://packages.ubuntu.com/xenial/rinse)

Высказывайте предложения и пишите о багах :)