使用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
,会发生什么。
这些问题有解决方案吗?
我很好安装到一切${prefix}/bin
和创建符号链接的兼容性。它使问题更简单吗?对于理由,假设某人正在试图建立一个/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 &&使&&进行安装
这将指定默认的参数配置为“富”和“酒吧”平台,但它确实听起来像你的问题是关于二进制包控制文件。