不同的发行版如何修改程序配置文件的位置?

bfv*_*yen 14 linux configuration distributions

许多 Linux 程序声明配置文件的位置取决于发行版。我想知道不同的发行版是如何做到这一点的。他们真的修改了源代码吗?是否有设置这些位置的构建参数?我已经搜索过这个,但找不到任何信息。我知道它就在那里,只是我似乎无法找到它。与此相关的“Linux 方式”是什么?

Wou*_*lst 14

这取决于发行版和原始(“上游”)来源。

对于大多数使用 autoconf 和 automake 的包,可以使用--sysconfdir参数指定查找配置文件的目录。其他构建系统(例如 CMake)有类似的选项。如果源包使用这些构建系统之一,那么打包者可以轻松指定正确的参数,并且不需要补丁。即使他们不这样做(例如,因为上游源使用一些本土构建系统),通常仍然可以指定一些构建配置来将配置文件移动到特定位置,而无需修补上游源。

事实并非如此,那么通常发行版确实必须向源添加补丁,以使其将文件移动到他们认为是“正确”的位置。在大多数情况下,分发打包者然后会编写一个补丁,允许在上述意义上配置源,以便他们可以将补丁发送给上游维护者,而不必继续维护/更新它。这是配置文件位置的情况,但也适用于其他内容,例如bin/sbin可执行文件(系统管理员命令的解释因发行版而异)、编写文档的位置等。

旁注:如果您维护一些免费软件,让打包人员轻松地与您交谈。否则我们必须无缘无故地维护这些补丁......


Ant*_*hon 8

他们将补丁应用于适应位置的源代码树。

有足够的“标准”可供每个发行版根据(个人)偏好和/或历史惯例进行选择。很少有只有优点的解决方案。这有时很烦人/令人困惑,但一个发行版中的一致性是最重要的目标:如果您已经知道程序 Y 的类似内容(例如设置/配置文件)在哪里,它会减少混乱并更容易猜测程序 Y 的位置X。

补丁应用示例

我的 python 包ruamel.yaml在 Debian Sid 中可用。它曾经依赖于ruamel.base,并且通过 PyPI 安装的用户可能仍然安装了较旧的、不兼容的版本ruamel.base。使用setup.py/PyPI 并不是真正的包管理,因此您无法删除以前通过依赖项安装的包。我通过制作一个新版本来解决 PyPI 用户的问题,该版本ruamel.base消除了与旧ruamel.base包相关的问题并ruamel.yaml依赖于该新版本。

对于 Sid 这不是问题:旧版本ruamel.base没有安装(或者可以通过包管理删除)。因此,他们应用了一个补丁,您可以在ruamel.yamlSid信息页面上找到该补丁,该补丁消除了对ruamel.yamlon的依赖ruamel.base

其他发行版也有类似的设置。例如,如果您查看创建源 RPM 文件的规范(例如,对于 RedHat/CentOS/SuSE),您将看到您将软件包的原始原始 tarball 与一个或多个补丁组合在一起,这些补丁将在配置/编译之前应用.