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

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

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

答案1

这取决于分布和原始(“上游”)来源。

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

如果情况并非如此,那么发行版通常确实必须向源添加补丁,以使其将文件移动到他们认为“正确”的位置。在大多数情况下,分发打包者将编写一个补丁,该补丁将允许按上述方式配置源,以便他们可以将补丁发送给上游维护者,而不必继续维护/更新它。配置文件位置是这种情况,但其他东西也是如此,例如bin/sbin可执行文件(系统管理员命令的解释在发行版之间有所不同)、编写文档的位置等等。

旁注:如果您维护一些免费软件,让包装商更容易与您交谈。否则我们就必须维护这样的补丁,没有什么特别好的理由......

答案2

他们在源代码树上应用了补丁来调整位置。

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

补丁应用示例

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

对于 Sid 来说这不是问题:ruamel.base未安装旧版本(或者可以通过包管理删除)。因此他们应用了修补,您可以在ruamel.yamlSid 的信息页面ruamel.yaml这消除了on的依赖ruamel.base

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

相关内容