Как собрать пакет Debian / Ubuntu из исходников?

У меня есть исходный код программы (взят из cvs / svn / git / ...), и я хотел бы создать для него пакет Debian / Ubuntu. Пакет присутствует в репозиториях, но:

  • Это более старая версия (мне не хватает необходимых мне функций)
  • Мне нужны несколько другие параметры компиляции, чем по умолчанию.

Как это сделать проще всего? Меня беспокоит пара вещей

  • Как я могу проверить, правильно ли я указал все зависимости? (Я могу получить некоторые подсказки, посмотрев, от чего зависела более старая версия, но, возможно, были добавлены новые зависимости.)
  • Как я могу запретить системе обновлений устанавливать старую версию в репо при обновлении?
  • Как я могу предотвратить установку системой более новой версии (когда она отсутствует), перезаписывающей мой пользовательский пакет?

person Ryszard Szopa    schedule 25.09.2008    source источник
comment
Аналогично AU: askubuntu.com/questions/28372/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 17.05.2015


Ответы (10)


вы можете использовать специальный пакет «checkinstall» для всех пакетов, которых еще нет даже в debian / ubuntu.

Вы можете использовать "uupdate" (apt-get install devscripts) для сборки пакета из исходного кода с существующими исходными кодами debian:

Пример для libdrm2:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc
person Community    schedule 21.11.2008
comment
Спасибо! Я только что использовал это для переноса Subversion 1.6.6 на установку Ubuntu, которая имеет только 1.6.5 в качестве последней доступной версии, и она работала безупречно. Сэкономил мне несколько часов возиться! :) - person Carlos Villela; 20.01.2010
comment
Не могли бы вы подробнее рассказать об этих командах? Где именно libdrm-2.3.1? Также откуда взялся libdrm-2.4.1.tar.gz (мое первоначальное предположение состоит в том, что это скомпилированный двоичный файл приложения, которое мы хотим упаковать в deb, но заменив существующую версию, это правильно?) - person wheeler; 17.05.2018
comment
Если вы получили сообщение об ошибке You must put some 'source' URIs in your sources.list, раскомментируйте строки deb-src в вашем /etc/apt/sources.list - person Christian; 21.08.2018

Во-первых, вопрос заголовка: если каталог debian уже существует, перейдите в исходный каталог (каталог, содержащий каталог debian) и вызовите dpkg-buildpackage. Мне нравится запускать его со следующими параметрами:

dpkg-buildpackage -us -uc -nc

что означает не подписывать результат и не чистить.

Как я могу проверить, правильно ли я указал все зависимости?

Получение зависимостей - черное искусство. «Официальный» способ проверки зависимости сборки - это сборка пакета только с базовой системой, с «необходимыми для сборки» пакетами и указанными вами зависимостями сборки. Не знаю общего ответа для обычных зависимостей, просто войдите :)

Как я могу запретить системе обновлений устанавливать старую версию в репо при обновлении? Как я могу предотвратить установку системой более новой версии (когда она отсутствует), перезаписывающей мой пользовательский пакет?

Мои знания об этом могут быть устаревшими, но для решения обоих вопросов: используйте dpkg --set-selections. Предполагая, что nullidentd был пакетом, который вы хотели оставить, запустите от имени root

echo 'nullidentd hold' | dpkg --set-selections

В качестве альтернативы, поскольку вы строите из исходного кода, вы можете использовать эпоха, чтобы искусственно завысить номер версии и больше никогда не беспокоиться. Чтобы использовать эпоху, добавьте новую запись в файл debian / changelog и поставьте 99: перед номером версии. Учитывая мой пример с nullidentd, первая строка вашего обновленного журнала изменений будет гласить:

nullidentd (99:1.0-4) unstable; urgency=low

Ссылка Бернарда хороша, особенно если вам нужно создать каталог debian самостоятельно - также полезно являются справочником для разработчиков и страница общих ресурсов. Ссылка Адама тоже выглядит хорошо, но я не знаком с Это.

person Community    schedule 25.09.2008
comment
dpkg --set-selections по-прежнему работает, но в наши дни лучшим методом будет aptitude hold nullidentd. - person Mark Baker; 25.09.2008

Пример сборки на основе Ubuntu для ccache:

sudo apt-get update
sudo apt-get build-dep ccache
apt-get -b source ccache
sudo dpkg -i ccache*.deb

Подробнее: http://blog.aplikacja.info/2011/11/building-packages-from-sources-in-debianubuntu/

person Dariusz Cieslak    schedule 18.09.2012

Для того, что вы хотите сделать, вы, вероятно, захотите использовать исходный код debian diff, поэтому ваш пакет похож на официальный, за исключением используемой исходной версии. Вы можете загрузить исходный код с сайта packages.debian.org или получить его вместе с .dsc и исходным исходный архив с помощью "apt-get source".

Затем вы распаковываете новую версию исходного кода, переходите в этот каталог и применяете загруженный файл diff, выполнив

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

Затем внесите необходимые изменения в параметры компиляции и соберите пакет, выполнив

dpkg-buildpackage -rfakeroot -us -uc
person Mark Baker    schedule 25.09.2008

Я считаю, что это «библия» пакета Debian.

Что ж, это руководство нового сопровождающего Debian, поэтому многие из них не будут применимы, но они охватывают то, что и где.

person Bernard    schedule 25.09.2008

  • поместите каталог "debian" из исходного пакета в исходный каталог
  • используйте "dch" для обновления версии пакета
  • используйте "debuild" для сборки пакета
person zowers    schedule 29.07.2009

Если вы используете Ubuntu, ознакомьтесь с проектом pkgcreator: http://code.google.com/p/pkgcreator

person LRMAAX    schedule 06.03.2011

Вот руководство по созданию пакета Debian.

В основном вам необходимо:

  1. Настройте структуру папок
  2. Создайте контрольный файл
  3. При желании можно создать скрипты postinst или prerm.
  4. Запустите dpkg-deb

Обычно я делаю все это в моем Makefile, поэтому я могу просто набрать make, чтобы выплюнуть двоичный файл и упаковать его за один раз.

person Adam Pierce    schedule 25.09.2008

Как я могу проверить, правильно ли я указал все зависимости?

pbuilder - отличный инструмент для проверки зависимостей сборки и зависимостей путем настройки чистой базовой системы в среде chroot. Скомпилировав пакет в pbuilder, вы можете легко проверить зависимости сборки, а тестируя его в среде pbuilder, вы можете проверить зависимости.

person thiton    schedule 03.11.2011

Если вам нужен быстрый и грязный способ установки зависимостей сборки, используйте:

apt-get build-dep

Это устанавливает зависимости. Для этого вам нужны строки sources в вашем sources.list:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

Если вы переносите пакеты из тестируемой в стабильную, имейте в виду, что зависимости могли измениться. Команда apt-get build-deb устанавливает зависимости для исходных пакетов в вашем текущем репозитории.

Но, конечно же, dpkg-buildpackage -us -uc покажет вам все неустановленные зависимости.

Если вы хотите чаще компилировать, используйте cowbuilder.

apt-get install cowbuilder

Затем создайте область сборки:

sudo DIST = сжатие ARCH = amd64 cowbuilder --create

Затем скомпилируйте исходный пакет:

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

Посмотрите, куда ковбилдер кладет получившийся пакет.

Удачи!

person Allard Hoeve    schedule 08.03.2012