dpkg-buildpackage:如何在源包中包括.so文件

时间:2019-06-13 13:23:38

标签: packaging dpkg

我想打包一个包含.so文件的第三方应用程序。 当我使用dpkg-buildpackage生成软件包时,.so文件将从生成的源软件包中排除。

我没有.orig文件。因此,我在debian / source中使用“ 3.0(本机)”。

首先,我收到了以下消息:

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

因此,我在debian / rules文件中包含了“ override_dh_makeshlibs”和“ override_dh_shlibdeps”。

man dpgk-source建议在debian / source中使用“ 3.0(quilt)”,但我没有.orig文件,只是一个包含文件的tar。

我仍然尝试设置一个debian / include-binaries文件(其中带有“ path_to.so”),但这没有帮助。

debian /规则:

%:
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

我希望源软件包中包含所有文件,但缺少.so文件。

deb文件已正确构建。

[编辑:部分解决方案]
通过在构建Deb之前手动创建orig文件,我设法通过上游源创建了deb。

在源目录中:

变更日志:

make sure that the version number has a revision.

来源/格式:

3.0 (quilt)

源/包含二进制文件:

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 :(得分:0)

这是我想出的解决方案。

根据需要打包创建项目。我假设您知道成功打包项目需要哪些debian文件。

这些文件已创建或修改:
debian / source / format:

3.0 (quilt)

debian /规则:

#!/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