我使用的是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";。
我不知道我是忘了还是做错了什么。
提前感谢
如果有人有这个问题,我会发布问题的解决方案。我想我找到了解决办法。
我没有想过用";字符串";为了检查二进制文件的内容,我用";strace";。这使我能够看到修改后的字符串(/etc/test/passwd(存在于编译的二进制文件中。
我还注意到,二进制编译的";"手工";在构建期间没有加载PAM模块,这与用";debuild";。经过一些研究,我发现libpam模块包的共享库中也存在这些相同的绝对路径(/etc/{passwd,shadow}(:
$ strings /lib/x86_64-linux-gnu/security/pam_* | grep "shadow|passwd"
我认为这就是手工编译的二进制文件有效的原因,因为它不使用共享库中的路径。";strace";的二进制文件总是返回旧路径(/etc/{passwd,shadow}(,因为PAM模块重载了这些路径。
解决方案是对libpam模块包进行修改后重新编译。
第页。