个人工具

Quick HOWTO : Ch06 : Installing Linux Software/zh

来自Ubuntu中文

跳转至: 导航, 搜索

简介

当你第一次在你的Linux服务器上安装操作系统的时候,你常常需要安装一些你认为不需要的额外的软件。这可能是因为新的业务需要更多的软件包,或者是因为要安装新的管理工具来简化你的工作。

当Linux开发人员制作它们的软件的时候,它们总是将所有的可执行文件和数据文件捆绑在一起,从而形成一个叫做“软件包”的文件。包文件有许多种不同的格式,文件里有不同的控制文件。控制文件决定了软件包中其余文件应被放置的位置、拥有的权限以及整个软件包想要正常工作所依赖的软件包。这些信息中的一部分可能也储存你计算机中的一个数据库中,包管理软件可以使用它们来安装软件从而来加强自己的管理功能。

Redhat、Centos 和Fedora下的软件主要是用RedHat Package Manager (RPM) 文件。RPM软件包通常被用于在还没有定制内核或者管理程序的系统中安装软件。在部门服务器中这种情况经常发生。当因为效率或功能问题,来定制内核以增减对特定设备或特性的支持时,会使用源RPM。安装源RPM这一过程包括重新编译源代码,以使之适应定制内核的需求。这也可以方便制作包的软件开发者,现在他只需要制作一个包就可以支持不同类型的定制内核。不同的包都使用标准命令来安装其中的软件,这使得RPM包相对来说容易使用。

Debian和Ubuntu这两个Linux发行版使用Debian格式的软件包。此软件包的文件名是以“.deb”结尾的。也因为如此,我们通常称它们为DEB文件。

想要使用universal认证的文件格式从而使其产品在所有的Linux发行版中通用的程序员,也需要将他们的作品制作成TAR包。TAR包一般比RPM包难用,因为包中的文件可能需要也可能不需要编译,而且不同的包安装软件的命令也可能不同。TAR包中通常会有使用说明书来指导安装。

Linux程序员经常使用Perl语言写程序。Perl需要一些特定的库或“模块”才能正常工作,而许多Linux发布版只安装了最常用的模块。有时候在安装你的软件包之前,首先要先安装额外的Perl模块。知道如何安装Perl模块是Linux系统管理员技能的一个重要的组成部分。

本章致力于RPM和DEB格式,它们使用于大部分的安装文件中。TAR包和Perl模块很少使用,但是它们仍是重要的软件安装工具,它们将在最后面的一个小节有所交代。

何处获得常用软件包

软件包有三种常用来源:发行光盘;通过浏览器、FTP客户端或者wget工具手动下载;自动下载。每种方法在这里都有所介绍,但是更加详细的将会在后续章节中介绍。

安装光盘中的软件包

用发行光盘安装总是比从远程网站下载来安装要容易。但是时间长了,发行光盘就不是最新版的了。稍后,我们将更加详细的讨论这种方法。

手动下载软件包

获取软件包最常见的两种方法是通过FTP或浏览器手动下载。表6-1列举了一些常用的下载站点。记住,RPM的版本和你机器上运行的Linux的发行版和版本要匹配。

表6-1包常用下载网站

发行版 地址
Redhat http://www.redhat.com/

http://www.rpmfind.net/

Fedora ftp://download.fedora.redhat.com/pub/fedora/linux/core/

http://download.fedora.redhat.com/pub/fedora/linux/core/ http://www.rpmfind.net/

Debian http://packages.debian.org
Ubuntu http://packages.ubuntu.com

注意: 如果使用Fedora,你也可以从download.fedora.redhat.com下载软件包。在/pub/fedora/linux/core/路径中搜索,然后下移路径树。如果你是第一次使用FTP,别担心,稍后会有所介绍。

自动下载软件包

手动下载的缺点是软件包通常不能安装,除非它的依赖软件包已经事先装好了。这可能会导致要下载并安装很多软件包,而这会很乏味。

所有主要的Linux发行版都有自动下载更新的工具软件。比如,Fedora用yum而Ubuntu和Debian用apt。它们在接下来的章节都有更详细的介绍。

如何下载软件

下载软件是Linux系统管理员最经常要做的事情。这通常非常简单。这节将介绍最常用的几种方法。

用基于web的FTP获取软件

有很多网站都提供软件的链接,你可以通过它们下载软件。获取软件的这种方法通常是相同的:

  • 浏览网站,直到你找到要的软件包的链接。
  • 点击想要的软件包的链接。
  • 将那个文件保存在你的硬盘上。

有的浏览器,比如Firefox,会自动地将文件下载到你的桌面上,那桌面在哪里呢?在Linux里,桌面通常是一个在你的home或~目录下的一个叫Desktop(桌面)的子目录。在这里我们可以看到,在根用户的桌面上已经有一个下载下来的RPM文件。

 [[email protected] tmp]# cd ~/Desktop/
 [[email protected] Desktop]# ls
 ElectricFence-2.2.2-20.2.i386.rpm
 [[email protected] Desktop]# pwd
 /root/Desktop
 [[email protected] Desktop]#

用命令行匿名FTP获取软件

上面介绍的基于web的方法显然是使用匿名文件传输协议(FTP)。匿名FTP使你使用匿名用户名或更短的用户名ftp和符合你e-mail地址的密码,就可以登录FTP服务器并下载文件。任何人都可以通过这种方法获取数据。我们可以用一个用匿名FTP从download.fedora.redhat.com下载SSH软件包的例子来说明:

1)首先我们在命令行中向download.fedora.redhat.com发出FTP命令。

[[email protected] tmp]# ftp download.fedora.redhat.com
Trying 66.187.232.35...
Connected to download.fedora.redhat.com (66.187.232.35).
220 Fedora FTP server ready. All transfers are logged.
Name (download.fedora.redhat.com:root): anonymous
331 Please specify the password.
Password:
230 Login successful. Have fun.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (66,187,232,35,57,155)
150 Here comes the directory listing.
drwxr-xr-x    3 ftp      ftp          4096 Oct 29 15:59 pub
226 Directory send OK.
ftp>

2)登录成功后,我们可以用help命令来查看我们可以做的事情。

ftp> help
Commands may be abbreviated.  Commands are:
(命令可能是缩写形式,有如下命令:)
!               cr              mdir            proxy           send
$               delete          mget            sendport        site
account         debug           mkdir           put             size
append          dir             mls             pwd             status
ascii           disconnect      mode            quit            struct
bell            form            modtime         quote           system
binary          get             mput            recv            sunique
bye             glob            newer           reget           tenex
case            hash            nmap            rstatus         trace
ccc             help            nlist           rhelp           type
cd              idle            ntrans          rename          user
cdup            image           open            reset           umask
chmod           lcd             passive         restart         verbose
clear           ls              private         rmdir           ?
close           macdef          prompt          runique
cprotect        mdelete         protect         safe
ftp>

表6-2列举了一些常用命令:


表6-2 FTP命令

命令 描述
binary 在二进制模式下拷贝文件
cd 改变FTP服务器上的目录
dir 列出当前远程目录里的文件的名称
exit 退出
get 从FTP服务器获取文件
lcd 改变本地计算机上的目录
ls 同dir
mget 同get,但是你可以使用如“*”的通配符
mput 同put,但是你可以使用如“*”的通配符
passive 使文件传输为被动模式
put 将本地计算机上的文件上传到FTP服务器
pwd 获取本地计算机的目录名

3)通过之前对网站上网页的浏览,我们可以知道Fedora Core 2 RPM包在pub/fedora/linux/core/2/i386/os/Fedora/RPMS/目录下。我们将使用cd命令将我们的目录改变到那里去。然后我们可以使用ls命令来获取那个目录下的文件的列表。

ftp> cd pub/fedora/linux/core/2/i386/os/Fedora/RPMS/
250 Directory successfully changed.
ftp> ls open*
227 Entering Passive Mode (66,187,232,35,58,3)
150 Here comes the directory listing.
...
...
-rw-r--r--   ... ... 184281 Oct 28 23:29 openssh-3.6.1p2-34.i386.rpm
...
...
226 Directory send OK.
ftp>

4)接下来,我们下载我们需要的文件并将其放置于本地的/usr/rpm目录下。hash命令会在下载时,在屏幕上打印井号“#”。

ftp> hash
Hash mark printing on (1024 bytes/hash mark).
ftp> lcd /usr/rpm
Local directory now /usr/rpm
ftp> get openssh-3.6.1p2-34.i386.rpm
 local: openssh-3.6.1p2-34.i386.rpm remote: openssh-3.6.1p2-34.i386.rpm
 227 Entering Passive Mode (66,187,232,35,58,25)
 150 Opening BINARY mode data connection for openssh-3.6.1p2-34.i386.rpm (184281 bytes).
 ###################################################################################################################################################################################
 226 File send OK.
 184281 bytes received in 3.41 secs (53 Kbytes/sec)
 ftp>

注意: 你也可以使用mget命令,从而在下载RPM时使用通配符。计算机会提示你每个符合的RPM文件名。在下个例子中,我通过键入n来中断这个下载。

ftp> mget openssh-3.6*
mget openssh-3.6.1p2-34.i386.rpm? n
ftp>

5)最后我们用exit命令退出FTP

ftp> exit
221 Goodbye.
[email protected] tmp]#

用wget获取软件

当你已经知道RPM的URL地址时,你可以使用wget很快地下载该文件。如果你在别机器上通过浏览器登录到了Linux系统中,这种方法尤为方便。你可以浏览下载网站来找到你要的RPM,右键点击其链接然后选择复制快捷方式(Windows)或者复制链接位置(Linux)。这一步完成后,你然后可以选择你的SSH/telnet/Linux终端登录窗口然后键入wget URL命令。这里有一个从Fedora下载DHCP更新的例子。

[[email protected] tmp]# wget http://linux.stanford.edu/pub/mirrors/fedora/linux/core/2/i386/os/Fedora/RPMS/dhcp-3.0pl2-6.16.i386.rpm
--17:38:36--  ftp://linux.stanford.edu/pub/mirrors/fedora/linux/core/2/i386/os/Fedora/RPMS/dhcp-3.0pl2-6.16.i386.rpm
           => `dhcp-3.0pl2-6.16.i386.rpm.5'
Resolving linux.stanford.edu... done.
Connecting to linux.stanford.edu[171.66.2.18]:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /pub/mirrors/fedora/linux/core/2/i386/os/Fedora/RPMS ... done.
==> PASV ... done.    ==> RETR dhcp-3.0pl2-6.16.i386.rpm ... done.
Length: 529,890 (unauthoritative)
 
100%[===============================>] 529,890      889.12K/s    ETA 00:00
 
17:38:36 (889.12 KB/s) - `dhcp-3.0pl2-6.16.i386.rpm.5' saved [529890]
 
[[email protected] tmp]#

用DEB软件包安装软件

不像Redhat、Fedora和Centos这样的Linux发行版使用RPM包,Debian和Ubuntu使用的是DEB格式的软件包。此章节将讲解掌握其用法的几个最重要的问题。

如何手动安装DEB

总的来说,手动安装DEB文件有两种方法。其一是使用你事先下载到硬盘上的文件,其二是使用像光盘这样的移动存储来安装。

用下载的文件

将DEB文件(通常有一个后缀名“.deb”)下载到一个临时路径,比如/tmp。第二步是用dpkg --install命令来安装该软件包。下面有一个安装ndiswrapper utilities包的例子,是典型的用DEB安装命令来安装的例子:

[email protected]:~# dpkg --install ndiswrapper-utils_1.8-0ubuntu2_i386.deb 
Selecting previously deselected package ndiswrapper-utils.
(Reading database ... 70221 files and directories currently installed.)
Unpacking ndiswrapper-utils (from ndiswrapper-utils_1.8-0ubuntu2_i386.deb) ...
Setting up ndiswrapper-utils (1.8-0ubuntu2) ...
[email protected]:~#

用光盘

用光盘安装DEB文件和在Fedora和RedHat中的情况是类似的。区别在于光盘设备名称是/media/cdrom。下面的步骤将安装事先拷贝到光盘上的ndiswrapper DEB包:

1. 插入光盘,检查/media/cdrom路径下的文件,然后安装DEB。

[email protected]:/tmp# mount /media/cdrom -o unhide
mount: block device /dev/hdc is write-protected, mounting read-only
[email protected]:/tmp# cd /media/cdrom
[email protected]:/media/cdrom# ls
ndiswrapper-utils_1.8-ubuntu2_i386.deb 
[email protected]:/media/cdrom# dpkg --install ndiswrapper-utils_1.8-ubuntu2_i386.deb 
Selecting previously deselected package ndiswrapper-utils.
(Reading database ... 70221 files and directories currently installed.)
Unpacking ndiswrapper-utils (from ndiswrapper-utils_1.8-0ubuntu2_i386.deb) ...
Setting up ndiswrapper-utils (1.8-0ubuntu2) ...
[email protected]:~#

2. 结束后,弹出光盘

[email protected]:/media/cdrom# cd /tmp
[email protected]:/tmp# umount /media/cdrom
[email protected]:/tmp# eject cdrom
[email protected]:/tmp#

注意:不像Fedora使用多张CD/DVD,Ubuntu是用一张CD/DVD盘发布的。Ubuntu安装进程从互联网上下载任何需要的软件包。因此,你可能发现使用APT工具要简单,它能够自动的下载安装大部分你要的软件包。下节会介绍APT工具。

DEB安装错误

有时候DEB软件的安装并不会按照你的计划来,而你此时就需要有正确的措施。有一些最常见的错误你很有可能会遇到,本节将告诉你如何从中恢复过来。

依赖失败(Failed Dependencies)

就像预想中的那样,软件包常常依赖其它一些已经安装的软件包。这可能会导致dpkg安装因依赖问题失败,而这就意味着有些必要的DEB要安装。在下一个例子中,我们要安装mrtg-contrib包,而他需要事先安装好mrtg包。

[email protected]:/tmp# dpkg --install mrtg-contrib_2.12.2-1_all.deb 
Selecting previously deselected package mrtg-contrib.
(Reading database ... 70759 files and directories currently installed.)
Unpacking mrtg-contrib (from mrtg-contrib_2.12.2-1_all.deb) ...
dpkg: dependency problems prevent configuration of mrtg-contrib:
 mrtg-contrib depends on mrtg (= 2.12.2-1); however:
  Package mrtg is not installed.
dpkg: error processing mrtg-contrib (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 mrtg-contrib
[email protected]:/tmp#

在安装了mrtg包之后,mrtg-contrib安装成功。用APT工具你可以自动的安装依赖包。这在本章稍后会讲述。

如何列出已安装的DEB

dpkg --list命令会列出你系统中所有已安装的软件包。

[email protected]:~# dpkg --list
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                Version             Description
+++-===================-===================-================================
ii  ssh                  4.1p1-7ubuntu4     Secure shell client and server
... 
...
...
[email protected]:~#

命令的输出有6列:第4列是软件包的名称,第五列是包的版本,而最后的第6列是描述。

前面三列每个都是单字符宽,提供了包的详细信息,如表6-3:

表6-3 列格式的dpkg命令

期望状态

(Col. 1)

当前状态

(Col. 2)

错误状态

(Col. 3)

描述
u 未知(Unknown): 此包未安装
i 已安装(Installed): 特权用户已请求安装此包
r 移除(Remove): 特权用户已经请求移除此包,此包的配置文件很可能存在
p 清除(Purge): 先前安装的包已被移除,此包的配置文件也许亦被移除
h 保持(Hold): 特权用户已请求此包保持当前版本不自动升级
n 未安装(Not Installed): 此包未安装
i 已安装(Installed): 此包已安装
c 配置文件存在(Configuration Files Exist): 包被安装,而配置文件已经存在
u 解包(Unpacked): 文件已被解包,但是未安装
f 失败(Failed): 此包配置失败
h 停止(Halt): 此包安装失败,中途停止
h 强迫保持(Enforced Hold): 因为依赖包被定义为保持,此包的升级被搁置
r 重新安装(Reinstallation): 此包破损需要重新安装
x 此包破损且为强制保持

你可以用--list选项来指定你感兴趣的包,并显示它们。下面我们用这种方法,单独列出了openssh-server软件包。

[email protected]:~# dpkg --list openssh-server
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                Version             Description
+++-===================-===================-========================================
ii  openssh-server      4.2p1-7ubuntu3      Secure shell server, an rshd replacement
[email protected]:~#

如果你只对一个确切的包感兴趣,你可以将输出用管道重定向到grep命令。在下面的例子中,我们要找到所有名字中包含“dhcp”字符串的软件包。

[email protected]:~# dpkg --list | grep dhcp
ii  dhcp3-client    3.0.2-1ubuntu6   DHCP Client
ii  dhcp3-common    3.0.2-1ubuntu6   Common files - dhcp3* packages
[email protected]:~#

列出与DEB相关的文件

有时候,你安装软件的过程会因一个错误而中止,这个错误请求某一个文件要存在。很多情况下,安装程序并不说明在哪个包中可以找到这个文件。因此能够确定某些文件的来源很重要,而这可以通过列出你怀疑可能包含该文件的软件包的内容来实现。

列出已安装软件包的文件

如前所述,列出软件包中的文件很重要。用dpkg,--listfiles选项可以轻松提供这一信息。下面我们列出openssh-server软件包中的文件。

[email protected]:~# dpkg --listfiles openssh-server
...
...
...
/var/run/sshd
/usr/lib/sftp-server
/usr/share/doc/openssh-server
ro[email protected]:~#

列出DEB文件中的文件

下载网站上通常有一些包功能不同而名字相似。通过列出DEB包的内容来确认你的包是你想要的那个,是很好的方式。这可以通过dpkg的--contents选项来实现,如在这个例子中所见。

[email protected]:/tmp# dpkg --contents openssh-server_4.2p1-7ubuntu3_i386.deb
...
...
... 
-rw-r--r-- root/root     10444 2006-05-17 17:43:19 ./usr/share/man/man8/sshd.8.gz
-rw-r--r-- root/root      1169 2006-05-17 17:43:19 ./usr/share/man/man8/sftp-server.8.gz
drwxr-xr-x root/root         0 2006-05-17 17:43:24 ./usr/share/doc/
drwxr-xr-x root/root         0 2006-05-17 17:43:24 ./usr/share/doc/openssh-client/
drwxr-xr-x root/root         0 2006-05-17 17:43:19 ./var/
drwxr-xr-x root/root         0 2006-05-17 17:43:19 ./var/run/
drwxr-xr-x root/root         0 2006-05-17 17:43:19 ./var/run/sshd/
...
...
...
[email protected]:/tmp#

列出文件所属的软件包

搜索特定文件的所属包也可以通过dpkg的--search选项轻易实现。下面这个例子中,我们看到/etc/syslog.conf是sysklogd软件包的一部分。

[email protected]:~# dpkg --search /etc/syslog.conf
sysklogd: /etc/syslog.conf
[email protected]:~#

卸载DEB

dpkg --remove命令可以清除一个安装了的包,如下例:

[email protected]:~# dpkg --remove ndiswrapper-utils
(Reading database ... 70241 files and directories currently installed.)
Removing ndiswrapper-utils ...
[email protected]:~#

哪些包在启动时开始运行?

update-rc.d命令,你可以查看和配置哪些包在启动时开始运行。第7章"The Linux Boot Process"有对此更加详细的介绍。

用apt-get自动更新DEB

就像Fedora,Debian/Ubuntu Linux有它自己的包更新程序,此程序会自动地从基于仓库的网络中获取软件包。它叫做高级包工具(APT)。它最常用的命令是apt-get,稍后会更详细讲述此命令。

配置APT

APT使用/etc/apt/sources.list文件来说明你网络中的服务器,从中你可以找到你需要的包。此文件中的默认文件地址,可以参考一些可信的APT下载网站。

从/etc/apt/sources.list文件中列举的软件源中,周期性地同步APT包索引文件,是很重要的事情。它用包的最新版本列表来更新你的系统。这可以通过apt-get update命令实现,如下:

[email protected]:/tmp# apt-get update
Get:1 http://security.ubuntu.com dapper-security Release.gpg [189B]         
Get:2 http://us.archive.ubuntu.com dapper Release.gpg [189B]
Get:3 http://us.archive.ubuntu.com dapper-updates Release.gpg [189B]
...
...
...
Fetched 184kB in 2s (66.1kB/s)                
Reading package lists... Done
[email protected]:/tmp#

注意:如果你安装Ubuntu时无法接入互联网,你只能够安装最基本的软件包,/etc/apt/sources.list文件中的URL条目也会被注释掉。但是要安装的软件包会被标记,直到最后从dpkg数据库中安装它们。当你可以接入互联网时,取消对URL条目的注释,然后用apt-get命令来安装升级。这将从网上下载所有需要的包来升级你的系统。

如果你不想你所有的Debian/Ubuntu服务器都接入互联网,你也可以在你的网络中搭建一个APT服务器。你就必须相应地更新你的sources.list文件,但是对此的完整配置步骤超出了本书范围。

用APT保持系统最新

用upgrade选项,apt-get工具可以用来同时升级你系统中的所有软件包。若在其后没有列出任何软件包时就使用apt-get,它会试图更新所有包。“apt-get upgrage 包名”命令只更新指定DEB包。

在安装Linux后,因为要提升安全性和功能,使用apt-get来保证已安装了最新的软件通常是明智的做法。下面的例子显示了可能的输出(Here is an example of output of what to expect),-y标记会使apt-get在所有的询问中采取确认(“yes”),从而让其没有交互地径直运行下去:

[email protected]:/tmp# apt-get -y upgrade
Reading package lists... Done
Building dependency tree... Done
The following packages have been kept back:
  linux-image-386
The following packages will be upgraded:
  capplets-data desktop-file-utils eog gdm gnome-about 
...
...
...
Setting up libgtk2.0-bin (2.8.18-0ubuntu1) ...
Updating the IM modules list for GTK+-2.4.0...done.
Updating the gdk-pixbuf loaders list for GTK+-2.4.0...done.

[email protected]:/tmp#

用apt-get安装包的例子

下面是一个用apt-get安装软件包的例子,其中安装的包是apache网络服务器软件包。

[[email protected] [email protected]:/tmp# apt-get -y install apache
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  apache-common apache2-utils libapr0 libpcre3
Suggested packages:
  apache-doc apache-ssl apache-perl
The following NEW packages will be installed:
  apache apache-common apache2-utils libapr0 libpcre3
...
...
... 
Creating config file /etc/apache/httpd.conf with new version

Creating config file /etc/apache/srm.conf with new version

Creating config file /etc/apache/access.conf with new version

Creating config file /etc/apache/modules.conf with new version
 * Starting apache 1.3 web server...
   ...done.

[email protected]:/tmp#

记住下面APT的事实

  • APT工具的source.list文件主要列出使用TCP 80端口的URL(http:// ),来为APT的更新服务。这对你的防火墙规则很重要。
  • 运行“man sources.list”和“man apt-get”命令可以获取关于配置yum的更详细信息。

用tar文件安装软件

tar格式的文件是另外一种流行的软件安装文件。它们通常可以从软件开发者的主页或者如http://www.sourceforge.net 这样的在线软件库下载。

Linux里的tar命令用于档案文件,而且此文件通常有一个“.tar”文件后缀名。这些文件常常被压缩成gzip格式,而且在这种情况下,它们的后缀名将会是“.tar.gz”或者“.tgz”。从以上两种文件中提取数据的命令是类似的。当解压一个tar文件时,提取数据的命令是“tar -xvf 文件名.tar”。当解压档案文件时,要用的命令是“tar -xzvf 文件名.tar.gz”。

tar文件安装方法中,你首先要解压档案文件,并提取其中的内容放置在一个本地子目录中,这个子目录的名称通常和tar文件的名称是一样的。通常这个子目录里会有一个叫做README(读我)或者INSTALL(安装)的文件,其概述了安装软件所需的所有步骤。

下面是安装基于tar的软件的最初几个步骤:

1)输入从指定文件中提取数据的tar命令。

[[email protected] tmp]# tar -xvzf linux-software-1.3.1.tar.gz
linux-software-1.3.1/
linux-software-1.3.1/plugins-scripts/
...
...
...
linux-software-1.3.1/linux-software-plugins.spec
[[email protected] tmp]#

This creates a subdirectory with the installation files inside.

[[email protected] tmp]# ls
linux-software-1.3.1  linux-software-1.3.1.tar.gz
[[email protected] tmp]#

2)使用cd命令进入生成的子目录,并按照README和INSTALL文件中所列的指示来做:

[[email protected] tmp]# cd linux-software-1.3.1
[[email protected] linux-software-1.3.1]# ls
COPYING    install-sh   missing                 plugins
depcomp    LEGAL        mkinstalldirs           plugins-scripts
FAQ        lib          linux-software.spec     README
Helper.pm  Makefile.am  linux-software.spec.in  REQUIREMENTS
INSTALL    Makefile.in  NEWS                    subst.in
[[email protected] linux-software-1.3.1]#

用tar文件安装软件,常常需要安装别的支持tar文件,而且每一个有各自特定的安装命令,这会让人很沮丧。与此相反,RPM或DEB用一个标准的命令格式就可以安装,而且用起来也很简单,这对Linux新手来说可能是更好的方法。

安装Perl模块

即使你不知道如何用Perl编程,你有时也不得不安装Perl模块来让你的软件包能够工作。

可以从主要的Perl模块网站http://www.cpan.org 下载TAR文件然后手动安装Perl模块。这种方法的缺点是不能够自动安装需要的依赖包。另外的一个缺点(尽管比较小)是,Perl模块名称里通常有一个双冒号(::),但是包含此模块的TAR安装文件的名称里没有双冒号。比如1.74版的Mail::Tools模块的名称为MailTools-1.74.tar.gz

也可以使用perl命令来自动安装Perl模块。本节我们会讲解这两种方法。

Perl模块的手动安装

大部分常用的Perl模块都可以从CPAN网站下载。其安装步骤也简单易懂。

1. 浏览CPAN网站,找到你需要的模块包,然后用类似wget的工具下载之。

[[email protected] tmp]# wget http://www.cpan.org/authors/id/M/MA/MARKOV/MailTools-1.74.tar.gz
--15:07:36--  http://www.cpan.org/authors/id/M/MA/MARKOV/MailTools-1.74.tar.gz
           => `MailTools-1.74.tar.gz'
Resolving www.cpan.org... 66.39.76.93
Connecting to www.cpan.org|66.39.76.93|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 47,783 (47K) [application/x-tar]

100%[===================================>] 47,783       100.88K/s             

15:07:38 (100.51 KB/s) - `MailTools-1.74.tar.gz' saved [47783/47783]

[[email protected] tmp]#

2. 用tar命令从模块包中提取文件。

[[email protected] tmp]# tar -xzvf MailTools-1.74.tar.gz 
MailTools-1.74/
MailTools-1.74/t/
...
...
...
MailTools-1.74/ChangeLog
MailTools-1.74/MANIFEST
[[email protected] tmp]#

3. 进入新建的和TAR文件名称相同的目录,然后使用如下命令来安装此模块。

  • perl Makefile.PL
  • make
  • make test
[[email protected] tmp]# cd MailTools-1.74
[[email protected] MailTools-1.74]# perl Makefile.PL
Checking for Net::SMTP...ok
Checking for Net::Domain...ok
Checking for IO::Handle...ok
Checking if your kit is complete...
Looks good
Writing Makefile for Mail
[[email protected] MailTools-1.74]# make
cp Mail/Cap.pm blib/lib/Mail/Cap.pm
cp Mail/Mailer/rfc822.pm blib/lib/Mail/Mailer/rfc822.pm
...
...
...
Manifying blib/man3/Mail::Util.3pm
Manifying blib/man3/Mail::Address.3pm
[[email protected] MailTools-1.74]# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/extract.....ok                                                             
...
...
...
All tests successful.
Files=7, Tests=95,  2 wallclock secs ( 1.28 cusr +  0.29 csys =  1.57 CPU)
[[email protected] MailTools-1.74]# 

你的Perl模块的安装现在应该就完成了。

注意:命令“perl Makefile.PL”的输出会告诉你,是否需要其余的一些模块。你可以全部都手动安装它们,同时冒着必须为这些依赖模块安装更多依赖模块的风险;或者你也可以用自动更新来安装,下面来讲解其具体事项。

Perl模块的自动安装

虽然用perl工具可以自动安装模块,但是在此之前你必须要安装其依赖ncftp包,来从CPAN下载模块包。

[[email protected] tmp]# yum -y install ncftp

安装完这个模块包之后,你就可以使用如下的perl命令来进入CPAN工具。

perl -MCPAN -e shell

在其第一次运行时,Perl会提示你一些配置选项。大部分情况下使用默认配置就行了。在最初的安装完成后,你就有一个“cpan>”命令提示

cpan>

然后使用后接模块名的安装命令,就可以完成模块的安装了。在下面的例子中,我们用CPAN工具来安装Mail::Audit模块。

[[email protected] tmp]# perl -MCPAN -e shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')

cpan> install Mail::Audit
CPAN: Storable loaded ok
LWP not available
CPAN: Net::FTP loaded ok
Fetching with Net::FTP:
  ftp://archive.progeny.com/CPAN/authors/01mailrc.txt.gz
...
...
...
Installing /usr/share/man/man3/Mail::Audit::MAPS.3pm
Appending installation info to /usr/lib/perl5/5.8.8/i386-linux-thread-multi/perllocal.pod
  /usr/bin/make install  -- OK

cpan> exit
Terminal does not support GetHistory.
Lockfile removed.
[[email protected] tmp]#

你的Perl模块完全安装完成后,退出命令能让你退出到Linux命令提示界面。

总结

这仅仅只是个开始。如果你打算使你安装的软件让你的Linux计算机永久的运行一些程序,比如作为Web服务器、邮件服务器或者任何其它的服务器,你就必须知道如何在你的系统重新启动时就激活软件使其运行。这将会在第七章——"The Linux Boot Process(Linux引导过程)"中讲述。随后的章节将描述许多当前最流行的Linux服务器应用程序的使用、配置、测试和故障诊断方法。