大多数使用 Autotools 的软件包都是用户级实用程序,或者至少具有足够高的级别,可以完全在/usr
,或低到完全低于/usr
.
我正在编写一个包,需要将一些文件安装到/bin
,一些进入/sbin
, /usr/bin
and /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 存在漏洞
configure.ac
这样如果前缀是/usr
,它将使用/sbin
and /lib
对于它的一些文件。它还将默认前缀设置为/usr
。我不确定如果用户传递不同的值会发生什么--prefix
.
-
shadow-utils
set exec_prefix
to ""
如果前缀是/usr
. Then bin_PROGRAMS
指的是/bin
, and ubindir
被声明为指向${prefix}/bin
以便ubin_PROGRAMS
指的是/usr/bin
.
我的问题是:
- 其他发行版的默认值是什么
--prefix
?我可以合理地假设它总是/usr
?我现在只关心 Linux,而不是 BSD。
- 上述哪种解决方案看起来最干净?您看到一些更好的解决方案吗?
- 上述解决方案有哪些潜在问题?这些问题有一些解决方案吗?
- 我很乐意将所有内容安装到
/bin
并创建兼容性符号链接。它会让问题变得更简单吗?
- 还有其他的吗common构建低级系统实用程序可接受的系统,以更好地满足我的要求?
请随时要求澄清我正在尝试做什么。请注意,如果我想保留与我要替换的内容的兼容性,如果它用于传送二进制文件 A 和 B,则其中之一/sbin
和一在/usr/bin
,我想我只需要在这些地方进行替换或者至少有符号链接。 PAM 模块也有固定的安装位置。
我显然会投票赞成任何有用的答案。我是一个“接受的答案”,我主要是在寻求建议“我应该做什么”,解决问题的最干净的解决方案是什么,以及如果适用的话,讨论选项和缺点、利弊。
本质上,两者之间的区别/
和/usr
层次结构不是也不应该掌握在软件包的上游维护者手中(请阅读:这不是您的责任)。自从/
应该只包含启动和制作所需的文件/usr
可用,这是一项行政决定/
。对于源安装,此决定由安装程序做出,而对于发行版,则由软件包维护者做出。
出于基本原理,假设有人正在尝试构建一个chroot
环境。 /usr 和 / 之间的区别在环境中没有意义,不会进行区分。所有前缀均设置为/foo/bar/chroot
,以及任何与以下内容混淆的配置脚本$prefix
可能会引发奇怪的行为。同样的论点也适用于像 Debian 打包助手这样的脚本,它们依赖于通常的$prefix
语义来工作。
因此,最干净的解决方案是bash-4.1
解决方案。您基本上有两个干净的选择:将您的软件包拆分为启动关键部分和非启动关键部分,或者让您的configure
脚本为启动关键部分提供了一个替代前缀,默认设置为/
,离开$prefix
as /usr
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)