Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102128579
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-27 09:39:54

出处:台湾省Linux社区
 
Tarball 套件管理员:
还记得我们使用过的打包指令 tar 吗?使用 tar 并且以 gzip 进行压缩的档案,就称为 Tarball 啦!这个是最原始的原始码档案喔!底下谈一谈他啰!
·什么是 Tarball ( source code )
其实 tarball 就是以 *.tar.gz 压缩之后的 binary 原始档啦!还记得 tar 怎么使用吗?记得回去第二篇瞧一瞧去!由于软体开发商为了适应各种工作平台,所以通常他们都会将整个软体以较庞大的原始档案创建下来,里头除了(1)最重要的原始码之外,另外包含了(2)针对各个不同的平台编译与操作参数而订定的侦测与参数设定档,然后将这些东西以 tar 这个汇整压缩软体将整个软体下的目录压缩成一个档案,由于是经过类似打包压缩的动作,嘿嘿!那就是所谓的 tarball 啰!因此,当您看到一个 tarball 的档案,不要怀疑,里头通常是包含了原始码的!
刚刚说 tarball 可以适应在各个不同的平台上面,那么他是怎么办到的呢?因为各个平台的操作环境都不相同吶!嗯!为了要让使用者便于安装,所以通常软体开发者会写一支小 scripts 来侦测使用者的系统,以及侦测该软体所需要的前驱软体是否存在你的 Linux 环境中,以便利于后续的编译过程与安装步骤!利用这样的一个 script 几乎就可以完整的建立起基本的参数设定档了。基本上,如果前驱软体都已经安装完毕,那么使用 tarball 几乎『一定可以安装成功』的,而且安装上面也不麻烦,大多只要执行三~四个步骤即可安装完毕!而且,使用者『可以自行设定安装的路径』,以便于管理。
不过, tarball 在另一方面有个相当严重的困扰,那就是反安装的部分。在 RPM 上面的反安装是蛮简单的一件事,只要克服了属性相依的问题之后,要反安装只要下达 rpm –e package 即可!但是 tarball 可没有这么简单呢!因为他并没有纪录当初安装档案的资料库,所以,要反安装的时候,可能需要一个档案一个档案的手动去除?嗄?这么麻烦?那么有没有什么方法可以比较容易管理呢?有呀!就是利用安装在特定的目录下的方式来管理,就会比较清楚一点!而且也会比较容易未来进行主机的移交作业?通常我们会给您这样的建议:
1.最好将 tarball 的原始资料解压缩到 /usr/local/src 当中;
2.安装时,最好安装到 /usr/local 这个预设路径下;
3.考虑未来的反安装步骤,最好可以将每个套件单独的安装在 /usr/local 底下,例如安装 rp-pppoe-2.6.tar.gz 时,则可以指定该套件需要安装于 /usr/local/rp-pppoe 当中,如此一来,如果该套件会将所有的资料都写入 /usr/local/rp-pppoe 当中,因此,未来如果要移除该套件,只要将该目录删除即可视为成功的移除了!
4.不过单独安装某个套件在某一特定路径下的作法,会导致当有 man page 的时候,使用预设的 MANPATH 会找不到相关的说明档案内容。这个时候就必须要将 man page 的路径加到 /etc/man.config 档案中了!否则使用 man 也查询不到指令的使用方法的。以上面的例子为例,如果是安装了 /usr/local/rp-pppoe 当中,通常 man page 会放在 /usr/local/rp-pppoe/man 当中,所以,您就必需要在 /etc/man.config 里面差不多 40~50 行左右的地方,加入底下这一行:
MANPATH /usr/local/rp-pppoe/man
这样就可以使用 man 来查询资料啰!
·  
·
·Tarball 需要的基础套件
虽然 Tarball 在安装上面可以说『相当的简单』,因为只要顺着解开压缩之后目录里面的 README 或 INSTALL 就可以安装成功了!但是仍然有部分的困扰,例如:如果常常上 BBS 或者是新闻群组讨论区的朋友,应该不难发现这个发问『我在执行某个程式的侦测档案时,他都会告诉我没有 gcc 这个套件,这是怎么回事?』还有:『我没有办法使用 make 耶!这是什么问题?』呵呵!必须要告诉大家的是,使用 tarball 的安装时,『一定』需要几个物件才行!这些物件在 Mandrake 或者是其他的 distribution 时,『预设都是不选择的』,所以在安装 Linux 的时候,请特别留意选择的类别呢!底下这些东西都是必需的:
1.需要 Kernel sources files:常常一些 Tarball 在安装时,会使用到 Kernel 的原始档案,亦即在 /usr/src/linux 这个目录底下的档案,而该目录是需要安装或者编译过核心才会存在的目录!这个问题最常发生在『驱动程式的安装与编译』方面。所以当您在安装 Linux 的时候没有选择 Kernel source 或者在之后没有编译核心时,呵呵!那么可能就没有办法安装了!
2.需要 make 及 autoconfig 等套件:需要另外注意的就是,我们还需要 make 这个套件才行!除此之外,还有 autoconfig 等等的套件也需要安装才行!这两个东西可以让参数设定档( 通常就是 Makefile 这个档案 )顺利的被执行。
3.需要 gcc 或 cc 等编译软体 ( compiler ):如果没有编译的软体,那么自然也就无法将原始程式码编译成可以执行的档案啦!所以至少要有一种编译器才行!在 GNU 架构的 Linux 上面,我们通常使用的是 gcc 这个加强功能的 C 语言编译器啦!请注意:除了 gcc 之外,连同上面的 make 等等的套件,几乎都在安装 Linux 的时候的那个 Software Development 咚咚里头!也就是说,若是您当初 安装的时候,选择的是我建议的那种安装方式的话,那么您的 tarball 安装应该问题不大,若是没有安装的话,那么肯定很多的套件是无法编译成功的!这个时候只好拿出您的原版光碟,一个一个 RPM 套件加入您的 Linux 系统当中吧! @_@
4.特别留意安装时候的选择工具:由于在安装的时候『预设选项并没有将 Kernel Development 及 Software Development 加入安装的行列』,所以您如果选择预设选项的话,呵呵!那么使用 tarball 的工具就会显的力不从心!这一点还请特别特别留意呢!
·一般安装步骤:
基本上, tarball 的安装主要就是:
1.将 tarball 在 /usr/local/src 解压缩;
2.在软体解压缩的路径下建立 Makefile 这个参数设定档案;
3.以 make 这个程式并使用该目录下的 Makefile 做为他的参数设定档,来进行 make (编译或其他) 的动作;
4.以 make 这个程式,并以 Makefile 这个参数设定档,依据 install 项目的指定来安装到正确的路径!
此外,通常在每个软体的 tarball 中,都会附上 INSTALL 或者是 README 这种档名的说明档,这些说明档请『务必详细阅读』过一遍,通常这些档案会记录这个软体的安装要求、软体的工作项目、与软体的安装参数设定及技巧等,只要仔细的阅读完这些档案,基本上,要安装好 tarball 的档案,都不会有什么大问题啰?那么那个 make 在干嘛?一般而言, make 会依据 Makefile 这个档案的内容,去执行清除目标档(object file)或者是编译或者是安装的步骤,对于安装 source code 的人来说,这个 make 是相当重要的!在 Makefile 这个档案中,会有一些不同的步骤应该要进行的工作项目,例如 clean, install, compile 等等,而如果要执行清除的步骤,就是 make clean ,安装就下达 make install ,亦即 make 后面接欲进行的工作,那么 make 这个工具就会依据 Makefile 这个档名的档案去读取相关的步骤讯息,而进行该有的动作!
OK!我们底下约略提一下大部分的 tarball 软体之安装的指令下达方式:
5../configure :这个步骤就是在建立 Makefile 这的档案啰!通常程式开发者会写一支 scripts 来检查您的 Linux 系统、相关的套件属性等等,这个步骤相当的重要,因为未来您的安装资讯都是这一步骤内完成的!另外,这个步骤的相关资讯应该要参考一下该目录下的 README 或 INSTALL 相关的档案!!基本上,这个步骤完成之后会建立(或修改)一个 Makefile ,这就是参数档啦!
6.make clean:make 会读取 Makefile 中关于 clean 的工作。这个步骤不一定会有,但是希望执行一下!为什么呢?因为在进行编译的时候,会产生一些 *.o 的档案,例如有个 abc.c 的原始码,经过编译后会变成 abc.o 的档案!我们称这些档案为 object file ,这些档案如果之前已经编译过并留下来的话,那么这次再编译的时候,就不会编译该档案,然而由于我们可能已经修改了部分的参数,因此该档案的编译结果事实上应该会有所不同!因此,为了避免前一次留下来的资料可能影响到这次编译的结果,所以通常可以进行一下这个步骤啰!
7.make:make 会依据 Makefile 当中的预设工作进行编译的行为!编译的工作主要是进行 gcc 来将原始码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一些函式库之类的 link 后,才能产生一个完整的执行档!使用 make 就是要将原始码编译成为可以被执行的可执行档,而这个可执行档会放置在目前所在的目录之下,尚未被安装到预定安装的目录中;
8.make install:通常这就是最后的安装步骤了,make 会依据 Makefile 这个档案里面关于 install 的项目,将上一个步骤所编译完成的资料给他安装到预定的目录中,就完成安装啦!
9.特别留意:请注意,上面的步骤是一步一步来进行的,而其中只要一个步骤无法成功,那么后续的步骤就完全没有办法进行的!因此,要确定每一的步骤都是成功的才可以!举个例子来说,万一今天你在 ./configure 就不成功了,那么就表示 Makefile 无法被建立起来,要知道,后面的步骤都是根据 Makefile 来进行的,既然无法建立 Makefile ,后续的步骤当然无法成功啰!另外,如果在 make 无法成功的话,那就表示原始档案无法被编译成可执行档,那么 make install 主要是将编译完成的档案给他安装下去的,既然都没有成功的执行档了,怎么进行安装?所以啰,要每一个步骤都正确无误才能往下继续做!此外,如果安装成功,并且是安装在独立的一个目录中,例如 /usr/local/packages 这个目录中好了,那么您就必需手动的将这个套件的 man page 给他放到 /etc/man.config 里面去,设定的方法如前面提到的一般所示。
·Tarball 的移除与升级:
再来就要谈到恼人的 tarball 的移除跟升级了?Tarball的移除难易度跟(1)当初设定参数档时候的安装目录与(2)这个套件本身要求的档案放置目录有关。如果我们以 apache 这个软体来说明的话( 您的系统不见得有装 ),那么如果您以 RPM 的安装方式来安装时,会发现他的档案放在哪里呢?大多是放在:
o /etc/httpd
o /usr/lib
o /usr/bin
o /usr/share/man
我们会发现他大致上是摆在 etc, lib, man, bin 等目录当中,分别代表『设定、函式库、线上说明档、执行档』,一个套件通常会将他的内容分为这四个目录来放置,好了,那么你是以 tarball 来安装时呢?如果是放在预设的 /usr/local 里面,由于 /usr/local 原本就预设这几个目录了,所以你的资料就会被放在:
o /usr/local/etc
o /usr/local/bin
o /usr/local/lib
o /usr/local/man
但是如果你每个套件都选择在这个预设的路径下安装的话,那么所有的套件的档案都将放置在这四个目录当中,因此,如果你都安装在这个目录下的话,那么未来在想要升级或移除的时候,就会比较难以追查档案的来源啰?而如果您在安装的时候选择的是单独的目录,例如 /usr/local/apache 的话,那么您的档案目录就会变成:
/usr/local/apache/etc
/usr/local/apache/bin
/usr/local/apache/lib
/usr/local/apache/man
呵呵!自己的档案都在同一个目录之下,那么要移除就简单的多了!只要将该目录移除即可视为该套件已经被移除啰?当然啰,实际安装的时候还是得视该软体的 Makefile 里头的 install 资讯才能知道到底他的安装情况为何的?
移除的方法是这样,那么升级呢?唉?升级有的时候也是很困扰啦!怎么说呢?我们还是以 apache 来说明好了,如果您安装的时候是使用 PHP + Apache + MySQL 的方式来安装的,那么每个套件在安装的时候『都有一定的顺序与程序!』因为他们三者之间具有相关性,所以安装时必需要三者同时考虑到他们的函式库与相关的编译参数。那么如果今天我只要升级 PHP 呢?有的时候因为只有涉及动态函式库的升级,那么我只要升级 PHP 即可!其他的部分或许影响不大。但是如果今天 PHP 需要重新编译的模组比较多,那么可能会连带的,连 Apache 这个程式也需要重新编译过才行?阿!真是有点给他头痛的?没办法啦!使用 tarball 确实有他的优点啦,但是在这方面,确实也有他一定的伤脑筋程度? @_@

阅读(187) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~