Paw*_*dan 6 linux autoconf makefile autotools pam
大多数使用自动工具的软件包都是用户级实用程序,或者至少足够高,完全在/ usr之下,或者足够低以至于完全低于/ usr.
我正在编写一个需要将一些文件安装到/ bin中的软件包,一些安装到/ sbin,/ usr/bin和/ usr/sbin中.它正在取代传统上放置在这些位置下的几个现有二进制文件.
它还需要在/ lib/security中安装PAM模块(显然/ usr/lib/security不起作用).
现在问题是:默认配置的前缀似乎是/ usr/local(我可以控制我的configure.ac中的默认值),至少Gentoo Linux的默认值是--prefix =/usr(这是一个问题因为它会覆盖任何默认值我输入了我的configure.ac).
我简要介绍了其他类似的软件包是如何处理这个问题的.以下是我的发现:
我的问题是:
随意请求澄清我正在尝试做什么.请注意,如果我想保留与我正在替换的内容的兼容性,如果它曾用于发送二进制文件A和B,一个在/ sbin中,一个在/ usr/bin中,我想我只需要在这些地方或在至少有符号链接.PAM模块也有固定的安装位置.
我显然会提出任何有用的答案.我是一个"接受的答案"我主要是在寻找建议"我该怎么做",这个问题最简洁的解决方案是什么,如果适用的话,讨论选项和缺点,利弊.
/
本质上,层次结构和层次结构之间的区别/usr
不是也不应该掌握在软件包的上游维护者手中(请阅读:这不是您的责任)。由于/
应该只包含启动和提供所需的文件/usr
,因此将/
. 对于源安装,此决定由安装程序做出,而对于发行版,则由软件包维护者做出。
出于基本原理,假设有人正在尝试构建一个chroot
环境。/usr 和 / 之间的区别在环境中没有意义,不会进行区分。所有前缀都设置为/foo/bar/chroot
,任何混乱的配置脚本$prefix
都可能会引发奇怪的行为。同样的论点也适用于像 Debian 打包助手这样的脚本,它们依赖于通常的$prefix
语义来工作。
因此,最干净的解决方案就是bash-4.1
解决方案。您基本上有两个干净的选项:将包拆分为启动关键部分和非启动关键部分,或者让您的configure
脚本为启动关键部分提供替代前缀,默认设置为/
,保留$prefix
为/usr
。