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

108

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

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

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

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

10 ответов

71

вы можете использовать специальный пакет "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
  • 0
    Спасибо! Я только что использовал это для портирования Subversion 1.6.6 на установку Ubuntu, которая имеет только 1.6.5 в качестве своей последней доступной версии, и она работала без нареканий. Это спасло меня от нескольких часов работы! :)
  • 0
    Не могли бы вы дать немного больше информации об этих командах? Где именно libdrm-2.3.1 ? Кроме того, откуда libdrm-2.4.1.tar.gz (моё первоначальное предположение - это скомпилированный двоичный файл приложения, который мы хотим упаковать в deb, но заменяющий существующую версию, это правильно?)
Показать ещё 1 комментарий
25

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

dpkg-buildpackage -us -uc -nc

которые означают не подписи результата и не очищаются.

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

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

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

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

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

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

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

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

  • 1
    "dpkg --set-selections" все еще работает, но лучшим способом в эти дни было бы "aptitude hold nullidentd".
5

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

5

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

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

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

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

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

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

2

Я верю, что это является библейским пакетом Debian.

Ну, это руководство для гидов Debian, поэтому многие из них не будут применяться, но они действительно охватывают то, что происходит.

1

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

apt-get build-dep

Это устанавливает зависимости. Для этого вам нужны строки источников в 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

Наблюдайте, когда коровщик создает полученный пакет.

Удачи!

1

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

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

0

Здесь - это учебник по созданию пакета Debian.

В принципе, вам необходимо:

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню