packaging - dpkg-buildpackage:如何在源包中包含 .so 文件
问题描述
我想打包一个包含 .so 文件的第三方应用程序。当我使用 dpkg-buildpackage 构建包时,.so 文件会从生成的源包中排除。
我没有 .orig 文件。所以,我在 debian/source 中使用“3.0 (native)”。
首先,我收到了这些信息:
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/源/格式:
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 中是否或如何做到这一点。
解决方案
这是我想出的解决方案。
按照您希望打包的方式创建项目。我假设您知道成功打包项目需要哪些 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
推荐阅读
- xslt - 如何检查递归步骤的最后一个数字并为小于 n 的递归步骤创建一个空元素?
- python - 使用run_in_executor而不是直接使用executor有什么好处?
- angular - 传递输入值后不更新属性
- excel - Word 和 Excel 与宏
- azure-sql-database - 如何强制 Azure SQL(无服务器)暂停?
- reactjs - React-persist 不是持久状态
- reactjs - 为什么在使用 Jest 测试 App 组件时重定向到登录页面?
- python - 有没有办法根据二分网络中的有限可能性来规范节点中心性?
- tomcat - 为什么Tomcat在启动后会系统地重新加载我的webapp?
- javascript - Node.js:有什么方法可以在 line-reader 的 eachLine 函数中停止读取文件和整个过程?