集群手册/软件
本节的主题是安装和维护不在Ubuntu默认存储库中的软件。将介绍将软件安装、更新和集成到环境中的不同方法。
在 GNU/Linux 系统上安装软件通常包括三个步骤。第一步是下载包含应用程序源代码的存档。解压该存档后,需要编译代码。像Automake[1]这样的工具可以帮助用户扫描环境并确保满足软件的所有依赖项。理论上,软件应该在完成三个简单的步骤后安装并可以使用。
./configure
./make
./make install
几乎每个此类存档中提供的README文件都建议这样做。然而,大多数情况下,此过程都会失败,用户必须手动解决问题。如果所有问题都已解决,则应编译代码(./make
)并安装(./make install
)(第二步和第三步)。除了Automake,还有其他项目,比如CMake[2]和WAF[3],试图使这个过程不再那么麻烦。将软件安装并集成到现有环境中,这样的过程可能需要相当长的时间。如果软件在某一时刻需要更新,则不能保证更新所需的时间少于初始安装。
这个问题的根源在于,不同发行版的 GNU/Linux 在安装后提供的软件集合通常差别很大。这意味着,如果有 5 个不同的发行版,并且您想确保您的软件在每个发行版上都能运行,您必须确保您的软件与以下内容兼容。
- 您的软件依赖的每个库的 5 个不同版本。
- 5 个不同的初始化系统(负责运行守护进程)。
- 5 个不同的软件安装位置约定。
像Automake、CMake 和WAF这样的工具解决了这个问题,但与此同时,巨大的多样性也是它们不是 100% 解决方案且经常失败的原因。
与其试图提供一个可以在所有 GNU/Linux 发行版上运行的单个存档,不如为每个发行版重新打包软件更为常见。Debian的存储库包含数千个软件包,这些软件包仅为Debian的一个版本打包。这使得安装和更新变得轻而易举,但也给创建这些软件包的人带来了巨大的工作量。由于Ubuntu基于Debian,因此大多数这些软件包也适用于Ubuntu。这些软件包是预先编译的,会自动安装到正确的位置,并为使用的初始化系统提供初始化脚本。它们的安装由像apt或aptitude这样的软件包管理器完成,该管理器还会管理未来的更新。只有两个小问题。
- 软件是针对发行版的特定版本打包的。例如,Ubuntu 12.04或Debian Squeeze。安装后,通常只提供安全更新。
- 当然,并非所有软件都经过打包,也并非所有软件都可以在默认存储库中找到。
这意味着,如果您使用的是最新的Ubuntu长期支持版本,您使用的软件大多数都已经超过一年的时间,并且在此期间,只收到了安全更新。造成这种情况的原因是稳定性。更新并不总是能使一切都变得更好,有时会破坏东西。如果软件A依赖于软件B,它可能与B的未来版本不兼容。但有时您确实需要软件更新(例如,为了获得对新硬件的支持),或者您只想安装默认存储库中没有的软件。
出于这个原因,Ubuntu提供了一项名为个人软件包档案 (PPA) 的服务。它允许开发者(或打包人员)创建针对Ubuntu特定版本和特定体系结构的软件包。这些软件包通常依赖于该版本默认存储库中提供的软件,但也可以依赖于其他 PPA 中提供的更新软件(不常见)。对于用户来说,这意味着他们接收的软件易于安装,应该没有依赖性问题,并且会频繁更新,无需额外操作。显然,与传统的自编译和安装相比,这是安装软件的首选方法。
可以手动添加 PPA,但使用 add-apt-repository
命令更简单。该命令由 python-software-properties
软件包提供。
- 清单 2.1
- 为
add-apt-repository
命令安装python-software-properties
。
- 为
sudo apt-get install python-software-properties
使用 ppa:
前缀和 PPA 名称来使用 add-apt-repository
命令。需要注意的是,通过安装此类软件,您信任创建这些软件包的打包人员。建议确保软件包不会损害您的系统。打包人员会使用他们的私钥对软件包进行签名,还会提供一个公钥。add-apt-repository
使用该公钥来确保软件包自打包人员创建它们以来没有被修改/篡改。这增加了安全性,但如前所述,它无法保护您免受打包人员可能已包含在软件中的恶意软件的侵害。
- 清单 2.2
- 添加 ppa 存储库。
sudo add-apt-repository ppa:<ppa name>
添加存储库后,您必须调用 apt-get update
来更新软件包数据库。如果您跳过此步骤,则 PPA 中的软件将不可用于安装。
- 清单 2.3
- 更新软件包数据库。
sudo apt-get update
现在可以使用 apt-get insatll
安装软件。调用 apt-get upgrade
时,它也会收到更新。从 PPA 更新软件不需要额外的步骤。
- 清单 2.4
- 安装所需的软件包。
sudo apt-get install <packages>