这可能主要是美学问题,但它一直困扰着我,让我需要付出更多的努力来解决它。
在我的工作环境中,我们非常依赖内部开发的 Linux 工作站和服务器软件,我花了一些时间研究一些构建工具,这些工具提供了一致的构建和安装过程,并减少了每个项目的样板。我尽可能地遵守现有标准。因此,我拥有一个安装系统,当直接从源代码安装时,它会将输出文件放在 /usr/local 中,而当打包(例如构建 RPM)时,它会放在 /usr 中。我们目前的大部分软件都是直接从源代码安装的,不过这种情况将来可能会改变。
因此,直接安装时,可执行文件进入 /usr/local/bin 和 /usr/local/libexec,库进入 /usr/local/lib64(这是 RHEL 环境),包含文件进入 /usr/local/include,等等。这几乎适用于所有内容 - .desktop 文件、图标、pkg-config 文件、文档、配置文件……它要么正常工作,要么可以轻松配置为工作,只需进行简单的系统更改。但我没有成功使用 systemd 单元文件。
我的构建工具当前将这些文件放在 /usr/lib/systemd/system 中,因此这是正常行为的硬编码异常。
有没有办法配置 systemd 来查找 /usr/local 下的服务单元文件(即 /usr/local/lib/systemd/system),这样安装过程就可以更加一致,我可以避免安装时出现有关不可移植的硬编码安装目标目录的警告,并且文件可以转到看起来更规范的“正确”位置?我可以在系统中添加配置(最好以插件的形式)来使其工作。
我们在这里不做太多,但我想这个问题也可能适用于安装到自定义前缀的软件,例如 /opt/MySoftware。