在 Linux 上安装我的产品的位置?
对于一些软件开发者和独立软件供应商 (ISV) 而言,关于在哪里安装应用程序和软件包存在不同的观点。有些人喜欢安装在 /usr/bin/ 或 /usr/local/bin/ 中,而另一些人则偏好 /opt/ 目录。您的偏好可能因您是否具有 UNIX System V、伯克利软件发行版 (BSD) 或 GNU/Linux 背景而异。
文件系统层次标准 1 (FHS) 2.1 版本的编写旨在消除这些差异,通过指定详细的指南,说明系统服务、配置和软件应位于 UNIX 或基于 UNIX 的操作系统上的何处。详细来说,FHS 解释了每个主要目录的内容和用途(见图 1)。
简而言之,基本操作系统或发行版的应用程序应安装在 /sbin/、/bin/ 和 /usr/ 中。系统管理员可以从源代码构建软件包,并将它们安装到 /usr/local/bin/ 目录中。然而,非必要应用程序和附加软件产品的纯二进制包应安装在 /opt/<package>/ 目录中,其中 <package> 是描述软件包套件的名称。二进制可执行文件应位于各自的 /opt/<package>/bin/ 子目录中。如果存在任何随附的 UNIX 手册页,则应将其安装在 /opt/<package>/man/ 子目录中。
System V 应用程序二进制接口 [AT&T 1990]、Intel 二进制兼容性标准 V.2 (iBCS2)、通用操作系统环境 (COSE)、Linux 标准库 (LSB) 以及一般的 UNIX 社区已经确立了 /opt/ 目录用于附加软件。
系统管理员应为 /opt/ 文件系统创建一个单独的磁盘分区,最终用户应将 /opt/<package>/bin/ 和 /opt/bin/ 添加到他们的 PATH 环境变量中。通常,最终用户的 shell 会在各自的 /opt/<package>/bin/ 目录中找到应用程序;然而,系统管理员可能已在 /opt/bin/ 中为每个软件包创建了符号链接或包装脚本。
/opt/ 二进制可执行文件的主机特定配置应放在 /etc/opt/<package>/ 目录中。这些是 /opt/ 软件包配置文件的正确位置,因为 /etc/ 是所有主机特定系统配置在基于 UNIX 的操作系统上驻留的位置。
软件包中的变量文件,或在系统运行时正常更改的文件,应保存在 /var/opt/<package>/ 目录中。/var/ 的内容是主机特定的,并且该目录通常配置在其自己的文件系统中,以防止意外填充根文件系统。
这些规则的一个例外是,当软件包需要在其他地方安装或创建文件时,或者这样做有意义时。例如,如果一个软件包要创建一个新设备,那么它将在 /dev/ 目录中创建。
现在我们了解了文件系统层次标准对于附加软件包的规则,让我们尝试打包和安装一个名为 Whizbang 的虚构软件包套件。如果要遵循 LSB 规范,我们应该使用 RPM 软件包管理器2 (RPM) 并尝试为 /opt/ 目录打包我们的软件。这在 whizbang-1.2-3.spec 配置文件(见列表 1)的第 18-20 行中显示。第 8 行显示了如何使其可重定位,以便系统管理员可以在需要时将其安装在其他位置。然而,不建议安装在非标准目录中。
让我们构建 Whizbang 的 RPM 软件包,如下所示。使用 whizbang-1.2-3.spec 作为输入文件,RPM 可以构建并生成一个源软件包文件 whizbang-1.2-3.src.rpm 和一个二进制软件包文件 whizbang-1.2-3.i386.rpm。
Edward Bailey 撰写的书籍 Maximum RPM,或 RPM 网站 http://www.rpm.org/,是学习创建 RPM 软件包的优秀资源。目前,不用担心细节,但要认识到,关于在何处安装大多数东西是有指南的。要创建 whizbang-1.2-3.i386,请执行以下操作
# rpm -ba /usr/src/redhat/SPECS/whizbang-1.2-3.spec Processing files: whizbang Finding provides... Finding requires... Prereqs: /bin/sh Wrote: /usr/src/redhat/SRPMS/whizbang-1.2-3.src.rpm Wrote: /usr/src/redhat/RPMS/i386/whizbang-1.2-3.i386.rpm
使用我们刚刚创建的 whizbang-1.2-3.i386.rpm 二进制软件包,我们现在可以将其安装到系统中,如下所示
# rpm -i \/usr/src/redhat/RPMS/i386/whizbang-1.2-3.i386.rpm
现在 whizbang 已安装在 /opt/whiz/bin/ 中,尝试从命令行运行它。您的 shell 找到它了吗?/opt/whiz/bin/ 在您的 PATH 环境变量中吗?如果我们想通过从 /opt/bin/whizbang 创建到 /opt/whiz/bin/whizbang 的符号链接来使最终用户更方便,该怎么办?这可以在 RPM 安装的后安装阶段完成,如下所示
%post P=$RPM_INSTALL_PREFIX mkdir $P/bin > /dev/null 2>&1 ln -fs $P/whiz/bin/whizbang $P/bin/whizbang mkdir $P/man/man1 > /dev/null 2>&1 ln -fs $P/whiz/man/whizbang.1 $P/man/man1/whizbang.1 # EOF
这个“可重定位”的后安装代码将添加到列表 1 中的第 20 行;然而,删除符号链接的 RPM %postun 卸载解决方案留给读者作为练习。
有时,有必要或希望将软件包套件安装在与其最初打包的位置不同的地方。现在让我们卸载 whizbang-1.2-3 RPM 软件包,并将其重新安装在备用位置。
# rpm -e whizbang-1.2-3 # rpm -i --prefix /usr/local # /usr/src/redhat/RPMS/i386/whizbang-1.2-3.i386.rpm
总而言之,非必要应用程序和附加软件产品的纯二进制包应安装在 /opt/<package>/bin/ 目录中。我们已经了解了如何创建可重定位的 RPM 软件包以及如何构建它的基础知识,并且我们通过能够覆盖默认的 /opt/ 目标并选择备用位置来证明了其灵活性。遵循 FHS 标准是使您的 GNU/Linux 应用程序更符合 LSB3 规范的第一步。
