
Итак, после метаний от одного документа к другому я наткнулся на это руководство и следую ему:http://packaging.ubuntu.com/html/packaging-new-software.html
Итак, я попробовал шаги там и начал сталкиваться с проблемами. Гугление было в основном бесполезным. У меня есть очень стандартный проект autotools c++, который собирает библиотеку и некоторые исполняемые файлы. Я хотел сделать из него пакет в стиле libfoo-dev и поместить его в PPA.
Чтобы показать, что я делаю, я прикрепил скрипт, который выполняет шаги, предложенные в руководстве (насколько я правильно их понимаю...). Вот что у меня получилось:https://github.com/kevinkreiser/ppa-libprime-server
У меня есть скрипт bash, в котором build.sh
есть все шаги, которые я делал. Сначала у меня были проблемы с тем, чтобы dh_*
что-то собрать из моего проекта, пока @sneetsher не подсказал мне изменить файл правил, чтобы сделать autoreconf. На данный момент мои единственные проблемы — это W: libprime-server0: empty-binary-package
и W: prime-server-bin: empty-binary-package
.
И как говорится, проблема теперь в том, что в нескольких моих посылках вообще ничего нет:
user@pc$ lesspipe libprime-server0_0.3.2-0ubuntu1_amd64.deb
libprime-server0_0.3.2-0ubuntu1_amd64.deb:
neues Debian-Paket, Version 2.0.
Größe 2004 Byte: control-Archiv= 528 Byte.
425 Byte, 12 Zeilen control
160 Byte, 2 Zeilen md5sums
Package: libprime-server0
Source: libprime-server
Version: 0.3.2-0ubuntu1
Architecture: amd64
Maintainer: Kevin Kreiser <[email protected]>
Installed-Size: 26
Section: contrib/libs
Priority: optional
Homepage: https://github.com/kevinkreiser/prime_server
Description: Service oriented distributed computing API
A set of APIs designed around the zeromq butterfly pattern
specifically focused on servicing http requests
*** Contents:
drwxr-xr-x root/root 0 2016-04-21 11:48 ./
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/doc/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/doc/libprime-server0/
-rw-r--r-- root/root 167 2016-04-18 11:04 ./usr/share/doc/libprime-server0/changelog.Debian.gz
-rw-r--r-- root/root 1558 2016-04-15 09:46 ./usr/share/doc/libprime-server0/copyright
user@pc:~/sandbox/ppa-libprime-server/build$ lesspipe prime-server-bin_0.3.2-0ubuntu1_amd64.deb
prime-server-bin_0.3.2-0ubuntu1_amd64.deb:
neues Debian-Paket, Version 2.0.
Größe 1994 Byte: control-Archiv= 517 Byte.
437 Byte, 12 Zeilen control
160 Byte, 2 Zeilen md5sums
Package: prime-server-bin
Source: libprime-server
Version: 0.3.2-0ubuntu1
Architecture: amd64
Maintainer: Kevin Kreiser <[email protected]>
Installed-Size: 26
Depends: libprime-server0 (= 0.3.2-0ubuntu1)
Section: contrib/misc
Priority: optional
Homepage: https://github.com/kevinkreiser/prime_server
Description: Service oriented distributed computing executables
A set of executables for use in running a distributed http service
*** Contents:
drwxr-xr-x root/root 0 2016-04-21 11:48 ./
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/doc/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/doc/prime-server-bin/
-rw-r--r-- root/root 167 2016-04-18 11:04 ./usr/share/doc/prime-server-bin/changelog.Debian.gz
-rw-r--r-- root/root 1558 2016-04-15 09:46 ./usr/share/doc/prime-server-bin/copyright
Первый пакет работает, если я переименовываю файлы обратно в libprime-server1.install
и libprime-server1.dirs
. Я не могу понять, что я делаю не так с -bin
пакетом. bzr
спрашивает о типе пакета, который я создаю, и о l
том, какой я выбираю library
, должен ли я выбрать что-то другое?
РЕДАКТИРОВАТЬ:
Все работает:https://launchpad.net/~kevinkreiser/+archive/ubuntu/prime-server
С помощью @sneetsher я смог все это поднять на ppa и заставить работать как надо в trusty! Я просто хочу поблагодарить @sneetsher за всю помощь и терпение на этом пути. Надеюсь, этот скрипт поможет другим, кто хочет сделать что-то подобное:https://github.com/kevinkreiser/ppa-libprime-server/blob/master/build.sh
решение1
Ну, я мог бы протестировать это на Ubuntu 14.04 и (с последним коммитом) на Ubuntu 16.04.
Так как вы новичок в упаковке, лучше включить подробный
debhelper
вывод. Раскомментируйтеexport DH_VERBOSE=1
файлrules
.Пакет, похоже, зависит
autoreconf
не только отautomake
/autotools
. Поэтому изменитеrules
основную строку на:%: #dh $@ --with autotolls-dev dh $@ --parallel --list-missing --with autoreconf
и добавить в файл
dh-autoreconf
зависимости сборки .control
Так что теперь вам больше не нужно предварительно генерировать файлы автоматической сборки, запуская их
./autogen.sh
вручную. Помните, что все должно быть сделано черезrules
файл, иначе это приведет к сбою при сборке на сервере PPA с чистым исходным деревом.Один из тестов не пройден, я обхожу их, пропуская. переопределяя
dh_auto_test
. Поэтому я добавляю это вrules
файл:override_dh_auto_test: echo skip auto-test
оставьте это на потом, чтобы исправить.
Для пустого
libprime-server
пакета это происходит потому, что у него неправильное имя.libprime-server
вcontrol
файле иlibprime-server1
в1
других (напримерlibprime-server1.install
, )Да,
lintian
(инструмент QA) выдает это предупреждение, поскольку он ожидает, что это будет основная версия пакета. Да, должно быть нормально переименовать его вlibprime-server0
. Есть только одно замечание: вам нужно очистить дерево сборки от предыдущей сборки. Поэтому удалитеdebian/libprime-server1
папку и попробуйте пересобрать снова.Вы можете добавить столько пакетов, сколько захотите, см. обновленные файлы ниже.
Да, зависимости должны включать бинарный пакет,
libprime-server0
. Исходный пакетlibprime-server
не является зависимостью ни от какого.Я не использовал ваш скрипт для сборки, я использовал другой ручной рабочий процесс (загрузил оригинальный zip-архив, распаковал его, добавил папку debian, собрал с помощью
debuild
). Я не смог воспроизвести ту же проблему, что и с пустыми бинарными пакетами.Я мог бы воспроизвести это с помощью
build.sh
. Проблема в том, что вы изменили полностьюdebian/
:rm -rf libprime-server/debian cp -rp ../debian libprime-server
но зафиксировал только один файл
bzr add debian/source/format
Чтобы исправить это, закоммитьте всю папку:
bzr add debian
bzr builddeb
похоже, используются толькоDebian
файлы коммита/тега (с меткой), а не текущее рабочее дерево.
Вот файлы, которые я изменил:
debian/rules
#!/usr/bin/make -f # -*- makefile -*- # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 %: #dh $@ --with autotools-dev dh $@ --parallel --list-missing --with autoreconf override_dh_auto_test: echo skip auto-test
debian/control
Source: libprime-server Priority: optional Maintainer: Kevin Kreiser <[email protected]> Build-Depends: debhelper (>= 9), autotools-dev, dh-autoreconf, libcurl4-openssl-dev, libzmq3-dev Standards-Version: 3.9.5 Section: libs Homepage: https://github.com/kevinkreiser/prime_server Vcs-Git: git://github.com/kevinkreiser/prime_server.git Package: libprime-server-dev Section: contrib/libdevel Architecture: any Depends: libprime-server0 (= ${binary:Version}), ${misc:Depends} Description: Service oriented distributed computing API A set of APIs designed around the zeromq butterfly pattern specifically focused on servicing http requests Package: libprime-server0 Section: contrib/libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Service oriented distributed computing API A set of APIs designed around the zeromq butterfly pattern specifically focused on servicing http requests Package: prime-server-bin Section: contrib/misc Architecture: any Depends: libprime-server0 (= ${binary:Version}), ${misc:Depends} Description: Service oriented distributed computing API A set of APIs designed around the zeromq butterfly pattern specifically focused on servicing http requests
libprime-server1.install
переименован вlibprime-server0.install
libprime-server1.dir
переименован вlibprime-server0.dir
Создавать
prime-server-bin.dirs
usr/bin
Создавать
prime-server-bin.install
usr/bin/*
build.sh
#!/bin/bash set -e rm -rf build mkdir build pushd build #get prime_server software #sudo apt-get install autoconf automake libtool make gcc-4.9 g++-4.9 lcov sudo apt-get install libcurl4-openssl-dev libzmq3-dev git clone --branch 0.3.2 --recursive https://github.com/kevinkreiser/prime_server.git tar pczf prime_server.tar.gz prime_server rm -rf prime_server #start building the package sudo apt-get install dh-make dh-autoreconf bzr-builddeb bzr dh-make libprime-server 0.3.2 prime_server.tar.gz rm -rf libprime-server/debian cp -rp ../debian libprime-server pushd libprime-server bzr add debian bzr commit -m "Initial commit of Debian packaging." bzr builddeb -- -us -uc #TODO: sign the package popd #TODO: push the package to the ppa #TODO: make an ITP for inclusion in mainline popd