关于在 Debian 上构建影子包的问题

Question about building shadow package on 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 和 make)时,在我的源代码树的 src 目录中生成的二进制文件确实包含我的更改。

除了使用 debian“debuild”推荐的工具之外,我还想仅用我的修改生成 debian 包 (.deb)。

不知道是我忘记了还是做错了什么

提前致谢

我post如果有人遇到这个问题,我会解决我的问题。 我想我找到了解决方案。

我没有想到使用“字符串”来检查二进制文件的内容,我使用“strace”验证了我的二进制文件是否正常运行。 这让我看到我修改的字符串 (/etc/test/passwd) 出现在编译的二进制文件中。

我还注意到,与使用“debuild”完成的构建不同,“手动”编译的二进制文件在构建期间没有加载 PAM 模块。 经过一些研究,我发现这些相同的绝对路径 (/etc/{passwd, shadow}) 也存在于 libpam-modules 包的共享库中:

$ strings /lib/x86_64-linux-gnu/security/pam_* | grep "shadow\|passwd"

我认为这就是手动编译的二进制文件起作用的原因,因为它不使用共享库中存在的路径。 使用 debuild 生成的二进制文件的“strace”总是 returns 旧路径 (/etc/{passwd, shadow}) 因为它们被 PAM 模块超载了。

解决方案是重新编译 libpam-modules 包并进行修改。

P.