build - 关于在 Debian 上构建影子包的问题
问题描述
我在 Debian 10.4 系统上。由于源代码的更改,我正在尝试编译 shadow-4.5 包。
这是我的被子程序:(来自https://wiki.debian.org/UsingQuilt)
$ apt-get source shadow/stable
$ export QUILT_PATCHES=debian/patches
$ export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
$ quilt push -a
$ quilt new xxx_test_patch
$ quilt add <file_changed>
$ < here my source code modifications ... >
$ quilt refresh
$ quilt pop -a
而且,最后构建我的包:
$ debuild -b -us -uc
我的包编译没有问题,但生成的 .deb 文件中包含的二进制文件不包含我的修改。
但是,当我手动编译二进制文件(使用 configure an make)时,在源代码树的 src 目录中生成的二进制文件确实包含我的更改。
除了使用 debian“debuild”推荐的工具之外,我还想通过我的修改生成 debian 包(.deb)。
我不知道是我忘记了还是做错了什么。
提前致谢
解决方案
如果有人有这个问题,我会发布我的问题的解决方案。我想我找到了解决方案。
我没有想到使用“字符串”来检查二进制文件的内容,我用“strace”验证了我的二进制文件的良好功能。这让我可以看到我修改后的字符串 (/etc/test/passwd) 存在于编译的二进制文件中。
我还注意到“手动”编译的二进制文件在构建过程中没有加载 PAM 模块,这与使用“debuild”完成的构建不同。经过一番研究,我发现这些相同的绝对路径(/etc/{passwd,shadow})也存在于 libpam-modules 包的共享库中:
$ strings /lib/x86_64-linux-gnu/security/pam_* | grep "shadow\|passwd"
我认为这就是手动编译的二进制文件有效的原因,因为它不使用共享库中存在的路径。使用 debuild 生成的二进制文件的“strace”总是返回旧路径(/etc/{passwd, shadow}),因为它们被 PAM 模块重载。
解决方案是重新编译 libpam-modules 包并进行修改。
P。
推荐阅读
- vue.js - 带有浏览器构建的 Vue 3 日期选择器?
- collections - 放心 - Json - 如何创建地图
- sql - 如何在 Big Query / SQL 中动态映射对象?
- python - 基于不规则时间序列数据计算规则周期平均值的最佳方法
- python - 如何使用此标准(使用 Pandas)在数据框中查找行?
- kubernetes - 手动触发 kubernetes cronjob 失败
- python - 如何使用 python 脚本运行多个服务器?
- javascript - 如何在一页上显示多个(未知数量的幻灯片)?
- typescript - 从对象文字自动推断的记录类型(例如`uknown`)
- python-3.x - 计算接受字符串的平均成绩