大多数使用 Autotools 的软件包都是用户级实用程序,或者至少是足够高的级别以完全低于/usr
,或低到足以完全低于/usr
.
我正在编写一个需要将一些文件安装/bin
到/sbin
. 它正在替换传统上放置在这些位置下的几个现有二进制文件。/usr/bin
/usr/sbin
它还需要安装一个 PAM 模块/lib/security
(显然/usr/lib/security
不会工作)。
现在的问题是:默认配置的前缀似乎是/usr/local
. 我可以在我的configure.ac
. 而且至少 Gentoo Linux 的默认值是--prefix=/usr
. 这是一个问题,因为它会覆盖我在configure.ac
.
我简要介绍了其他类似的软件包是如何处理这个问题的。以下是我的发现:
- bash-4.1 似乎安装到
/usr/bin
,并且发行版构建脚本将 bash 二进制文件移动到/bin
- Linux-PAM 有 hack 功能,
configure.ac
因此如果 prefix 是/usr
,它将使用/sbin
and/lib
用于它的一些文件。它还将默认前缀设置为/usr
. 我不确定如果用户通过不同的--prefix
. shadow-utils
设置exec_prefix
为""
if 前缀是/usr
. 然后bin_PROGRAMS
是指/bin
,并且ubindir
被声明为指向,${prefix}/bin
所以ubin_PROGRAMS
指的是/usr/bin
。
我的问题是:
- 其他发行版的默认设置是
--prefix
什么?我可以合理地假设它总是/usr
吗?我现在只关心 Linux,而不关心 BSD。 - 以上哪种解决方案看起来最干净?你看到一些更好的解决方案吗?
- 上述解决方案有哪些潜在问题?这些问题有一些解决方案吗?
- 我可以将所有内容安装到
/bin
并创建兼容性符号链接。它是否使问题更简单? - 是否有一些其他常见的构建系统可以更好地满足我的要求的低级系统实用程序?
随时要求澄清我正在尝试做的事情。请注意,如果我想保持与我要替换的内容的兼容性,如果它曾经运送二进制文件 A 和 B,一进/sbin
一进/usr/bin
,我想我只需要在这些地方放置替换或至少有符号链接。PAM 模块也有固定的安装位置。
我显然会支持任何有用的答案。我是一个“公认的答案”我主要是在寻找“我应该做什么”的建议,什么是问题的最干净的解决方案,以及如果适用的话,讨论选项和缺点、利弊。