【发布时间】:2012-01-29 22:57:33
【问题描述】:
大多数使用 Autotools 的软件包都是用户级实用程序,或者至少足够高以完全低于 /usr,或低至足以完全低于 /usr。
我正在编写一个包,它需要将一些文件安装到/bin,一些安装到/sbin、/usr/bin 和/usr/sbin。它正在替换传统上放置在这些位置下的几个现有二进制文件。
它还需要在/lib/security 中安装一个PAM 模块(显然/usr/lib/security 不起作用)。
现在的问题是:默认配置的前缀似乎是/usr/local。我可以在我的configure.ac 中控制该默认值。而且至少Gentoo Linux 的默认值是--prefix=/usr。这是个问题,因为它会覆盖我在configure.ac 中设置的所有默认值。
我简要了解了其他类似的软件包是如何处理这个问题的。以下是我的发现:
- bash-4.1 似乎安装到
/usr/bin中,并且发行版构建脚本将 bash 二进制文件移动到/bin - Linux-PAM 在
configure.ac中有hack,因此如果前缀是/usr,它将使用/sbin和/lib来处理它的一些文件。它还将默认前缀设置为/usr。我不确定如果用户传递不同的--prefix会发生什么。 -
如果前缀是
/usr,shadow-utils将exec_prefix设置为""。那么bin_PROGRAMS指向/bin,ubindir被声明为指向${prefix}/bin,所以ubin_PROGRAMS指向/usr/bin。
我的问题是:
-
--prefix的其他发行版默认设置是什么?我可以合理地假设它总是/usr吗?我现在只关心 Linux,而不关心 BSD。 - 以上哪种解决方案看起来最干净?您是否发现了一些更好的解决方案?
- 上述解决方案有哪些潜在问题?这些问题有解决方案吗?
- 我可以将所有内容安装到
/bin并创建兼容性符号链接。它是否使问题更简单? - 是否有其他一些通用构建系统可以被低级系统实用程序接受以更好地满足我的要求?
请随时要求澄清我正在尝试做什么。请注意,如果我想保持与我要替换的内容的兼容性,如果它用于运送二进制文件 A 和 B,一个在 /sbin 和一个在 /usr/bin,我想我只需要在这些地方或最少有符号链接。 PAM 模块也有固定的安装位置。
我显然会支持任何有用的答案。我是一个“公认的答案”我主要是在寻找“我应该做什么”的建议,什么是问题的最干净的解决方案,以及如果适用的话,讨论选项和缺点、利弊。
【问题讨论】:
-
您不应更改 configure.ac 中的默认值。如果用户在没有分配前缀的情况下运行您的配置脚本,则用户完全有权期望 /usr/local 作为默认值。如果你改变它,你就有一个包装错误。设置前缀是用户的权利(和责任),包维护者无权操心。
-
您可以在 .spec 文件或 debian/rules 中设置 --prefix,但绝对不得在 configure.ac 中修改它
标签: linux makefile autotools autoconf pam