1

我在 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)。

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

提前致谢

4

1 回答 1

0

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

我没有想到使用“字符串”来检查二进制文件的内容,我用“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。

于 2020-12-28T23:06:38.690 回答