Как собрать пакет Debian / Ubuntu из исходного кода? - PullRequest
113 голосов
/ 25 сентября 2008

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

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

Какой самый простой способ сделать это? Я обеспокоен парой вещей

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

Ответы [ 10 ]

77 голосов
/ 21 ноября 2008

вы можете использовать специальный пакет "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
26 голосов
/ 25 сентября 2008

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

dpkg-buildpackage -us -uc -nc

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

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

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

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

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

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

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

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

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

6 голосов
/ 19 сентября 2012

Пример Сборка на основе 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/

6 голосов
/ 25 сентября 2008

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

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

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

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

dpkg-buildpackage -rfakeroot -us -uc
3 голосов
/ 29 июля 2009
  • поместить каталог "debian" из исходного пакета в исходный каталог
  • используйте " dch " для обновления версии пакета
  • используйте "debuild" для сборки пакета
2 голосов
/ 06 марта 2011

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

2 голосов
/ 25 сентября 2008

Я считаю, это - это пакет Библии Debian.

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

1 голос
/ 08 марта 2012

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

apt-get build-dep

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

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 --создать

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

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

Смотрите, где коровник кладет полученный пакет.

Удачи!

1 голос
/ 03 ноября 2011

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

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

1 голос
/ 25 сентября 2008

Здесь - руководство по сборке пакета Debian.

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

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

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

...