IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux  >

使用 Stow 管理软件包

相对于 RPM,Stow 提供了另一种灵活且有用的方法

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Mugdha Vairagade (vmugdha@indiatimes.com), 独立开发人员

2003 年 2 月 10 日

本文是关于 Stow 的,它是用于 Linux 的软件安装管理实用程序,它许多地方都优于“久经考验”的 Red Hat 和 Debian 软件包管理系统。通过使用 Stow,可以将应用程序打包成标准的 tar 文件,并按照逻辑安排应用程序二进制文件,以易于访问。

Stow 是用 Perl 编写的,易于安装和使用,它虽然简单,但对于在 Linux 机器上组织和管理各种软件安装却很有效。Stow 可以方便地将不同软件包安排在组织良好的目录树结构中。 这不仅有助于将属于特殊软件包的文件与其它文件分开, 而且还给予用户在任何期望的位置存储或安装软件包的自由,同时使软件看上去被安装在软件包或 OS 要求的位置上。

注:如果具有 Linux 的中级知识并安装过 Linux 应用程序,则有助于理解本文。 在本文中,我们使用 Stow V1.3.3 和 Perl V5.005。

Linux 的软件安装管理

在我们开始了解 Stow 之前,先让我们研究一下 软件安装管理,它也称作 软件包管理。 软件安装管理在总体上描述了在系统上安装、卸载、更新和组织软件应用程序(或称为软件包)的活动。 在这些活动中,组织应用程序是尤其重要的活动。如果应用程序组织得井井有条, 那么在 Linux 机器上安装、升级和卸载应用程序会变得更加容易且更方便。

在 Linux 系统上,大多数应用程序必须安装在某一特定目录(通常是 /usr/local/ )中才能正确运行和起作用; 这种需求来自 Linux 或应用程序本身。如果只在 Linux 系统上安装了很少的应用程序并且它们各自的文件都可以很容易地彼此区分, 那么这不会造成任何严重问题。

然而,在实际方案中,可能有大量应用程序安装在同一目录中,该目录不久就会变得很杂乱。 设想一下,在安装一个应用程序时,它意外地覆盖了属于另一个应用程序的文件,那么您不得不替换该文件。 或者设想一下,在卸载和删除应用程序之前,设法确定哪些文件属于该应用程序。 或者,您可能希望找到并删除应用程序不需要的文件。所有这些情形都会花费许多精力和时间,并且要求牢记文件名。

为了克服这样的问题,所以将软件安装管理实用程序用于 Linux 系统。 它们不仅有助于组织和安排多个软件安装,而且还可以根据需要,任意次数地更改这样的安排,而且不费吹灰之力。Stow 就是这样一种用于 Linux 的实用程序。





回页首


介绍 Stow

虽然一些 Linux 分发版(如 Red Hat 和 Debian)提供了它们自己的软件包管理实用程序(分别是 rpm 和 apt-get), 这些实用程序与 Stow 一样有效,但它们仅用于特定的打包格式(分别是 .rpm 和 .deb)。当管理只打包成 .tar 文件的应用程序时,Stow 是最佳选择。

另外,如果人们除了使用 Red Hat 和 Debian 之外,还要使用其它 Linux 分发版, 或者希望为现有的软件包管理实用程序找到便宜或免费的备用方案, 再或者只想自己控制每件事情,那么 Stow 是一个好的选择。Stow 是遵循 GNU GPL(通用公共许可证,General Public License)的免费软件, 它灵活并且可以用充足的用户支持和可用资源进行定制。

Stow 通过将应用程序的安装文件存储并组织到其自己的单独目录(称为 软件包目录),从而使它们彼此分开,来管理不同应用程序。 这些软件包目录驻留在一个 stow 目录中,该目录包含所有已装载的应用程序的软件包目录,是这些目录的父目录。

Stow 允许用户自由地将应用程序及其相关文件安装和存储在任何期望位置的软件包目录中(通过将该位置指定为装载目录), 而不是本地安装的应用程序的公共位置( /usr/local/ 目录)或由应用程序本身指定的缺省位置。 该方法有助于使 /usr/local/ 目录保持整洁,而应用程序被安排在井然有序的目录树结构中,易于查找。

注:缺省 stow 目录是 Stow 自己的目录,位于 /usr/local/bin 中;在安装 Stow 时可以更改它(请参阅 安装 Stow)。

Stow 不仅可以将应用程序组织在 stow 目录树中,而且还可以在缺省位置(应用程序最初被要求安装的位置)创建相应的 符号链接(symlink)。 在 Stow 术语中,该缺省位置称为 目标目录。缺省情况下,目标目录是 stow 目录的父目录。 尽管对于所有用 stow 处理的应用程序而言,用 /usr/local/stow 作为 stow 目录并且用 /usr/local 作为目标目录是习惯作法,但用户可以自由地为 Stow 和目标目录指定其它位置(请参阅 stow 命令)。stow 目录中的应用程序目录树应该与目标目录中所期望的树一样。

应用程序相应的符号链接(位于应用程序目标目录中)指向 stow 目录中应用程序的实际位置(其软件包目录)。 符号链接有点类似于 Windows 快捷方式或 MacOS 别名,它可以表示驻留在另一个位置(或许是不同的驱动器或目录)的应用程序的映象。 然后,使用这些符号链接来调用或运行该应用程序。这让人觉得应用程序本身被安装在目标目录中并且是从该目录中运行的。 当其它应用程序需要调用正在讨论的应用程序或要与之进行交互,并期望它驻留在其缺省位置时,该方法很有用。

注:

  1. Stow 创建相对符号链接;即符号链接指明了至软件包目录的相对路径(相对于符号链接自己的位置)。
  2. Stow 设法为每个应用程序创建最小数目的符号链接 — 如果可能,仅为软件包目录中的整个子目录树创建一个符号链接。 创建这种单一符号链接的过程称为 树折叠

Stow 还可用于执行同一应用程序的多次安装。 不同的安装可以驻留在不同的位置上,并且 Stow 可用于创建和更新一组应用程序符号链接, 使之指向任何期望的位置。

Stow 不仅可以组织软件安装,而且还可以根据需要任意次数地更改任何以前的软件安装布局。Stow 将决不会删除 stow 目录中的任何文件或目录,即使在卸载期间也是如此。 它只更新或除去目标树中指向应用程序安装的符号链接,所以要再次安装已卸载的应用程序,只要重新装载它就行了。





回页首


安装和运行 Stow

需求

安装 Stow 确实非常简单。安装和运行 Stow 的唯一需求是 Stow 本身和 Perl V5.005 或更高版本。

  • 可以从 GNU FTP 站点(请参阅 参考资料以获取链接)下载 Stow 的最新版本。 本文使用 V1.3.3,在编写本文时,该版本是最新的。
  • Perl 是所有主要 Linux 分发版标准安装的一部分。要查看您所拥有的版本,使用命令 perl -v 。 可以从 perl.com(请参阅 参考资料以获取链接)获得有关 Perl 及其最新版本的更多信息。

安装 Stow

要安装 Stow,在 Linux 系统上必须以 root 用户身份登录。下载 Stow 源文件( stow-1.3.3.tar.gz )之后, 下列命令将解包(untar)并安装 Stow。


清单 1. 安装 Stow
# tar -zxvf stow-1.3.3.tar.gz
# cd stow-1.3.3
#./configure
# make
# make install prefix=/usr/local/stow

Stow 安装的缺省位置是 /user/local/bin 目录。 通过将所期望的位置(作为一个绝对目录路径)指定为上面清单中 make install 命令的 prefix 选项的值,就可以更改这个位置。

Stow 现在被安装在位于 /usr/local/stow 下自己的目录树中。也就是说,Stow 可执行文件现在驻留在 /usr/local/stow/bin 目录中,Stow man 文件驻留在 /usr/local/stow/man 目录中,而 info 文件驻留在 /usr/local/stow/info 目录中。 现在,Stow 已经准备好装载应用程序。

注:

  1. 在解包 Stow 源文件之后,产生的 stow-1.3.3 文件夹包含一个名为 INSTALL 的文件,该文件包含有用的安装指示信息。
  2. 在安装 Stow 之后,将至 stow 目录的绝对路径添加到 $PATH 变量中。

stow 命令

Stow 提供了一个特殊命令 stow ,该命令可以与各种选项一起执行,以调用 Stow 进行软件安装管理。Stow 命令的常规语法如下:

$ stow [options] application-name

下面描述了各种 stow 选项:

  • -v--verbose [=n]:显示描述 Stow 正在做什么的详细输出。n 表示详细级别,可以是 0、1、2 或 3;缺省值是 0。使用 -v--verbose将详细级别增加 1;使用 --verbose=n将它设置为 n。
  • -d directory--dir= directory:将 stow 目录设置成 directory(到期望目录的绝对路径)而不是当前目录。 这也可以使 目录的父目录成为缺省目标目录。
  • -t directory--target= directory:将目标目录设置成 directory(至期望目录的绝对路径)而不是当前 stow 目录的父目录。
  • -D--delete:从目标目录删除应用程序的符号链接,也就是 卸空(unstow)应用程序。
  • -R--restow重新装载应用程序(先卸空,然后再装载)。 通过更改符号链接的软件包目录,在更新应用程序之后,该选项对更新符号链接并从目标树除去旧的符号链接很有用。
  • -c--conflicts:搜索可能由实际 stow 操作引起的所有冲突。 该选项与另一个选项 -n(请见下面的选项)一起使用。但可能会报告假冲突(请参阅 参考资料,以获取 Stow 手册中有关冲突一节的链接)。
  • -n--no:不执行任何 stow 操作,只显示将发生什么。 由于不执行实际操作,所以 stow -n 会报告不存在的冲突(请参阅 参考资料,以获取 Stow 手册中有关冲突一节的链接)和必定会发生的实际冲突。
  • -V--version:显示 Stow 版本号。
  • -h--help:显示 Stow 命令语法。

使用 Stow 的示例

为了学习如何使用 Stow,让我们装载一个虚构的应用程序 app-1.4。让我们假设应用程序源文件是 app-1.4.tar.gz,它必需安装在 /usr/local/bin 中。要安装该应用程序,我们必需以 root 用户身份登录。

首先,我们需要将用 tar 压缩过的源文件解压到(比方说)名为 source 的目录中:

[root@linuxbox source]# tar -zxvf app-1.4.tar.gz

这将在目录 source 中创建包含 app-1.4 源文件的目录 app-1.4。现在,我们更改到 app-1.4 目录:

[root@linuxbox source]# cd app-1.4

首先,我们需要将应用程序安装到 stow 目录下。让我们假设其位置是 /usr/local/stow 。 我们将对该安装执行普通的 configure、make 和 make install 过程,如下所示:

[root@linuxbox app-1.4]# ./configure --prefix=/usr/local/stow/app-1.4
[root@linuxbox app-1.4]# make
[root@linuxbox app-1.4]# make install

现在,我们通过使用 Stow,来装载应用程序安装并在目标目录 /usr/local/bin 中创建相应的符号链接。 我们不必以 root 用户身份登录来执行该任务。首先,让我们更改至 stow 目录,然后从那里执行 stow 命令。

[userX@linuxbox app-1.4]$ cd /usr/local/stow/
[userX@linuxbox stow]$ stow -t /usr/local/bin app-1.4

现在,应用程序 app-1.4 驻留在 stow 目录中其自己的软件包目录 app-1.4 中,其相应的符号链接被放在目标目录 /usr/local/bin 中。

如果我们需要升级或重新配置 app-1.4,只要更改到其软件包目录,并且在更新应用程序之后,重新装载它以更新相应的符号链接:

[userX@linuxbox stow]# stow -R app-1.4

要卸载该应用程序,只需 卸空app-1.4:

[userX@linuxbox stow]# stow -D app-1.4

Stow 将只除去指向应用程序安装的链接,决不会删除任何安装文件。因此,稍后可以再次装载应用程序以使用它。





回页首


结束语

Stow 是用于 Linux 系统的一种免费、简单且易于使用的软件安装管理实用程序。 对于从应用程序的 tar 源文件直接安装的应用程序而言,Stow 是十分理想的,而象 .rpm 或 .deb 这样的标准打包格式在此情况下并不适合。Stow 通过将应用程序安装保存在任何期望位置下其自己的单独目录中来管理它们,同时使它们看上去被安装在必需的位置上。

使用 Stow 进行软件安装管理提供了许多优点,如易于安装和卸载应用程序、易于跟踪已安装的应用程序及其相关文件、易于升级和易于重新配置已装载的应用程序。



参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 请访问 Stow 主页,以获取到 Stow 的 GNU 正式站点上相关信息的链接。

  • GNU FTP 站点下载 Stow 的最新版本。

  • 请参考 Stow 手册页面, 以获取一般信息以及有关 Stow 如何处理命名冲突的 章节

  • 有关 Perl 信息及其最新版本的下载,请访问 perl.com

  • 有关 Red Hat 的软件包管理实用程序概述,请阅读我们的三部分系列文章。 第 1 部分讨论了如何使用 RPM, 第 2 部分讨论了软件补丁和分发 RPM, 第 3 部分讨论了在安装和卸载期间运行脚本。

  • 我们在有关编译源文件和管理软件包的 教程中讨论了 Red Hat 和 Debian 软件包管理。

  • 如果需要在整个企业范围内管理软件分发版,那么 Tivoli 可以帮助您。请查看 IBM.com 上的 Tivoli Configuration Manager


关于作者

Mugdha Vairagade 是一名开发人员,与各种组织一起协作以开发无线应用程序,并专门研究组件体系结构。她对开放源代码项目特别感兴趣。Mugdha 参与了 Linux Documentation Project、Forum Nokia(WAP 开发人员论坛)和 W3C 的工作。她还编写了有关 Linux 和 XML 技术的技术性文章。 可以通过 vmugdha@indiatimes.com与 Mugdha 联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款