第七章 软件包管理
7.1快速上手:安装和卸载Chrome for Linux
7.1.1安装Chrome for Linux
目前Linux下的Google Chrome浏览器有两个版本,Beta(测试版)和Unstable(不稳定版)。对于Debian和Unbuntu用户,下载Chrome浏览器可以输入以下命令:
sudo dpkg -i google-chrome-stable_current_i386.deb
对于openSUSE和其他使用RPM软件包的用户,则可输入如下命令:
rpm -i vh google-chrome-stable_current_i386.rpm
如果系统没有报错的话,一般都是正常安装完毕的。
7.1.2运行Chrome for Linux
单击“应用程序”|“互联网”|GoogleChrome按钮,就能正常运行。
或者打开终端,在命令行中输入:google-chrome-stable
7.1.3卸载Chrome for Linux
当前版本的Chrome for Linux仍然存在很多不足。下面介绍如何卸载Chrome for Linux。
一般来说,卸载软件需要提供完整的软件名和版本信息(事实上很少人会记住他们),软件包管理工具可以帮助用户管理这些信息。
Debian和Ubuntu用户使用下面的命令:
dpkg -l | grep chrome
Red Hat和其他使用RPM软件包的用户可以使用下面的命令:
rpm –query chrome
用以上方法就能够找到相关软件包完整的名字了,接下来可以着手卸载了,命令如下:
sudo dpkg -r google-chrome-stable
Red Hat和其他使用RPM软件包的用户可以使用下面的命令:
rpm -e google-chrome-stable
如果没有报错,系统奖会完整的将相关软件卸载。
7.2软件包管理系统简述
在早期的UNIX/Linux系统中,安装软件需要从源代码开始编译软件,并为系统作出各种调整,甚至需要修改部分源代码。
针对这种细节且需要耗费巨大精力的工作,软件包的概念应运而生:软件包管理系统的应用令Linux管理员从无休止的兼容性问题中解脱出来,使得安装软件成为一种事实上的原子操作。
当然,使用软件包安装软件同样需要考虑到依赖性的问题。只有软件所依赖的所有库和支持都正确安装完成,软件才能被顺利安装。有些高级软件包管理工具,例如APT和yum可以自动搜寻依赖关系并执行安装。
常见的软件包格式有两种:RPM即Red Hat Package Manager(Red Hat软件包管理器),最初是由Red Hat公司开发,现已经被大多数Linux版本所应用;另一种则是Debian和Ubuntu上使用的.deb格式。两种版本的功能类似。
如今绝大部分Linux版本都使用高级软件包管理工具来进一步简化软件包安装的过程。通常的免费版本有RPM和yum(其中yum只能用于RPM)。除此之外,一些主要的Linux开发商也会开发用于自己发行版的高级包管理工具,例如Red Hat 的Red Hat Network和SUSE的ZENworks。
一般高级软件包管理系统基于这样几个理念和目标:
简化定位和下载软件包的过程
自动进行系统更新和升级
方便管理软件包件的依赖关系。
7.3管理.deb软件包:dpkg
7.3.1安装软件包
dpkg软件包管理工具主要应用于Debian和Ubuntu版本,详细选项和功能可以通过dpkg –help获取完整帮助信息。
dpkg使用 –install选项安装软件,这个选项可以简写成-i。事实上,Linux中很多命令都存在这类缩写形式。
所有安装包在安装前必须确保其所依赖的库和支持都已经安装在系统中。虽然也可以使用--force-来强制安装,但该情况一般只针对软件安装影响比较小的情况下,除非迫不得已,一般情况下不建议使用--force-选项。
7.3.2查看已安装的软件包
假设当前需要查看系统中OpenSSH版本信息时,可以使用如下命令:
dpkg -l | grep openssh
对于系统管理员而言,常常需要知道所安装的软件究竟向系统复制了哪些文件,因此可以使用dpkg提供的—search选项(简写为-S)。仍以上文OpenSSH为例:
dpkg -S openssh
7.3.3卸载软件包
使用dpkg提供的—remove(简写为-r)选项可以方便的卸载已经安装的软件包。下面以卸载Open浏览器为例:
dpkg -l | grep opera #查看安装包名
sudo dpkg –remove opera #卸载浏览器
7.4管理RPM软件包:rpm
7.4.1安装软件包
rmp工具适用于管理.rpm格式的软件包,适用于绝大部分Linux版本。rpm更多的高级功能可以参考用户手册。
使用rpm -i命令安装一个软件包,一般情况下只需要选项-i就足够了,人们通常习惯加上 – v和-h选项,-v用于显示rpm当前正在执行的工作,-h选项通过打印一系列的“#”提醒用户当前的安装进度。例如:
sudo rpm -i -v -h dump-0.4b41-1.src.rpm
可以将多个选项合并在一起,从而省略前面的短线“-”。下面的两条命令是等价的:
sudo rpm -i -v -h dump-0.4b41-1.src.rpm
sudo rpm -ivh dump-0.4b41-1.src.rpm
rpm同样提供了—force选项,用于忽略一切依赖兼容问题,强行安装软件包。
另外,正在安装软件包需要在其他一些软件包支持下才能正常工作时,就会发生软件包相关性冲突。利用--nodeps选项可以时RPM忽略这些错误继续安装软件包,这种方法同上述一样,一般不建议使用。
7.4.2升级软件包
rpm -U命令用于升级一个软件包。使用方法同rpm -i类似,用户也可以通过-v和-h选项来指导安装。下列命令将已安装的旧版软件更新为新版软件:
sudo rpm -Uvh [新版软件包名]
升级实际上是卸载和安装的组合使用。RPM先卸载旧版软件,然后再安装新版软件。RPM在升级过程中会保留软件的配置文件,以避免用户运行环境发生变化。
7.4.3查看已安装的软件包
使用rpm -q 命令可以查询当前系统已经安装的软件包。用户应该指定软件包的名字(而不是安装软件的名字),则RPM会列出其具体的版本信息:
rpm -q [软件名]
在很多情况下,用户可能不记得软件包的完整名称,给命令“rpm -q”命令加上-a选项则可以列出当前系统上已经安装的所有软件包:
rpm -qa
结合管道和grep命令可以找到自己想要的软件包:
rpm -qa | grep [name]
7.4.4卸载软件包
使用rpm -e命令可以卸载软件包,该命令接受软件包的名字作为参数,下面这条命令从系统中删除了软件包tcpdump:
rpm -e tcpdump
有些时候卸载软件会出现一些问题,由于软件包之间存在依赖关系,很可能会出现某个软件无法运行的情况。
当需要卸载的软件包之间存在依赖时,RPM会谨慎拒绝卸载请求,用户也可以使用—noddps命令忽略,一般情况下不建议使用该命令。
此外RPM还提供了—test选项,该选项会通过RPM模拟卸载过程,但是并不会真的执行删除操作。下面对某个软件包执行带有--test选项的卸载命令(选项-vv是两个v,而不是w):
sudo rpm -e -vv –test [name]
7.5高级软件包工具:APT
7.5.1 APT简介
rmp和dpkg软件包管理工具虽然能够有效减少安装软件的工作量,但是无法有效解决软件之间的依赖关系,因此,APT应运而生。
APT全称为Advance Package Tool(高级软件包工具)。这是迄今最成熟的软件包管理系统。它可以自动检测软件依赖问题,下载和安装所有文件;甚至只需要一条命令就可以更新系统上的所有软件包。
最初APT被设计运行于Debian系统上,如见已经被移植到使用RPM软甲包发行版上。
APT工具最常使用的两个命令:apt-get和apt-cache。前者用于执行和软件包安装有关的所有操作;后者主要用于查找软件包的相关信息。大部分情况下,用户也可以使用图形化的APT工具。
7.5.2下载和安装软件包
系统第一次启动时需要运行apt-get update更新当前apt-get缓存中的软件包信息。
然后就可以使用apt-get install 命令安装软件包了。以安装战棋类游戏Wesnoth为例:
sudo apt-get uptate
sudo apt-get wesnoth
APT提供了大量信息,并自动解决了包的依赖问题。apt-get还有其他一些命令,如下表所示:
表7.1 apt-get的常用命令
命令 | 描述 |
Apt-get install | 下载并安装软件包 |
Apt-get update | 下载并安装在本系统上已有的软件包的最新版本 |
Apt-get remove | 卸载特定的软件包 |
Apt-get source | 下载特定的软件源代码 |
Apt-get clean | 删除所有已下载的包文件 |
下列命令用于删除软件包tremulous:
sudo apt-get remove tremulous
使用apt-get -h 可以列出apt-get的完整用法。
7.5.3查询软件包信息
同rpm和dpkg一样,使用apt-get安装和卸载软件时必须提供软件包的名字。可以使用APT提供的工具apt-cache来完成包名的查询。
apt-cache search命令可以搜索软件包列表中特定的软件包。下例中命令用于查找一个软件包的包名:
apt-cache search [name]
apt-cache将按照字母顺序搜寻列出一切包含[name]字样的软件包,用户可以凭借记忆和经验判断自己要找的软件包。
另一个常用的apt-cache命令是apt-cache depends,用于列出特定软件包的依赖关系,例如想要查看某个软件包[name]需要依赖些些什么,可以使用下面的命令:
apt-cache depends [name]
APT系统显示出来的依赖关系并不需要用用户手工解决,全部由系统自行完成。
7.5.4配置apt-get
apt-get用于下载软件的地址均放在/etc/apt/sources.list中。
上图中的某些字段解释如下:
deb和deb-src:软件包的类型。其中src表示源代码
URL:表示指向CD-ROM,HTTP或者FTP服务器的地址,表示获取软件包的地址。
hardy等:表示软件包的发行版本和分类,用于帮助apt-get遍历软件库。
以“#”开头的表示注释
7.5.5使用图形化的APT
Linux发行商也开发了APT的图形化界面,对于新用户会更加友好。可以使用Ubuntu附带的“新立得软件包管理器”工具的使用和配置。
系统默认并没有安装,需要用户自行安装。具体工具使用并不复杂,在此省略。
7.6进阶:从源代码编译软件—以MPlayer为例
7.6.1为什么要从源代码编译
从源代码编译软件的流程是多种多样的,但是大致思维都差不多。
尽管Linux提供的高级软件包管理工具基本能够完美解决Linux软件安装问题,但是最原始的方法—从源代码编译,还是有必要了解与掌握的。
有时候软件开发商并没有提供二进制的软件包或者只提供了特定版本的软件包,就只能从源代码编译安装软件。
处于企业和个人的特殊需求,需要对源代码进行修改,则经过修改的软件必须重新编译。
能够让编译者获取更多的控制。
7.6.2下载和解压软件包
Mplayer是一款支持格式十分全面的多媒体播放软件,对于Linux,Windows以及Mac OS等操作系统均能够支持。可以从www.mplayerhq.hu/design7/dload.html下载最新版本。
在Linux系统中,“.tar.bz2”和“.tar.gz”这样的压缩格式是发布源代码的标准格式。下面命令用于解压这两种压缩包:
tar zxvf Mplayerr-1.1.tar.gz #解压缩Mplayerr-1.1.tar.gz
tar jxvf Blue-1.8.tar.bz2 #解压缩tar jxvf Blue-1.8.tar.bz2
解压后得到两个目录Mplayerr-1.1和Blue,其中Mplayerr-1.1是Mplayer的源代码,Blue Skin是Mplayer的皮肤。
7.6.3正确配置软件
Linux中所有软件都使用configure这个脚本来配置以源代码形式发布的软件。configure依据用户提供相关参数生成对应的makefile文件,该文件用于指导make命令正确地编译源代码。
几乎所有的configure脚本都提供了—prefix这个选项,用于指定软件安装的位置。如果用户不指定,系统就会按照其默认位置进行安装。下面这条命令将软件安装在/usr/local/games/foobillard目录下:
./configure –prefix=/usr/local/games/foodillard
不同的软件对configure提供了其他不同的选项,这里不好一一列举。另外例如HTTP服务器一般不会用到图形界面,但是Mplayer需要。所以在拿到软件的源代码后,需要借助软件的安装文档来辅助安装,一般这类文档都叫做README或者INSTALL。以安装Mplayer为例:
cd Mplayer-1.1/ #进入Mplayer的源代码目录
cat README #查看安装文档
在安装文档中Mplayer的configure脚本提供了—enable-gui这个选项配置启动图形界面。下面这个命令启用Mplayer的图形界面,并将Mplayer安装在其默认路径中:
./configure –enable-gui #执行configure脚本
configure脚本首先检查当前系统是否符合编译条件。一般需要安装正确的编译器,Linux中通常是gcc,并且系统的体系结构应该和该软件的设计一致。如果通过检查,则接下来就可以着手编译软件了。
7.6.4编译源代码
在上条命令执行之后,configure会提示用户接下来应该做什么:
‘make’ will now compile Mplayer and ‘make install’ will install it.
make #编译源代码
make是一种高级编译工具,它可以依据makefile文件中的规则调用合适的编译器编译源代码。大型软件的模块之间是错综复杂的,不可能逐一手动编译。使用make工具可以按照预先设定的步骤(这一步一般是由configuure脚本完成)自动执行所有这一切。
7.6.5安装软件到硬盘
编译完源代码之后,应该运行make install 命令来安装软件。由于需要复制某些文件进入一些系统目录中去,所以此处需要root权限:
sudo make install #以root身份安装软件
或者用下面这套命令也可以:
su root
make install
至此,Mplayer主程序就完成了,然后在帮助文档中找到关于GUI的安装信息,即下载的皮肤文件安装信息。按照文档指示进一步操作。
7.6.6出错了怎么办
安装完成后可以尝试启动程序:
gmplayer & #以图形方式启动Mplayer
在这个过程中很有可能会出错,事实上从源代码编译软件的出错率是相当大的,就算是Linux高级用户有时候也不能保证一次成功。例如安装失败后显示如下:
New_Face failed. Maybe the font path is wrong.
Please supply the text font file(~/.mplayer/subfont.ttf).
Subtitle font:load_sub_face failed.
从以上信息可以了解字体文件出了问题,接下来按照README文件这指示,从系统中选择一个ttf字体文件,并且复制为“~/.mplayer/subfont.ttf”
大多时候出现的问题并不像上述一样简单,需要仔细分析出错信息,再看看他人有没有出现过类似错误,一步步解决问题。