dpkg-buildpackage: как включить .so файлы в исходный пакет - PullRequest
0 голосов
/ 13 июня 2019

Я хочу упаковать стороннее приложение, которое содержит .so файлы.Когда я собираю пакет с помощью dpkg-buildpackage, файлы .so исключаются из созданного исходного пакета.

У меня нет файла .orig.Итак, я использую «3.0 (native)» в debian / source.

Сначала у меня были следующие сообщения:

dpkg-shlibdeps: error: cannot find library...

Итак, я включил «override_dh_makeshlibs» и «override_dh_shlibdeps» в debian/ rules.

man dpgk-source предлагает использовать «3.0 (quilt)» в debian / source, но у меня нет файла .orig, просто tar-файл с файлами в нем.

Я пытался настроить файл debian / include-binaries тем не менее (с «path_to.so» в нем), но это не помогло.

debian / rules:

%:
dh $@

override_dh_strip:
    @echo "Not running dh_strip"

override_dh_makeshlibs:
    @echo "Not running dh_makeshlibs"

override_dh_shlibdeps:
    @echo "Not running dh_shlibdeps"

debian / source / format:

3.0 (native)

команда сборки:

dpkg-buildpackage -aamd64 -us -uc

Я ожидаю, что в исходный пакет будут включены все файлы, но в нем отсутствует .sofiles.

Файл deb построен правильно.

[EDIT: частичное решение]
Мне удалось создать deb с исходным кодом, создав вручнуюфайл orig перед сборкой deb.

В исходном каталоге:

changelog:

make sure that the version number has a revision.

sources / format:

3.0 (quilt)

source/ ВКЛЮЧАЕТe-binaries:

path_to.so

команды:

VERSION=$(dpkg-parsechangelog -S Version | sed -rne 's,([^-\+]+)+(\+dfsg)*.*,\1,p'i)
SOURCE=$(dpkg-parsechangelog -S Source)
UPSTREAM_PACKAGE=${SOURCE}_${VERSION}.orig.tar.gz

rm -f ../${UPSTREAM_PACKAGE}
tar czvf ../${UPSTREAM_PACKAGE} --exclude=debian --exclude=Makefile

dpkg-buildpackage -rfakeroot -aamd64 -us -uc

Есть ли способ автоматизировать это?

Не знаю, еслиили как это возможно в файле debian / rules или в файле Makefile.

1 Ответ

0 голосов
/ 14 июня 2019

Это решение, которое я придумал.

Создайте свой проект так, как вы хотите, чтобы он был упакован.Я предполагаю, что вы знаете, какие файлы debian необходимы для успешной упаковки вашего проекта.

Эти файлы созданы или адаптированы:
debian / source / format:

3.0 (quilt)

debian / rules:

#!/usr/bin/make -f
# -*- makefile -*-
# https://www.debian.org/doc/debian-policy/ch-source.html#s-debianrules
# https://manpages.debian.org/stretch/debhelper/debhelper.7.en.html

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

version := $(shell dpkg-parsechangelog -S Version | sed -rne 's,([^-\+]+)+(\+dfsg)*.*,\1,p'i)
source := $(shell dpkg-parsechangelog -S Source)
upstreampck := $(source)_$(version).orig.tar.gz

clean:
    @ echo CLEAN
    rm -f ../$(upstreampck)
    tar czf ../$(upstreampck) --exclude=debian --exclude=.pc .
    dh_testdir
    dh_auto_clean
    dh_clean 

build:
    @ echo BUILD: nothing to do here
    #dh_testdir
    #dh_auto_configure
    #dh_auto_build
    #dh_auto_test

binary:
    @ echo BINARY
    dh_testroot
    dh_prep
    dh_install
    dh_installdocs
    dh_installchangelogs 
    dh_installexamples
    dh_installman
    dh_link
    dh_compress
    dh_fixperms
    dh_installdeb
    dh_gencontrol
    dh_md5sums
    dh_builddeb

.PHONY: build clean binary

Обновите cangelog и убедитесь, что добавили номер редакции для вышестоящей версии:

dch -i -D stable -u low -M -p

Сборка пакета:

dpkg-buildpackage -rfakeroot -us -uc -aamd64 --source-option=--include-binaries

Это сгенерируетфайл orig и файл debian / source / include-binaries.

Все следующие сборки можно выполнить с помощью:

dpkg-buildpackage -rfakeroot -us -uc -aamd64
...