将二进制文件安装到/ bin,/ sbin,/ usr / bin和/ usr / sbin中,与--prefix和DESTDIR进行交互

问题描述 投票:6回答:2

使用Autotools的大多数软件包是用户级实用程序,或者至少足够高,完全低于/usr,或者足够低,完全低于/usr

我正在写一个包,将需要安装一些文件到/bin,一些进入/sbin/usr/bin/usr/sbin。它取代了传统上放置在这些位置下的几个现有二进制文件。

现在问题是:默认配置的前缀似乎是/lib/security。我可以控制我的/usr/lib/security即默认。至少的Gentoo Linux的默认设定为/usr/local。这是一个问题,因为它会覆盖我把我的configure.ac任何缺省值。我简要介绍了其他类似软件包如何处理此问题。这是我的发现:

Linux-PAM在--prefix=/usr中有hacks,因此,如果前缀为configure.ac,它将对其某些文件使用/usr/bin/bin。我不确定如果用户传递不同的configure.ac,会发生什么。

    /usr/sbin/lib如果前缀为/usr。然后,--prefix指向shadow-utils,并且声明exec_prefix指向"",以便/usr指向bin_PROGRAMS
  • 我的问题是:
  • /bin其他发行版的默认设置是什么?我可以合理假设它总是ubindir?我现在只关心Linux,而不关心BSD。

  • 您看到一些更好的解决方案吗?
这些问题有解决方案吗?我很好安装到一切${prefix}/bin和创建符号链接的兼容性。它使问题更简单吗?
    有一些其他
  • 普通
  • 构建系统是低级别的系统工具,更好地处理我的要求,可以接受?
  • 随意问澄清什么,我试图做的。请注意,如果我想保持与我要替换的内容的兼容性,如果它曾经用于运送二进制文件A和B,一个在ubin_PROGRAMS中,另一个在/usr/bin中,我想我只需要在那些地方或替换处放置替换物即可。至少有符号链接。
  • 我显然会赞成任何有用的答案。
  • 使用自动工具的大部分包用户级实用程序或至少足够高的电平是完全/ usr下,或足够低以完全低于/ USR。我正在写一个需要...
  • 本质上,--prefix/usr层次之间的区别不是也不应该位于包上游维护者的手(阅读:不是你的责任)。用于从源装置,该决定由安装程序制成,并且为分布,被包维护者。

对于理由,假设某人正在试图建立一个/bin环境。之间的/ usr和/区别是在环境中毫无意义,不会进行。所有的前缀设定为/sbin,任何配置脚本/usr/bin搞乱很可能导致奇怪的行为。同样的论点也适用于像Debian的包装帮手脚本,依靠平时/语义的工作。

该干净的解决方案因此是/usr溶液。你有两种基本的清洁选项:分别您的包放到引导关键和非启动关键部件,或者让你的/脚本可供选择前缀为引导 - 关键部件,它的默认设置为/usr离去/chroot

有两个不同的层面对这个问题,你的问题似乎都适用于第二含义(由*的.spec文件,或者是Debian /规则,或* .pkg文件。生成的二进制包)至于自动工具而言,你不在乎。你不能试图指定比你的configure.ac的/ usr /本地以外的默认前缀。指定哪里的东西应该安装在二进制包控制文件中configure.ac完成,和NOT。使用autoconf生成的配置脚本源代码分发应安装在默认的/ usr / local和别的是一个包装错误。

如果您希望拥有一个源分发版,用户可以使用它轻松地将其安装在特定平台上的特定位置,则可以在压缩包中包含一个这样做的脚本。例如,您可能包含一个类似于以下内容的构建脚本:

#!/ bin / sh这里是$ 1富)ARGS = ' - 前缀= / USR --bindir = / bin中--sysconfdir = /等' ;;巴)ARGS = ' - 前缀= /选择' ;;*)args = ;;埃萨克$(目录名称$ 0)/配置的$ args &&使&&进行安装

这将指定默认的参数配置为“富”和“酒吧”平台,但它确实听起来像你的问题是关于二进制包控制文件。
linux makefile autotools autoconf pam
2个回答
4
投票

有两个不同的层面对这个问题,你的问题似乎都适用于第二含义(由*的.spec文件,或者是Debian /规则,或* .pkg文件。生成的二进制包)至于自动工具而言,你不在乎。你不能试图指定比你的configure.ac的/ usr /本地以外的默认前缀。指定哪里的东西应该安装在二进制包控制文件中configure.ac完成,和NOT。使用autoconf生成的配置脚本源代码分发应安装在默认的/ usr / local和别的是一个包装错误。

如果您希望拥有一个源分发版,用户可以使用它轻松地将其安装在特定平台上的特定位置,则可以在压缩包中包含一个这样做的脚本。例如,您可能包含一个类似于以下内容的构建脚本:


2
投票
© www.soinside.com 2019 - 2024. All rights reserved.