许多 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.base
并ruamel.yaml
依赖于该新版本。
对于 Sid 来说这不是问题:ruamel.base
未安装旧版本(或者可以通过包管理删除)。因此他们应用了修补,您可以在ruamel.yaml
Sid 的信息页面ruamel.yaml
这消除了on的依赖ruamel.base
。
其他发行版也有类似的设置。例如,如果您查看创建源 RPM 文件(例如 RedHat/CentOS/SuSE)的规范,您会发现您将软件包的原始 tarball 与将在配置/编译之前应用的一个或多个补丁结合在一起。