У меня есть источник программы (взятый из cvs/svn/ git/...), и я хотел бы создать для него пакет Debian/Ubuntu. Пакет присутствует в репозиториях, но:
Каков самый простой способ сделать это? Меня беспокоит несколько вещей
вы можете использовать специальный пакет "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
libdrm-2.3.1
? Кроме того, откуда libdrm-2.4.1.tar.gz
(моё первоначальное предположение - это скомпилированный двоичный файл приложения, который мы хотим упаковать в deb, но заменяющий существующую версию, это правильно?)
Во-первых, заголовок вопроса: Предположим, что каталог 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 самостоятельно - также полезны ссылка разработчиков и общая страница ресурсов. ссылка Адама также выглядит хорошо, но я не знаком с ней.
Пример сборка на основе 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/
Для того, что вы хотите сделать, вы, вероятно, захотите использовать diff-источник debian, поэтому ваш пакет похож на официальный, кроме используемой версии. Вы можете загрузить исходный diff из packages.debian.org или можете получить его вместе с .dsc и исходным исходным архивом, используя "apt- получить источник".
Затем вы распаковываете новую версию восходящего источника, меняете ее в этом каталоге и применяете скачанный вами diff, делая
zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules
Затем выполните изменения, которые вы хотите скомпилировать, и создайте пакет, выполнив
dpkg-buildpackage -rfakeroot -us -uc
Если вы используете Ubuntu, посмотрите проект pkgcreator: http://code.google.com/p/pkgcreator
Я верю, что это является библейским пакетом Debian.
Ну, это руководство для гидов Debian, поэтому многие из них не будут применяться, но они действительно охватывают то, что происходит.
Если вам нужен быстрый и грязный способ установки зависимостей сборки, используйте:
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
Наблюдайте, когда коровщик создает полученный пакет.
Удачи!
Как проверить, правильно ли я перечислил все зависимости?
pbuilder
- отличный инструмент для проверки зависимостей и зависимостей сборки путем настройки чистой базовой системы в среде chroot. Компилируя пакет в pbuilder, вы можете легко проверить зависимости сборки и протестировать его в среде pbuilder, вы можете проверить зависимости.
Здесь - это учебник по созданию пакета Debian.
В принципе, вам необходимо:
Я обычно делаю все это в своем Makefile, поэтому могу просто набрать make, чтобы выплюнуть двоичный файл и упаковать его за один раз.