本文讲解使用包在你系统上安装和管理软件。它也讲解了不同Unix包格式之间的不同,诸如RPM,DPKG。
所有Linux系统使用某类软件包系统来简化安装和删除程序的过程。一个包是一个命令、配置文件,man手册、共享库和其它文件的集合,在这个集合中这些内容与一个程序相关联,组成了单个包文件。当安装它时,包系统提取所有组件文件并且把它们放置到你系统上正常的位置。因为系统知道每个文件来自哪个包,当你想要删除一个包时,它准确地知道要删除哪个文件。
在几乎所有Linux版本上,包普遍地包含编译好地程序,它们只在编译它们所对应地CPU架构上有效。因为Linux支持很多不同地CPU类型,一些程序有为不同CPUs编译的包。一个包只能被安装在一个有正确CPU架构的系统上,除非它是不依赖架构的,在此中情况中,它将在任何系统类型安装。用像Perl语言编写的程序(诸如Webmin)或者只包含文档的包通常是不依赖CPU的。
当安装一个Linux发行版,几乎所有放置在硬盘上的文件是这个发行版其中一个包的一个成员。这使得删除不想要的默认被安装软件,或者从发行版CD或网站安装其它软件变得容易。
因为一些程序运行要依赖于其它程序,包也能够有依赖关系。除非你首选安装另一个包,否则某些包会安装失败,并且如果其它一些包依赖一些包,这些包会是不能删除的。这种系统的依赖关系防止用户安装由于缺失共享库或者命令而不能运行的软件。
因为包系统准确地知道在每个包中是哪些文件,它可以在安装后使用哪些信息验证这些文件。所有包系统也为每个文件跟踪MD5校验和,因而对这个包中文件的任何修改可以被探测到。这对发现未授权修改非常有用,诸如被一个入侵你系统并且用修改版本替代了如ls的重要命令的黑客。
不幸的,在Linux上,有多个包系统。最常用的是RPM,其代表Redhat包管理器。它被Redhat, Caldra, SuSE, Mandrake, MSC和其它一些Linux发行版使用。它运行良好,并且可用的RPM格式软件比任何其它包系统都多。使用rpm shell命令进行RPM包的安装、查询和删除。
RPM的最大竞争者是Debian的DPKG包格式。它技术上在很多方面更优,尤其当它遇到依赖关系,但,仅Debian和其它一些发行版使用它。
另一个包系统是Gentoo的Emerge,其只在Gentoo Linux上可用。Emerge和其它包系统的最大不同是几乎所有包都包含源代码,在安装这个包是编译这些代码。所有Gentoo包安装和管理都是通过emerge命令进行的。
即使这些包系统内部不同并且使用不兼容的文件格式,它们基本上都提供了相同特性。它们都允许与相同程序相关联的文件被组成成一个包文件用于简单的安装和删除以及都支持依赖关系。不幸的,一旦你选择了你的Liunx发行版,切换到另一个包系统非常困难,所以你困在了这个发行版使用什么。
在大多数使用RPM的发行版上,从发行CD或从网上各种站点下载安装包。Debian Linux包含了一个称为apt-get的命令,它从由发行维护者运行的一个仓库自动下载和安装包。如果在你系统上这个包依赖还未安装的其它包,也将自动下载和安装它们。因为在仓库中所有包都是由相同人创建和维护的,减少了它们之间的不兼容性并且依赖关系容易地被解决。仓库也包含对应你想要安装的几乎每个自由软件程序的一个包,因而不需要在Internet上搜索你想要的包。
Debian仓库也可以用于更新你系统上所有包到最新版本。因为新版本的包经常出现(尤其当使用不稳定或者测试的Debain发行版时),一个update是确保你运行每样东西最新版本的简单方法。但如果你没有高速的Internet,这会花费很长时间。
Gentoo Linux的Emerge系统也有一个使用emergy命令从其自动下载和安装包的仓库。如Debian的apt-get,在需要时,它自动下载和安装实现依赖关系所需的包。
Redhat系统也有对一个作为Redhat网络组成的包仓库的访问权。这允许在Redhat网站上选择被更新的包并且自动被安装或者在多个系统上按请求。不同于Debian和Gentto仓库,它一般不用于安装新包。
Software Packages模块提供了一个用于安装、搜索和删除包的一致性界面,独立于使用的实际包系统。在System类别下能够找到它的图标,并且点击它,将显示一个如下的主页。

取决于你的Linux发行版,主页会看起来略微不同,用于从仓库安装的其它按钮和字段会可见。但用于查找包的上部,用于安装包的中部和用于识别文件的底部将总是在那里。
在你能够使用这个模块安装新程序前,你首先必须首先为其定位正确格式的包。对于像Redhst基于RPM的发行版,查找的最好地方是发行版CDs或者rpmfind.net网站。如果你使用Debian系统,由于APT仓库包含了几乎所有可用包,最好从APT仓库安装。无论哪种方式,用于安装包的步骤类似:
1) 在这个模块的主页上,滚动到*Install a New Package*表单,其将用于选择包并且开始安装过程。
2) 如果包文件是在运行了Webmin的系统上,选择*From local file*选项并且输入这个包文件的完整路径。如果你的系统使用RPM包,你可以输入包含多个.rpm文件的目录或者一个像/tmp/*.rpm的通配符。这可以用于一次安装若干包。如果这个包位于你浏览器运行所在的计算机,选择*From uploaded file*选项并且点击Browse按钮来选择这个包文件。如果你在你Webmin系统的调试口运行你的浏览器,这个选项和前一个选项之间没有差别。如果包在某处的网站上,选择*From ftp or http URL*选项并且输入或者粘贴URL到其旁的文本字段。Webmin将在开始安装前为你下载。如果你的系统使用RPM包并且你按照了rpmfind命令,点击URL字段旁边的*Search rpmfind.net*按钮会弹出一个用于在http://find.net/搜索RPM数据库的窗口。如果运行Debian Linux,你可以选择*Package from APT*选项并且输入包名到其旁边的文本字段。如果,你不知道它准确地叫什么,点击*Search APT*按钮查找包名。如果运行Redhat Linux,*Package from Redhat Network*选项可以用于安装其中一个你能获取下载的包。*Search RHN*按钮可以用于显示所有可用包。如果你运行Gentoo Linux,*From Portage repository*按钮和*Search*按钮可以用于从仓库安装。实际上,在这个仓库之外能够找到非常少的Gentoo包。

3) 一旦输入了包来源,点击Install按钮。如果你选择从一个仓库安装(诸如:APT, Redhat Network或者Portage),下载和安装过程将立即开始。Webmin将显示来自安装命令的输出,并且如果成功,安装了一个列表的包。完整这个安装过程不需要其它步骤了。如果选择了任何其它安装源,如果需要,将下载包并且显示安装选项表单。
4) 可用的安装选项依赖你的包系统,但对于升级或安装一个没有依赖问题的包,默认值将正常运行。基于RPM的系统有若干选项,其中最有用的选项是*Igonre dependencies*。如果一个包由于你知道的依赖错误是不正确的而安装失败,设置这个选项为Yes。如果你打算之后安装包来解决依赖问题,它也是有用的。*Replace new version with old?*,如果你想要降低一个包为一个更老的版本,这个选项必须设成Yes。*Overwirte files?*如果由于与来自另一个包的文件冲突,不能安装一个包,启用这个选项。
5) 当你完成选取安装选项时,点击Install按钮。如果一切正常,将出现一个显示了新包详细情况和其包含的所有文件的页面。但,如果按照失败,一个解释为什么的错误小心将被显示。在此中情况下,你可以使用浏览器回退按钮返回到按照选项表单并且不同选项再次尝试。


一个代表性Linux系统又数百个已安装的包,它们中大部分是作为发行版安装过程组成部分被安装的。因为大多了,所以简单浏览它们来查找你想要移除或者查看其详情的包是困难的。要查找包,按照这些步骤:
1) 在这个模块主页上,在*Search For Package*字段输入查找关键字。这将比对所有包的名称和描述,所以你可以输入像Apache的东西来查找与Apache2有关的所有东西。

2) 点击*Search For Package*按钮,这将显示一个所有匹配包的列表,如果确实找到了一个包,向你展示这个包的细节,或者如果未找到,显示一条错误消息。如果一个列表出现,点击其中一个包名来查看其完整细节。


3) 包细节页面将显示所有可得到信息,包括一个完整描述。如果你想要看到它包含的所有文件,点击*List Files*按钮。这将为每个文件显示你一个展示路径、类型,所有者和组以及有效状态的页面。状态尤其有用,由于它允许你看到从这个包安装以来一个文件是否已经被手动更改。

通过点击这个主页上*Package Tree*按钮,也可以浏览包。在大多数操作系统上,每个包是一个类的一个成员,诸如Development or Administration/Networking。这个包树页面使用这种类信息按层级显示所有安装的包,非常像一个目录树。在你达到包层级前,你通过点击它们文件夹图标打开这些类。点击一个包图标,将显示在以上步骤中描述的相同细节页面。

如果你知道了一个命令或文件的名称,并且想要查找它属于的包,可以使用在这个主页上的*Identifiy a File*表单。输入一个完整路径(像/etc/rc.d/init.d/httpd)或者一个命令(如httpd)到*Search For*字段,并且点击按钮。如果包系统知道了这个文件或者命令,有关它的信息和它所属于包的列表将被显示。点击其中一个包名,将显示以上描述的信息页面。

通过搜索或者浏览这棵树,找到了一个包,你可以通过以下步骤从系统删除它。
1) 在这个包细节页面,点击Uninstall按钮。这将显示一个确认页面,其显示在这个包中文件数目以及它们占用的磁盘空间量。

2) 如果使用RPM包系统,可以设置*Ignore dependencies?*选项为Yes,即使某些包依赖这个包,强制删除这个包。
3) 点击Delete按钮删除这个包。如果有东西出错,将显示一条错误信息。如果成功,浏览器将返回这个模块主页或者如果你使用搜索找到这个包,返回包包搜索结果列表。

如果你运行Debain Linux,在这个模块主页底部,将有一个标题*Upgrade all Packages*的表单。这个表单有三个选项,它们是:

1) Resynchronize package list:如果设置为Yes,Debain包仓库将被要求获取可用于下载的最新包列表。在任何升级前应该做这件事,使得在从APT仓库安装包时,你的系统知道从哪些URLs下载。用于同步这个包列表的实际命令是apt-get update。
2) Perform distribution upgrade:当设置这个选项Yes时,当提交这个表单时,你的Debian系统将被升级到最新发行版。带有No选择,它将被简单升级,使得安装的所有包是最新版本。除非你有一个快速网络连接,并且确实想要升级,建议保留这个选项设置为No。当选择Yes时,将运行apt-get upgrade-dist命令。对于No,将使用apt-get upgrade替代。
3) Only Show which packages would be upgraded:如果设置为Yes,在提交这个表单时,实际上什么也不安装。而是,将显示一个会被升级或安装的包列表。在进行一次升级时,在继续真实操作前,如果你想要看到确切会发生什么,这会是有用的。
在你做出选择后,点击*Upgrade Now*按钮。Webmin将运行合适的apt-get命令并且显示它们的输出,因而你能够看到哪些软件被下载和升级。
Redhat向其Linux发行版的用户提供服务,称为Redhat Network。其中一个特性使你能够自动升级在你系统上安装的RPM包,修复在发行版提供的包中发现的bugs和安全漏洞。如果你运行Redhat Linux,在这个主页底部在标题Redhat Network Options下有一个表单,你可以使用其配置被更新包的自动安装。在可以使用它前,你必须与Redhat Network签约并且注册你正在运行Webmin所在的系统。
这个表单实际提供两种目的--更改周期性检查新包的升级守护进程的设置,并且执行一个立即更新。这些在这个表单上的字段是:
1) Automatically check for update?:如果这个选项设置为Yes,检查更新的ttrhnsd守护进程将被配置成在系统启动时启动,并且如果需要,在提交表单时启动。设置它为No,将停止这个守护程序并且防止它在系统启动时被启动。
2)Checking interval:当启动了这个自动更新守护进程,由这个选项决定检查新包之间的分钟数。
3) Proxy server URL for downloading:如果你的系统不能直接连接Redhat网站,你将需要设置这个选项为一个web代理服务器的URL。它必须被格式成像http://proxy.company.com:8000。
4) Skip packages matching:这个选项用于输入你不想要自动升级的包名模式的列表。默认,它防止内核更新被自动安装。
*Save and Apply*按钮将保存你的设置并且根据需要启动或停止rhnsd守护进程。*Save and Check Now*按钮将做相同事情,但也将运行up2date命令立即检查和下载新包。来自这个命令的所有输出将被显示,因而你可以看到哪些包正在被更新。