《linux培训系列第五讲.pdf》由会员分享,可在线阅读,更多相关《linux培训系列第五讲.pdf(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、rrktqt的个人空间Linux培训系列作者:红联Linux培训系列第五讲欢迎学习“编译源代码和管理软件包”,在本教程中,我们将向您演示如何从源代码编译程序、如何管理共享库以及如何使用 Red Hat 和 Debian 软件包管理系统。内容基础,语言简短简洁红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章及教程基本能满足不同水平的朋友学习。红联Linux门户:红联Linux论坛: Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联目录共享库共享库静态可执行程序与动态可执行程序比较动态链接相关性动态装入器ld.so.confld.so.c
2、acheldconfig 技巧LD_LIBRARY_PATH从源代码编译应用程序从源代码编译应用程序介绍下载解包列出压缩文档解包 bzip2 压缩的压缩文档bzip2 管道bzip2 管道(续)检查源代码配置使用配置-prefix 选项使用-prefixFHS 怎么样?该配置了该配置了(续)config.cache配置脚本和制作文件制作文件介绍调用 make安装make install安装之后好,完成了!可能出现的问题遗漏一些库其它问题其它问题(续)软件包管理概念软件包管理概念软件包管理的缺点rpm,Red Hat 软件包管理器rpm,Red Hat 软件包管理器安装 rpm重新安装一个 rp
3、m强制安装一个 rpm用-nodeps 安装或除去更新软件包用 rpm-q 查询博客:http:/2/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联用 rpm-ql 列出文件用 rpm-qp 查询软件包查询所有已安装的软件包查找文件的所有者显示相关性验证软件包的完整性验证已安装的软件包配置 rpmDebian 软件包管理Debian 软件包管理介绍 apt-get模拟安装软件包资源列表:apt-setup从 apt-get 到 dselect启动 dselect使用 dselect 的 Select 方式软件包状态安装和
4、配置(dpkg-reconfigure)获取已安装软件包的状态文件与其.deb 之间的链接查找要安装的软件包Linux海量文章海量Linux技术文章博客:http:/3/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联共享库共享库发布时间:2007-01-27 19:50:34Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。第二类是动态链接的可执行程序。我们将在
5、下页讨论这一内容。博客:http:/4/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联静态可执行程序与动态可执行程序比较发布时间:2007-01-27 19:51:11我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的:#ldd/sbin/sln not a dynamic executable“not a dynamic executable”是 ldd 说明 sln 是静态链接的一种方式。现在,让我们比较 sln 与其非静态同类ln 的大小:#ls-l/bin/ln/sbin/sln-rwxr-xr-x
6、 1 root root 23000 Jan 14 00:36/bin/ln-rwxr-xr-x 1 root root 381072 Jan 14 00:31/sbin/sln如您所见,sln 的大小超过 ln 十倍。ln 比 sln 小这么多是因为它是动态可执行程序。动态可执行程序是不完整的程序,它依靠外部共享库来提供运行所需的许多函数。博客:http:/5/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联动态链接相关性发布时间:2007-01-27 19:51:45要查看 ln 依赖的所有共享库的列表,可以使用 ld
7、d 命令:#ldd/bin/ln libc.so.6=/lib/libc.so.6(0 x40021000)/lib/ld-linux.so.2=/lib/ld-linux.so.2(0 x40000000)如您所见,ln 依赖外部共享库 libc.so.6 和 ld-linux.so.2。通常,动态链接的程序比其静态链接的等价程序小得多。不过,静态链接的程序可以在某些低级维护任务中发挥作用。例如,sln 是修改位于/lib 中的不同库符号链接的极佳工具。但通常您会发现几乎所有 Linux 系统上的可执行程序都是某种动态链接的变体。博客:http:/6/69制作于:2007-01-27 Pow
8、ered by X-Spacerrktqt的个人空间Linux培训系列作者:红联动态装入器发布时间:2007-01-27 19:52:19那么,如果动态可执行程序不包含运行所需的所有函数,Linux 的哪部分负责将这些程序和所有必需的共享库一起装入,以使它们能正确执行呢?答案是动态装入器(dynamic loader),它实际上是您在 ln 的 ldd 清单中看到的作为共享库相关性列出的 ld-linux.so.2 库。动态装入器负责装入动态链接的可执行程序运行所需的共享库。现在,让我们迅速查看一下动态装入器如何在系统上找到适当的共享库。博客:http:/7/69制作于:2007-01-27
9、Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联ld.so.conf发布时间:2007-01-27 19:52:54动态装入器找到共享库要依靠两个文件 /etc/ld.so.conf 和/etc/ld.so.cache。如果您对/etc/ld.so.conf 文件进行 cat 操作,您可能会看到一个与下面类似的清单:$cat/etc/ld.so.conf/usr/X11R6/lib/usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.3/usr/lib/mozilla/usr/lib/qt-x11-2.3.1/lib/usr/lo
10、cal/libld.so.conf 文件包含一个所有目录(/lib 和/usr/lib 除外,它们会自动包含在其中)的清单,动态装入器将在其中查找共享库。博客:http:/8/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联ld.so.cache发布时间:2007-01-27 19:53:29但是在动态装入器能“看到”这一信息之前,必须将它转换到 ld.so.cache 文件中。可以通过运行 ldconfig 命令做到这一点:#ldconfig当 ldconfig 操作结束时,您会有一个最新的/etc/ld.so.cach
11、e 文件,它反映您对/etc/ld.so.conf 所做的更改。从这一刻起,动态装入器在寻找共享库时会查看您在/etc/ld.so.conf 中指定的所有新目录。博客:http:/9/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联ldconfig 技巧发布时间:2007-01-27 19:54:03要查看 ldconfig 可以“看到”的所有共享库,请输入:#ldconfig-p|less还有另一个方便的技巧可以用来配置共享库路径。有时候您希望告诉动态装入器在尝试任何/etc/ld.so.conf 路径以前先尝试使用特定
12、目录中的共享库。在您运行的较旧的应用程序不能与当前安装的库版本一起工作的情况下,这会比较方便。博客:http:/10/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联LD_LIBRARY_PATH发布时间:2007-01-27 19:54:39要指示动态装入器首先检查某个目录,请将 LD_LIBRARY_PATH 变量设置成您希望搜索的目录。多个路径之间用逗号分隔;例如:#export LD_LIBRARY_PATH=/usr/lib/old:/opt/lib导出 LD_LIBRARY_PATH 后,如有可能,所有从当前
13、shell 启动的可执行程序都将使用/usr/lib/old 或/opt/lib 中的库,如果仍不能满足一些共享库相关性要求,则转回到/etc/ld.so.conf 中指定的库。我们已经完成了对 Linux 共享库的介绍。要了解有关共享库的更多内容,请输入 man ldconfig 和 man ld.so。博客:http:/11/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联从源代码编译应用程序从源代码编译应用程序介绍发布时间:2007-01-27 19:55:28假设您发现了一个特定的应用程序并想将它安装在系统上。您可
14、能需要运行这个程序的最新版本,但还没有这个最新版本的打包格式(如 rpm)。或许您只能得到这个特定应用程序的源代码格式,或者您需要启用缺省情况下在 rpm 中未启用的该程序的某些特性。无论什么原因,不管您必须还是仅仅因为您想从源代码编译该程序,本节将向您演示如何做。博客:http:/12/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联下载发布时间:2007-01-27 19:55:58首先,要找到并下载您要编译的源代码。它们可能在以.tar.gz、tar.Z、tar.bz2 或.tgz 扩展名结尾的单个压缩文档中。继续进
15、行,用您喜爱的浏览器或 ftp 程序下载这个压缩文档。如果这个程序碰巧有一个网页,那么最好访问该网页以熟悉所有可能有用的安装文档。您正在安装的程序可能依赖于许多当前在系统上已安装或未安装的其它程序。如果您确切知道该程序依赖的其它程序或库当前没有安装在系统上,则您需要先安装这些软件包(从象 rpm 那样的二进制软件包安装或同样从它们的源代码进行编译)。这样,您将为成功安装原始源代码文件做好准备。博客:http:/13/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联解包发布时间:2007-01-27 19:56:27解包源压
16、缩文档相对较简单。如果压缩文档名称以.tar.gz、.tar.Z 或.tgz 结尾,您应该可以通过输入以下内容来解包:$tar xzvf archivename.tar.gz(x 用于解压缩,z 用于 gzip 解压,v 用于显示详细信息 打印解压缩的文件名,而 f 意味着文件名将接着在命令行上出现)。几乎所有的“源代码 tar 包(tarball)”都将创建一个包含程序所有源代码的主目录。这样,当您解包这个压缩文档时,您的当前工作目录不会被大量的文件搞得乱七八糟 相反,所有的文件被整齐地组织在单个目录中,不会妨碍工作。博客:http:/14/69制作于:2007-01-27 Powered
17、by X-Spacerrktqt的个人空间Linux培训系列作者:红联列出压缩文档发布时间:2007-01-27 19:57:13时不时您会遇到这样的压缩文档,在对它解压缩时,会在您的当前工作目录中创建数量巨大的文件。尽管大多数 tar 包不是这样创建的,但这样的情况确有发生。如果您希望验证您的 tar 包被正确地组装在一起并会创建一个主目录来容纳源代码,您可以输入以下内容来查看其内容:$tar tzvf archivename.tar.gz|more(t 用于显示压缩文档的文本清单。不进行解压缩)。如果压缩文档清单的左边没有列出公共目录,则您要创建一个新的目录,将 tar 包移至该目录下,进
18、入该目录,这时再解压缩这个 tar 包。不这样做的话,您会面对一团乱麻!博客:http:/15/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联解包 bzip2 压缩的压缩文档发布时间:2007-01-27 19:57:47您的压缩文档有可能是.tar.bz2 格式。具有这种扩展名的压缩文档是用 bzip2 进行压缩的。bzip2 的压缩效果通常比 gzip 好得多。它唯一的不足之处是压缩和解压缩的速度较慢,并且在运行时,bzip2 比 gzip 消耗更多的内存。对于现代计算机,这不成问题,因此,可以预料 bzip2 会随
19、着时间的推移变得越来越流行。因为 bzip2 日益受到欢迎,所以许多 Linux 分发版(distribution)都带有经过补丁程序修正的 tar 版本,这样传递一个 y 或 i 选项将通知 tar:压缩文档是 bzip2 格式,需要用 bzip2 程序自动解压缩。要查看您是否带有用补丁修正过的 tar 版本,可以试着输入:$tar tyvf archive.tar.bz2|more或$tar tivf archive.tar.bz2|more即使两个命令都不起作用(而且 tar 提示参数无效),仍有办法 请继续阅读。博客:http:/16/69制作于:2007-01-27 Powered
20、by X-Spacerrktqt的个人空间Linux培训系列作者:红联bzip2 管道发布时间:2007-01-27 19:58:24哦,您的 tar 版本不能识别这些方便的 bzip2 快捷方式 该怎么办呢?所幸有一个简单的方法可以解压缩bzip2 tar 包的内容,并且这个方法几乎可以在所有的 UNIX 系统上工作,即使正被讨论的系统碰巧有一个非GNU 版本的 tar。要查看 bzip2 文件的内容,我们可以创建一个管道:$cat archive.tar.bz2|bzip2-d|tar tvf-|most接下来的这个管道实际上将解压缩 archive.tar.bz2 的内容:$cat ar
21、chive.tar.bz2|bzip2-d|tar xvf-博客:http:/17/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联bzip2 管道(续)发布时间:2007-01-27 19:58:57在前两个示例中,我们创建了一个标准的 UNIX 管道从压缩文档查看并解压缩文件。因为用了 f-选项来调用tar,因此它从标准输入(stdin)读取 tar 数据,而不是试图从磁盘上的文件读取数据。如果尝试用管道方法解压缩您的压缩文档的内容,而系统提示找不到 bzip2,则系统可能没有安装 bzip2。可以从 http:/ 下
22、载 bzip2 的源代码。安装 bzip2 源代码之后(通过遵照本教程),您才能首先解包并安装您希望安装的应用程序博客:http:/18/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联检查源代码发布时间:2007-01-27 19:59:28解包源代码之后,您可以进入解包的目录并检查其中的内容。最好是能找到所有与安装有关的文档。通常,这一信息可以在位于主源代码目录的 README 或 INSTALL 文件中找到。另外,可以查找 README.platform 和 INSTALL.platform 文件,这里的 platf
23、orm 是您的特定操作系统名称。博客:http:/19/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联配置发布时间:2007-01-27 19:59:55现在,许多源代码在主源代码目录中包含配置脚本。这个脚本(通常由开发人员使用 GNU autoconf 程序生成)特别设计用来设置源代码以使它们能在您的系统上正确编译。这个配置脚本在运行时会探测您的系统以确定系统性能,然后创建制作文件(Makefile),其中包含在您的系统上构建和安装源代码的指令。这个配置脚本几乎总是被命名为“configure”。如果您在主源代码目录中
24、找到配置脚本,那么它可以供您使用。如果您没有发现配置脚本,那么您的源代码可能带有一个设计用来跨越不同系统工作的标准制作文件 这意味着您可以略过以下配置步骤,在我们开始讨论“make”处继续学习本教程。博客:http:/20/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联使用配置发布时间:2007-01-27 20:00:28在运行配置脚本之前,最好是先熟悉它。输入./configure-help,您可以查看您的程序能够使用的所有不同配置选项。您所看到的选项,特别是在-help 打印输出的顶部列出的那些项,都是几乎可以在每
25、个配置脚本中找到的标准选项。在结尾部分列出的选项通常与您正尝试编译的特定软件包相关。查看它们并注意那些您希望启用或禁用的选项。博客:http:/21/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联-prefix 选项发布时间:2007-01-27 20:00:57大多数基于 GNU autoconf 的配置脚本都有-prefix 选项来允许您控制程序的安装位置。缺省情况下,大多数源代码安装时都用/usr/local 前缀。这意味着二进制文件最终在/usr/local/bin 中,手册页则在/usr/local/man 中
26、,等等。这通常就是您所期望的;/usr/local 通常用于存储您自己编译的程序。博客:http:/22/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联使用 -prefix发布时间:2007-01-27 20:01:27如果您想把源代码安装在别的地方,假设安装在./usr 中,则您要向配置脚本传递-prefix=/usr 选项。同样地,您也可以用-prefix=/opt 选项告诉配置脚本将源代码安装到/opt 目录。博客:http:/23/69制作于:2007-01-27 Powered by X-Spacerrktqt
27、的个人空间Linux培训系列作者:红联FHS 怎么样?发布时间:2007-01-27 20:02:01有时候,一个特定程序可能缺省地将它的一些文件安装到磁盘上的非标准位置。特别地,一个源代码压缩文档可能有许多没有遵守 Linux 文件系统层次结构标准(FHS)的安装路径。幸运的是,配置脚本不仅允许更改安装前缀,而且允许我们更改各个系统部件(如手册页)的安装位置。因为大多数源代码压缩文档还不符合 FHS,所以这种能力非常有用。为了使您的源代码包符合 FHS,您几乎总要向配置命令行添加-mandir=/usr/share/man 和-infodir=/usr/share/info。博客:http:
28、/24/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联该配置了发布时间:2007-01-27 20:02:36一旦已经检查了各种配置选项并确定了要使用的选项,就可以运行配置脚本了。请注意您可能不需要在运行配置脚本时包含所有命令行选项 在大多数情形下,缺省值可以发挥作用(但可能不完全是您想要的)。博客:http:/25/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联该配置了(续)发布时间:2007-01-27 20:03:07要运行配置脚本,请输入:
29、$./configure 这看起来象:$./configure或$./configure-prefix=/usr-mandir=/usr/share/man-infodir=/usr/share/info-with-threads您需要的选项取决于您正在配置的特定软件包。当您运行配置脚本时,它需要一两分钟来探测您系统上可用的特定功能部件或工具,并随着它工作的进行打印出各种配置检查的结果。博客:http:/26/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联config.cache发布时间:2007-01-27 20:03
30、:41配置过程完成后,配置脚本将它所有的配置数据存储在一个名为 config.cache 的文件中。这个文件和配置脚本本身都在同一目录中。如果您在更新系统配置后需要再次运行./configure,请确保您先执行 rm config.cache 命令;否则配置脚本将只使用旧的设置而不重新检查系统。博客:http:/27/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联配置脚本和制作文件发布时间:2007-01-27 20:04:13配置脚本完成之后,就是将源代码编译为可运行程序的时候了。可以用名为 make 的程序来执行这一
31、步骤。如果您的软件包含配置脚本,那么当您运行它时,配置脚本会创建一些为您的系统特别定制的制作文件。这些文件会告诉 make 程序如何构建源代码以及如何安装所产生的二进制文件、手册页和支持文件。博客:http:/28/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联制作文件介绍发布时间:2007-01-27 20:04:43Makefile 通常被称为 makefile 或 Makefile。每个含有源文件的目录通常都有一个制作文件,另外主源代码目录中还有一个制作文件。autoconf 生成的制作文件含有确定如何构建某些目标
32、(如您希望安装的程序)的指示信息(正式名称是规则)。make 指出所有规则运行的顺序。博客:http:/29/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联调用 make发布时间:2007-01-27 20:05:16调用 make 比较简单;只需在当前目录中输入“make”即可。make 程序随即将在当前目录中查找并解释名为 makefile 或 Makefile 的文件。如果您只输入“make”本身,那么它将构建缺省目标。开发人员通常设置制作文件以使缺省目标编译所有源代码:$make有些 makefile 没有缺省目
33、标,因此您要指定一个以使编译得以开始:$make all输入这些命令的其中之一后,您的计算机将用几分钟的时间将您的程序编译成目标代码。假设它不出差错地完成编译,您就可以准备将已编译程序安装到系统上。博客:http:/30/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联安装发布时间:2007-01-27 20:05:46编译好程序之后,还有一个更重要的步骤:安装。尽管程序已编译,但它仍未做好使用准备。您需要将它的所有组件从源代码目录复制到您的文件系统上适当的、“活动的”位置。例如,您需要将所有的二进制文件复制到/usr/l
34、ocal/bin,将所有的手册页安装到/usr/local/man,等等。在安装软件以前,您要成为 root 用户。实现这一点通常有两种方式,在另一台终端以 root 用户登录,或者输入“su”,那时就会提示您输入 root 用户的密码。输入密码以后,您就将一直拥有 root 用户的特权,直到您输入“exit”或按 control-D 键组合从当前 shell 会话退出为止。如果您已经是 root 用户,那就可以进行下一步行动了!博客:http:/31/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联make instal
35、l发布时间:2007-01-27 20:06:16安装源代码比较简单。只需在主源代码目录中输入:#make install输入“make install”告诉 make 要满足“install”目标;这个目标通常用来将所有新近创建的源文件复制到磁盘上的正确位置,以便可以使用您的程序。如果您没有指定-prefix 选项,则很有可能有相当多的文件和目录将被复制到/usr/local 目录。根据程序大小的不同,安装目标需要的时间可能从几秒到几分钟不等。除了简单地复制文件以外,make install 还会确保安装的文件有正确的所有权和许可权。make install 成功完成后,程序就安装完毕并且可
36、以使用(或几乎可以使用)。博客:http:/32/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联安装之后发布时间:2007-01-27 20:06:50现在您的程序已经安装完毕,那么下一步是什么?当然是运行它啦!如果您不熟悉如何使用刚刚安装的程序,则可以通过输入以下命令来阅读这个程序的手册页:$man programname程序可能需要另外的配置步骤。例如,如果您安装了 Web 服务器,则您需要将它配置成在系统引导时自动启动。在应用程序运行以前,您可能还需要在/etc 中定制一个配置文件。博客:http:/33/69制作
37、于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联好,完成了!发布时间:2007-01-27 20:07:21既然您已经从源代码完整地安装了一个特定的软件包,现在可以运行它了!要启动这个程序,请输入:$programname祝贺您!博客:http:/34/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联可能出现的问题发布时间:2007-01-27 20:07:49configure 或 make(甚至可能是 make install)很有可能会因某种错误代码而异
38、常终止。以下几页将帮助您改正一些常见问题。博客:http:/35/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联遗漏一些库发布时间:2007-01-27 20:08:21您可能时常会有 configure 完全失败的经历,这往往是因为某个库没有安装。为了能使构建过程继续进行,您需要暂停当前的程序配置,搜寻源代码或二进制软件包以找到程序所需的库。当安装正确的库后,configure 或 make 应该能顺利运行并成功地完成。博客:http:/36/69制作于:2007-01-27 Powered by X-Spacerrk
39、tqt的个人空间Linux培训系列作者:红联其它问题发布时间:2007-01-27 20:08:51有时候,您会碰到某种不知如何修复的错误。随着您的 UNIXLinux 经验的增长,您将能够诊断越来越多在configure 和 make 过程中遇到的、看似神秘的错误情况。有时,错误的出现是因为安装的库太旧(甚至也可能是因为太新了!)。还有些时候,碰到的问题实际上是开发人员的过错,他们可能没有预计到他们的程序会在您这样的系统上运行 或者他们只是打字有误博客:http:/37/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联其
40、它问题(续)发布时间:2007-01-27 20:09:21对于这样的问题,您要清楚能在哪里获得帮助。如果这是您首次尝试从源代码编译程序,那么最好还是选择另一个更简单的程序来编译。当您编译了较简单的程序后,您就会有修正最初遇到的问题所必需的经验。随着您继续学习更多有关 UNIX 如何工作的知识,您将更接近这样的境界:“微调”制作文件和源代码就可以让那些看上去甚至有些古怪的代码顺利地编译。博客:http:/38/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联软件包管理概念软件包管理概念发布时间:2007-01-27 20:
41、10:09除了从源代码构建应用程序以外,还有另一种在 Linux 系统上安装软件的方法。所有的 Linux 分发版都使用某种形式的软件包管理来安装、更新和卸载软件包。与直接从源代码安装相比,软件包管理有明显优势:易于安装和卸载 易于更新已安装的软件包 保护配置文件 轻松跟踪已安装文件博客:http:/39/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联软件包管理的缺点发布时间:2007-01-27 20:10:43在讲解如何使用最流行的软件包管理工具以前,我得承认有些 Linux 用户不喜欢软件包管理。他们可能会提出软件
42、包管理的以下缺点:为特定系统构建的二进制文件性能更好 解决软件包相关性比较麻烦 软件包数据库的破坏会导致系统不可维护 创建软件包比较困难 这些说法确有其事,但 Linux 用户的一般看法是软件包管理的优势大于劣势。另外,上面列出的每个不利因素都有一个相应的反证:可以为不同的系统,构建多个优化的软件包;可以增强软件包管理器来自动解决相关性;可以基于其它文件重建数据库;而以后更新或除去这个软件包时的方便性可以弥补最初创建它时所做的努力。博客:http:/40/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联rpm,Red Ha
43、t 软件包管理器rpm,Red Hat 软件包管理器发布时间:2007-01-27 20:12:26rpm,Red Hat 软件包管理器((R)ed Hat(P)ackage(M)anager)rpm 入门 对 Linux 分发版而言,1995 年 Red Hat 引入 rpm 是一个巨大的进步。它不仅使 Red Hat Linux 上的软件包管理成为可能,而且因为它的 GPL 许可证,rpm 已经成为开放源代码打包的事实标准。尽管有 GUI 和基于 Web 的工具提供更友好的界面,rpm 程序在缺省情况下是一个命令行界面。在这一节中,我们将介绍最常用的命令行操作,并且将 Xsnow 程序作为
44、示例使用。如果您愿意按照下面的步骤执行,可以在下面下载 rpm,它应该可以用于大多数基于 rpm 的分发版。xsnow-1.41-1.i386.rpm注:如果这一节中“rpm”一词的不同使用让您有些困惑的话,请记住“rpm”通常指程序,而“一个 rpm”或“那个 rpm”则通常指一个 rpm 软件包。博客:http:/41/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联安装 rpm发布时间:2007-01-27 20:13:01首先让我们使用 rpm-i 来安装 Xsnow rpm:#rpm-i xsnow-1.41-1
45、.i386.rpm如果这个命令没有产生输出,那么它就起作用了!您应该能够运行 Xsnow 在您的 X 桌面上享受一场暴风雪。我们本身是希望在安装一个 rpm 时有某些可视化反馈的,所以我们可以加上-h(用#号表示进展)和-v(详细信息)选项:#rpm-ivh xsnow-1.41-1.i386.rpmxsnow#博客:http:/42/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联重新安装一个 rpm发布时间:2007-01-27 20:13:36如果您直接按照步骤执行,您可能会在前一个示例中看到来自 rpm 的下列消息
46、:#rpm-ivh xsnow-1.41-1.i386.rpm package xsnow-1.41-1 is already installed在有些情况下,您可能希望重新安装一个 rpm,例如,您可能不小心删除了二进制文件/usr/X11R6/bin/xsnow。在那种情况下,您应该首先用 rpm-e 除去那个 rpm,然后重新安装它。请注意:下面的示例中来自 rpm 的资料信息不妨碍从系统除去软件包。#rpm-e xsnowremoval of/usr/X11R6/bin/xsnow failed:No such file or directory#rpm-ivh xsnow-1.41-
47、1.i386.rpm xsnow#博客:http:/43/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联强制安装一个 rpm发布时间:2007-01-27 20:14:10有时除去一个 rpm 是不现实的,尤其是系统上有别的程序依赖于它的时候。例如,您可能已经安装了一个“x-amusements”rpm,它将 Xsnow 列为相关程序,因此用 rpm-e 除去 Xsnow 是不允许的:#rpm-e xsnowerror:removing these packages would break dependencies:/u
48、sr/X11R6/bin/xsnow is needed by x-amusements-1.0-1在这种情况下,您可以用-force 选项重新安装 Xsnow:#rpm-ivh-force xsnow-1.41-1.i386.rpmxsnow#博客:http:/44/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联用-nodeps 安装或除去发布时间:2007-01-27 20:14:46上页中使用-force 的一个替代方法是用-nodeps 选项除去 rpm。这一选项取消了 rpm 的内部相关性检查,所以在大多数情况
49、下不推荐使用。然而,它偶尔会有用处:#rpm-e-nodeps xsnow#rpm-ivh xsnow-1.41-1.i386.rpmxsnow#在安装 rpm 时,您也可以使用-nodeps。再次重申上面所说的,不推荐使用-nodeps,但它有时是必需的:#rpm-ivh-nodeps xsnow-1.41-1.i386.rpmxsnow#博客:http:/45/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联更新软件包发布时间:2007-01-27 20:15:19最终可能将有 Xsnow 版本 1.42 的 rpm,
50、它可以在 Xsnow 作者的网站上获得。这时,您将要更新现有的Xsnow 安装。如果您要使用 rpm-ivh-force,似乎会奏效,但 rpm 的内部数据库会列出两个版本都已安装。相反,您应该用 rpm-U 来更新您的安装:#rpm-Uvh xsnow-1.42-1.i386.rpmxsnow#这里有一个小窍门:我们几乎不使用 rpm-i,因为如果系统上不存在 rpm,则 rpm-U 会安装一个。如果您在命令行指定多个软件包,其中有些软件包当前已安装而有些则没有,那么这一选项会特别有用。#rpm-Uvh xsnow-1.42-1.i386.rpm xfishtank-2.1tp-1.i386