第二十章 Tarball 的管理与建议

来源:互联网 发布:c语言爱心代码 编辑:程序博客网 时间:2024/05/19 21:03
在我们知道了原始码的相关资讯之后,再来要了解的自然就是如何使用具有原始码的 Tarball 来创建一个属於自己的软件罗!从前面几个小节的说明当中,我们晓得其实 Tarball 的安装是可以跨平台的,因为 C 语言的程序码在各个平台上面是可以共通的, 只是需要的编译器可能并不相同而已。例如 Linux 上面用 gcc 而 Windows 上面也有相关的 C 编译器啊~所以呢,同样的一组原始码,既可以在 CentOS Linux 上面编译,也可以在 SuSE Linux 上面编译,当然,也可以在大部分的 Unix 平台上面编译成功的!

如果万一没有编译成功怎么办?很简单啊,透过修改小部分的程序码 (通常是因为很小部分的异动而已) 就可以进行跨平台的移植了!也就是说,刚刚我们在 Linux 底下写的程序『理论上,是可以在 Windows 上面编译的!』这就是原始码的好处啦!所以说,如果朋友们想要学习程序语言的话, 鸟哥个人是比较建议学习『具有跨平台能力的程序语言』,例如 C 就是很不错的一个!

唉啊!又扯远了~赶紧拉回来继续说明我们的 Tarball 啦!

Tarball 安装的基本步骤

我们提过以 Tarball 方式释出的软件是需要重新编译可运行的 binary program 的。而 Tarball 是以 tar 这个命令来打包与压缩的文件,所以啦,当然就需要先将 Tarball 解压缩,然后到原始码所在的目录下进行 makefile 的创建再以 make 来进行编译与安装的动作啊!所以整个安装的基础动作大多是这样的:

取得原始档:将 tarball 文件在 /usr/local/src 目录下解压缩;
取得步骤流程:进入新创建的目录底下,去查阅 INSTALL 与 README 等相关文件内容 (很重要的步骤!);
相依属性软件安装:根据 INSTALL/README 的内容察看并安装好一些相依的软件 (非必要);
创建 makefile:以自动侦测程序 (configure 或 config) 侦测作业环境,并创建 Makefile 这个文件;
编译:以 make 这个程序并使用该目录下的 Makefile 做为他的参数配置档,来进行 make (编译或其他) 的动作;
安装:以 make 这个程序,并以 Makefile 这个参数配置档,依据 install 这个标的 (target) 的指定来安装到正确的路径!


注意到上面的第二个步骤,通常在每个软件在释出的时候,都会附上 INSTALL 或者是 README 这种档名的说明档,这些说明档请『确实详细的』 阅读过一遍,通常这些文件会记录这个软件的安装要求、软件的工作项目、 与软件的安装参数配置及技巧等,只要仔细的读完这些文件,基本上,要安装好 tarball 的文件,都不会有什么大问题罗。

至於 makefile 在制作出来之后,里头会有相当多的标的 (target),最常见的就是 install 与 clean 罗!通常『make clean』代表著将目标档 (object file) 清除掉,『make』则是将原始码进行编译而已。 注意喔!编译完成的可运行档与相关的配置档还在原始码所在的目录当中喔!因此,最后要进行『make install』来将编译完成的所有咚咚都给他安装到正确的路径去,这样就可以使用该软件啦!

OK!我们底下约略提一下大部分的 tarball 软件之安装的命令下达方式:

./configure
这个步骤就是在创建 Makefile 这个文件罗!通常程序开发者会写一支 scripts 来检查你的 Linux 系统、相关的软件属性等等,这个步骤相当的重要, 因为未来你的安装资讯都是这一步骤内完成的!另外,这个步骤的相关资讯应该要参考一下该目录下的 README 或 INSTALL 相关的文件!

make clean
make 会读取 Makefile 中关於 clean 的工作。这个步骤不一定会有,但是希望运行一下,因为他可以去除目标文件!因为谁也不确定原始码里面到底有没有包含上次编译过的目标文件 (*.o) 存在,所以当然还是清除一下比较妥当的。 至少等一下新编译出来的运行档我们可以确定是使用自己的机器所编译完成的嘛!

make
make 会依据 Makefile 当中的默认工作进行编译的行为!编译的工作主要是进行 gcc 来将原始码编译成为可以被运行的 object files ,但是这些 object files 通常还需要一些函式库之类的 link 后,才能产生一个完整的运行档!使用 make 就是要将原始码编译成为可以被运行的可运行档,而这个可运行档会放置在目前所在的目录之下, 尚未被安装到预定安装的目录中;

make install
通常这就是最后的安装步骤了,make 会依据 Makefile 这个文件里面关於 install 的项目,将上一个步骤所编译完成的数据给他安装到预定的目录中,就完成安装啦!

请注意,上面的步骤是一步一步来进行的,而其中只要一个步骤无法成功,那么后续的步骤就完全没有办法进行的! 因此,要确定每一的步骤都是成功的才可以!举个例子来说,万一今天你在 ./configure 就不成功了,那么就表示 Makefile 无法被创建起来,要知道,后面的步骤都是根据 Makefile 来进行的,既然无法创建 Makefile,后续的步骤当然无法成功罗!

另外,如果在 make 无法成功的话,那就表示原始文件无法被编译成可运行档,那么 make install 主要是将编译完成的文件给他放置到文件系统中的,既然都没有可用的运行档了,怎么进行安装? 所以罗,要每一个步骤都正确无误才能往下继续做!此外,如果安装成功, 并且是安装在独立的一个目录中,例如 /usr/local/packages 这个目录中好了,那么你就必需手动的将这个软件的 man page 给他写入 /etc/man.config 里面去。

一般 Tarball 软件安装的建议事项 (如何移除?升级?)

或许你已经发现了也说不定,那就是为什么前一个小节里面, Tarball 要在 /usr/local/src 里面解压缩呢?基本上,在默认的情况下,原本的 Linux distribution 释出安装的软件大多是在 /usr 里面的,而使用者自行安装的软件则建议放置在 /usr/local 里面。这是考量到管理使用者所安装软件的便利性。

怎么说呢?我们晓得几乎每个软件都会提供线上说明的服务,那就是 info 与 man 的功能。在默认的情况下, man 会去搜寻 /usr/local/man 里面的说明文件, 因此,如果我们将软件安装在 /usr/local 底下的话,那么自然安装完成之后, 该软件的说明文件就可以被找到了。此外,如果你所管理的主机其实是由多人共同管理的, 或者是如同学校里面,一部主机是由学生管理的,但是学生总会毕业吧? 所以需要进行交接,如果大家都将软件安装在 /usr/local 底下,那么管理上不就显的特别的容易吗!

所以罗,通常我们会建议大家将自己安装的软件放置在 /usr/local 下,至於原始码 (Tarball)则建议放置在 /usr/local/src (src 为 source 的缩写)底下啊

再来,让我们先来看一看 Linux distribution 默认的安装软件的路径会用到哪些?我们以 apache 这个软件来说明的话 (apache 是 WWW 服务器软件,详细的数据请参考服务器架设篇。你的系统不见得有装这个软件):

/etc/httpd
/usr/lib
/usr/bin
/usr/share/man

我们会发现软件的内容大致上是摆在 etc, lib, bin, man 等目录当中,分别代表『配置档、函式库、运行档、线上说明档』。 好了,那么你是以 tarball 来安装时呢?如果是放在默认的 /usr/local 里面,由於 /usr/local 原本就默认这几个目录了,所以你的数据就会被放在:

/usr/local/etc
/usr/local/bin
/usr/local/lib
/usr/local/man

但是如果你每个软件都选择在这个默认的路径下安装的话, 那么所有的软件的文件都将放置在这四个目录当中,因此,如果你都安装在这个目录下的话, 那么未来再想要升级或移除的时候,就会比较难以追查文件的来源罗! 而如果你在安装的时候选择的是单独的目录,例如我将 apache 安装在 /usr/local/apache 当中,那么你的文件目录就会变成:

/usr/local/apache/etc
/usr/local/apache/bin
/usr/local/apache/lib
/usr/local/apache/man

呵呵!单一软件的文件都在同一个目录之下,那么要移除该软件就简单的多了! 只要将该目录移除即可视为该软件已经被移除罗!以上面为例,我想要移除 apache 只要下达『rm -rf /usr/local/apache』 就算移除这个软件啦!当然罗,实际安装的时候还是得视该软件的 Makefile 里头的 install 资讯才能知道到底他的安装情况为何的。因为例如 sendmail 的安装就很麻烦......

这个方式虽然有利於软件的移除,但不晓得你有没有发现,我们在运行某些命令的时候,与该命令是否在 PATH 这个环境变量所记录的路径有关,以上面为例,我的 /usr/local/apache/bin 肯定是不在 PATH 里面的,所以运行 apache 的命令就得要利用绝对路径了,否则就得将这个 /usr/local/apache/bin 加入 PATH 里面。另外,那个 /usr/local/apache/man 也需要加入 man page 搜寻的路径当中啊!

除此之外, Tarball 在升级的时候也是挺困扰的,怎么说呢?我们还是以 apache 来说明好了。WWW 服务器为了考虑互动性,所以通常会将 PHP+MySQL+Apache 一起安装起来 (详细的资讯请参考服务器架设篇) ,果真如此的话,那么每个软件在安装的时候『都有一定的顺序与程序!』 因为他们三者之间具有相关性,所以安装时必需要三者同时考虑到他们的函式库与相关的编译参数。

假设今天我只要升级 PHP 呢?有的时候因为只有涉及动态函式库的升级,那么我只要升级 PHP 即可!其他的部分或许影响不大。但是如果今天 PHP 需要重新编译的模块比较多,那么可能会连带的,连 Apache 这个程序也需要重新编译过才行!真是有点给他头痛的!没办法啦!使用 tarball 确实有他的优点啦,但是在这方面,确实也有他一定的伤脑筋程度。

由於 Tarball 在升级与安装上面具有这些特色,亦即 Tarball 在反安装上面具有比较高的难度 (如果你没有好好规划的话~),所以,为了方便 Tarball 的管理,通常鸟哥会这样建议使用者:

最好将 tarball 的原始数据解压缩到 /usr/local/src 当中;

安装时,最好安装到 /usr/local 这个默认路径下;

考虑未来的反安装步骤,最好可以将每个软件单独的安装在 /usr/local 底下;

为安装到单独目录的软件之 man page 加入 man path 搜寻:
如果你安装的软件放置到 /usr/local/software/ ,那么 man page 搜寻的配置中,可能就得要在 /etc/man.config 内的 40~50 行左右处,写入如下的一行:
MANPATH /usr/local/software/man
这样才可以使用 man 来查询该软件的线上文件罗!

一个简单的范例、利用 ntp 来示范

读万卷书不如行万里路啊!所以当然我们就来给他测试看看,看你是否真的了解了如何利用 Tarball 来安装软件呢?我们利用时间服务器 (network time protocol) ntp 这个软件来测试安装看看。先请到 http://www.ntp.org/downloads.html 这个目录去下载文件,请下载最新版本的文件即可。或者直接到鸟哥的网站下载 2009/05 公告释出的稳定版本:

http://vbird.dic.ksu.edu.tw/linux_basic/0520source/ntp-4.2.4p7.tar.gz
假设我对这个软件的要求是这样的:

假设 ntp-4.2.4p7.tar.gz 这个文件放置在 /root 这个目录下;
原始码请解开在 /usr/local/src 底下;
我要安装到 /usr/local/ntp 这个目录中;
那么你可以依照底下的步骤来安装测试看看 (如果可以的话,请你不要参考底下的文件数据, 先自行安装过一遍这个软件,然后再来对照一下鸟哥的步骤喔!)。

解压缩下载的 tarball ,并参阅 README/INSTALL 文件

[root@www ~]# cd /usr/local/src   <==切换目录[root@www src]# tar -zxvf /root/ntp-4.2.4p7.tar.gz  <==解压缩到此目录ntp-4.2.4p7/         <==会创建这个目录喔!ntp-4.2.4p7/libopts/....(底下省略)....[root@www src]# cd ntp-4.2.4p7/[root@www ntp-4.2.4p7]# vi INSTALL  <==记得 README 也要看一下!# 特别看一下 28 行到 54 行之间的安装简介!可以了解如何安装的流程喔!


检查 configure 支持参数,并实际建置 makefile 守则档

[root@www ntp*]# ./configure --help | more  <==查询可用的参数有哪些  --prefix=PREFIX         install architecture-independent files in PREFIX  --enable-all-clocks     + include all suitable non-PARSE clocks:  --enable-parse-clocks   - include all suitable PARSE clocks:# 上面列出的是比较重要的,或者是你可能需要的参数功能![root@www ntp*]# ./configure --prefix=/usr/local/ntp \>  --enable-all-clocks --enable-parse-clocks  <==开始创建makefilechecking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yes....(中间省略)....checking for gcc... gcc           <==也有找到 gcc 编译器了!....(中间省略)....config.status: creating Makefile  <==现在知道这个重要性了吧?config.status: creating config.hconfig.status: executing depfiles commands


一般来说 configure 配置参数较重要的就是那个 --prefix=/path 了,--prefix 后面接的路径就是『这个软件未来要安装到那个目录去?』如果你没有指定 --prefix=/path 这个参数,通常默认参数就是 /usr/local 至於其他的参数意义就得要参考 ./configure --help 了! 这个动作完成之后会产生 makefile 或 Makefile 这个文件。当然啦,这个侦测检查的过程会显示在萤幕上, 特别留意关於 gcc 的检查,还有最重要的是最后需要成功的创建起 Makefile 才行!

最后开始编译与安装噜!

[root@www ntp*]# make clean; make[root@www ntp*]# make check[root@www ntp*]# make install# 将数据给他安装在 /usr/local/ntp 底下


整个动作就这么简单,你完成了吗?完成之后到 /usr/local/ntp 你发现了什么?


转自:http://vbird.dic.ksu.edu.tw/linux_basic/0520source_code_and_tarball_4.php
0 0
原创粉丝点击