免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1245 | 回复: 0
打印 上一主题 下一主题

Linux系统管理员(二)---套件管理RPM与Tarball [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-26 16:26 |只看该作者 |倒序浏览
在这一章我们学习Linux中的两个常见的套件管理方式RPM与Tarball的升级方式.
为何升级套件与如何升级套件
1.需要新的功能,但旧有主机没有,所以需要安装新的套件
2.旧版本的套件上可能有安全问题,所以需要更新到新版本套件
3.旧版的套件执行效果不佳,或者执行能力不能令人满意
更新的方法哪些?
目前在Linux中有相当多的不同的更新套件的方式,包括redhat开发的RPM的up2date的在线更新模式,Debian中使用的dpkg方法,Sun Unix上使用的pkg升级方式,目前越来越流行的apt在线更新模式以及源代码中最常使用的Tarball编译方法等.
RPM,是目前使用最广泛的套件管理程序之一,是利用数据库管理的方式进行套件的安装,具有相当容易的操作界面,而且套件查询验证功能相当大,不过麻烦的地方在于它的属性相依问题.
Tarball,直接在源代码经过编译后进行安装.在安装上具有较大的灵活性,可以随时更改用户的个性化参数.但需要其他套件的协助,例如:gcc compiler,kernel-header,make套件等.并且在反安装上有一定难度.


RPM套件管理程序
什么是RPM,SRPM
RPM全称是RedHat Package Manager.它是以一种数据库记录的方式将你需要的套件安装到Linux主机的一套管理程序,其最大的特点就是将你要安装的套件先包装好,通过包装好的套件中默认的数据库记录记录这个套件要安装时必需相依属性模块(就是你的Linux主机需要首先存在的几个必要套件)其优点是:
1.由于己经编译完成并且打包完毕,所以安装方便
2.由于套件的信息己经记录在Linux主机的数据库上,很方便查询,升级与反安装.
其缺点如下:
1.安装环境必须与打包时的环境需求一致或相当;
2.需要满足套件的相依属性需求;
3.反安装时需要特别小心,最底层的套件不可先移除,否则可以造成整个系统出现问题.

SRPM,SRPM也是一种RPM,但是由于它连同当初编译之前的源代码一起附带在里面,所以可以进行重新编译.通常SRPM的后缀名是*****.src.RPM.RPM与SRPM最大的差异就在于有没有包含源代码程序.



什么是i386,i586,i686和noarch
一个完整的RPM文件名称如下:
zsh-4.0.6-5.i386.rpm
zsh是套件的名称
4.0.6是版本信息.可以让你知道哪个是新版本,哪个是旧版本.又分为主版本跟次版本.
5是版本发布次数,也是编译的次数.由于在同一版本中,可能由于有某些bug或安全问题,所以必须重新设定当初打包时的设定参数,设定完成之后重新编译并打包成RPM文件,因此就出现了不同的打包数.
i386是适合的操作硬件平台.
    i386:几乎适用于所有的x86平台,不论是旧的pentum或新的pentum-IV与K7系统列的CPU,都可以正常工作.i指的是Intel兼容的CPU,至于386,就是CPU的等级.
    i586:就是586等级的计算机,包括pentum第一代MMX CPU,AMD的K5,K6系统列CPU(socket 7插脚)等CPU都算是这个等级.
    i686:pentum II以后的Intel系统CPU及K7以后的等级的CPU都属于这个686等级.
    noarch:没有任何硬件等级上的限制.


RPM与SRPM需要的安装目录
SRPM的编译过程
我们知道,SRPM中含有未经编译的源代码,所以需要将SRPM编译打包.那么编译在哪里进行?由于编译时会将源代码解压缩,并且将附带的参数控制选项同时解压,所以会出现一些数据,这些数据放哪里?可以找/usr/src目录下查看.Redhat一般放在/usr/src/redhat目录下,而Mandrake则是放在/usr/src/RPM目录下.Openlinux则是放在/usr/src/openlinux目录下.
下面以Mandrake为例讲解.
/usr/src/RPM/SPEC:这个目录中放置的是该套件的配置文件,例如这个套件的信息参数,配置项等.
/usr/src/RPM/SOURCE:这个目录中放置的是该套件的原始文件(*.tar.gz的文件)以及config配置文件;
/usr/src/RPM/BUILD:在编译过程中,有些暂存的临时数据都会放置在这个目录中
/usr/src/RPM/RPMS:经过编译之后且编译成功,将打包完成的文件放置在这个目录中.其中包含了i386,i586,i686,noarch等子目录.
此外,在编译过程中,可能会发全不明错误或设定错误,这是就会在/tmp下产生一个相对应的错误文档.可以根据这个文档进行除错工作.所有问题都解决且编译成功之后,刚刚解压缩之后的文件(即在/usr/src/RPM/SPEC,SOURCE,BUILD等文件)都会被杀掉,只剩下放置在/usr/src/RPM/RPMS下的文件.


RPM的安装过程
在安装RPM的套件时,这些套件通常会用到下面的目录:
/etc        一些配置文件放置的目录,如/etc/samba
/usr/bin    一些可执行文件
/usr/lib    一些程序使用的动态函数库
/usr/share/doc  一些基本的软件使用手册与说明文件
/usr/share/man  一些man page文件


RPM的指令用法
RPM提供了安装,升级与更新,查询,验证,反安装与重建数据库等功能.
1.安装
从无到有就是安装.安装的方式为:若是RPM则使用ivh,如果是SRPM就使用rebuild或recompiler.
ex>
#rpm --rebuild rp-pppoe-2.6-5.src.RPM
#rpm --recompile rp-pppoe-2.6-5.src.RPM
#rpm -ivh rp-pppoe-2.6-5.src.RPM
--rebuild:这个参数会将后面的SRPM进行编译与打包,但并没有安装.当使用--rebuild的时候,最后通常会发现如下一行字体: Wrote: /usr/src/RPM/RPMS/i386/rp-pppoe-2.6-5.i386.RPM .这个就是编译完成的RPM文件,这个文件就可以用来安装了.安装的时候请加绝对路径进行安装
--recompile:这个动作会直接编译,打包并安装.
-ivh:就是用来安装RPM的参数.在这个参数下,由于会有一些相依属问题,或者是曾经安装过的文件的问题,可以加以下参数来强制安装.
--nodeps:不考虑相依属性的关系,强制安装下去
--replacepkgs:如果之前安装过这个套件,又想覆盖这个套件,那么不需要反安装再安装,可以直接加--replacepkgs强制覆盖;
--replacefiles:如果这个套件安装完毕,曾经被修改过文件,就是安装过程中会出现confilcting files的话,可以直接以--replacefiles覆盖掉这种文件.


2.升级与更新
使用Uvh升级,不过在较多升级版本中,使用Fvh则是更好的做法.因为Uvh是升级你写入的套件,Fvh则是仅升级在你系统中存在的套件.
#rpm -Uvh rp-pppoe-2.6-5.i386.rpm   
#rpm -Fvh *.RPM  


3.查询
语法:
1.从系统查询(由/var/lib/RPM数据库取得的数据)
#rpm -q rp-pppoe     
#rpm -qa   
#rpm -qi rp-pppoe   
#rpm -ql rp-pppoe   
#rpm -qf /etc/rc.d/init.d/pppoe   
2.由文件查询文件的内容
#rpm -qpi rp-pppoe-2.6-5.src.RPM   
#rpm -qpl rp-pppop-2.6-5.src.RPM   
说明:
1.查询套件:查询安装过的套件可以使用-q即可知道它的套件版本,如果忘记套件的全名,那么可以使用RPM -qa | grep packagename来选择适当的套件;若使用-qi,则可以了解这个套件的主要信息.
2.寻找套件文件:通常,在我们忘记一个套件含有的文件时,可以使用-ql查询该套件,结果会列出相当多的文件
3.由文件寻找套件:如果误杀某文件,可以在相同系统的机子上使用-qf来查询该文件所属的套伯,然后重新安装该套件就可以挽救误杀的文件.


4.验证
验证主要用于为系统管理员提供一个有用的管理机制,作用的方式是使用/var/lib/RPM下的数据库内容对比当前Linux系统环境下的所有套件文件.即,当有文件不小心被遗失,可以用这个简单的方法验证原始的文件系统.
#rpm -V rp-pppoe   
#rpm -Va   
ex>.
[root@mail BUILD]# rpm -V sendmail
S.5....T c /etc/aliases
.......T c /etc/mail/Makefile
S.5....T c /etc/mail/access
.......T c /etc/mail/domaintable
.......T c /etc/mail/helpfile
S.5....T c /etc/mail/local-host-names
.......T c /etc/mail/mailertable
S.5....T c /etc/mail/sendmail.cf
S.5....T c /etc/mail/sendmail.mc
S.5....T c /etc/mail/statistics
SM5....T c /etc/mail/submit.cf
.......T c /etc/mail/submit.mc
.......T c /etc/mail/trusted-users
.......T c /etc/mail/virtusertable
.......T c /etc/rc.d/init.d/sendmail
.......T c /etc/sysconfig/sendmail
[root@mail BUILD]#
在文件名称之前的参数说明
S: file size differs (文件的容量大小己被改变)
M: Mode differs (includes permissions and file type)(文件的权限或文件的属性,如是否可执行等参数己被改变)
5:MD5 sum differs(MD5这一种加密属性己被改变)
D:Device major/minor number mis-match (设备名称己被改变)
L:readLink(2) path mis-match (Link属性己被改变)
U:User ownership differs (文件的所有者己被改变)
G:Group ownership deffers (文件的所属群组己被改变)
T:mTime differs (文件的建立时间己被改变)


5.反安装与重建数据库
解除安装的过程一定要自顶向下解除.
使用--rebuilddb来重新建RPM的数据库
如:
#RPM -e re-pppoe   
#RPM --rebuilddb   



Tarball管理方法
什么是Tarball
Tarball是以*.tar.gz压缩之后的二进制原始文件档.其中包括最重要的源代码与针对各个不同的平台编译与操作参数而定制的检测与参数配置文件.
Tarball的安装适全各个不同的平台,为什么这样说了,因为软件开发者为了让用户便于安装,通常会写一支小脚本来检测用户系,检测该软件需要所前驱软件是否存在于你的Linux环境中,以便于后续的编译过程与安装步骤.利用这样一个脚本几乎就可以完整地建立起基本的参数配置文件.基本上,如果前驱软件己经安装完毕,那么使用Tarball几乎一定可以安装成功,而且安装过程比较轻松.
不过,Tarball在反安装方面有个相当严重的困扰.因为它并没有记录当初安装文件的数据库,所以,要进入反安装,可能需要手动删除每个文件.不过你也可以将其安装在特定的目录下进行管理,这样就比较清楚,也易于在未来进行主机的移交作业.通常有如下建议:
1.最好将Tarball的原始数据解压缩到/usr/local/src中;
2.安装时,最好安装到/usr/local这个默认路径下;
3.为了在今后的反安装步骤,最好将每个套件单独安装在/usr/local下.
4.单独安装某个套件在某一特定路径下的做法会导致当有man page的时候,使用默认的MANPATH会找不到相关的说明文件内容.这时需要在/etc/man.config中加入新安装程序的man page路径.


Tarball需要的基本套件
1.Kernel sources files:通常,有些Tarball在安装的时候会用到Kernel的源文件,亦即在/usr/local/linux目录下的文件,而该目录是需要安装或编译过核心才会存大的目录.
2.make及autoconfig等套件:只有安装了make和autoconfig这两个套件,才能让参数配置文件(通常就是Makefile文件)顺利地被执行.
3.gcc或cc等编译软件:如果没有编译软件,自然无法将源程序代码编译成可执行文件,所以至少要有一种编译器.
4.特别留意安装时的选择工具:

Tarball安装的基本步骤
1。将Tarball在/usr/local/src中解压缩
2。在软件解压缩的路径下建立Makefile参数配置文件
3。以make这个程序并使用该目录下的Makefile作为它的参数配置文件,进行make(编译或其他)动作
4。以make这个程序,并以Makefile参数配置文件依据install项的指定将其安装到正确的路径
通常在每个软件的Tarball中都会附上INSTALL或README这种文件的说明文档,这些说明文档是务必要详细阅读,通常这些文件会记录这个软件的安装要求,软的的工作项目与软件的安装参数设定及技巧等。


Tarball软件安装的指令输入方式
1。./configure:这个步骤就是建立Makefile文件,通常程序开发者会写一支脚本来检查你的Linux系统,相关的套件等,这个步骤相当重要,困为未来你的安装信息都在这一步骤内完成。另外,这个步骤的相关信息应该参考该目录下的README或INSTALL相关的文件。基本上,这个步骤完成之后会建立(或修改)一个Makefile,这就是参数配置文件。
2。make clean:make会读取Makefile中关于clean的工作。这个步骤不一定会有,但最好是有,因为在进行编译的时候,会产生一些*.o文件,例如有个abc.c的源代码,经过编译后会变成abc.o文件,我们称这个文件为目标文件。这些文件如果之前己经过编译并保留下来的话,那么这次再编译的时候就不会编译该文件,但由于我们可能己经修改了部分参数,因此该文件的编译结果事实上应该会有所不同。故为了避免这样的结果,所以通常需要执行这个步骤。
3。make:make会依据Makefile中的预设工作进行编译的行为。编译的工作主要是执行gcc将源代码译为可执行目标文件,但是这些目标文件通常还需要一些函数库之类的链接后才能产生一个完整的执行文件。使用make就是要将源代码编译为可执行文件,而这个可执行文件会放置在当前所在目录下,尚未被安装到预定目录中。
4.make install:通常这是最后的安装步骤,make会依据Makefile文件中关于install的项将上一步骤编译完成的数据安装到预定目录中,就完成安装了。
5。特别注意,上面的步骤是一步一步进行的,其中只要一个步骤无法成功,后续步骤就没有办法进行,因此,要确保每一个步骤都是成功的。



Tarball的移除与升级
Tarball的移除难度跟当初设定参数文件时的安装目录与这个套件本身要求的放置目录有关.通常一个套件在安装时会将它的内容分到四个目录中存放,分别是:etc(代有设定),lib(代表函数),man(代表在线说明文档),bin(代表执行文件).以apache为例,如果在安装时使用默认值,在这些文件相应的会存放在/etc/httpd,/usr/lib,/usr/bin,/usr/share/man中,这时在移除时就有会有困难了.但是如果在安装时指定了路径,如/usr/local/apache,则相应的存放目录为:/usr/local/apache/etc,/usr/local/apache/lib,/usr/local/apache/man,/usr/local/apache/bin.这时在移除时,只要删除/usr/local/apache就可以了.
升级,对于Tarball安装来说就有一定的困难了,以LAMP(Linux+Apache+MySQL+PHP)来说,因为每个套件在安装时都有一定的顺序与程序,因为它们三者之间具有相关性,安装时三者必须同时考虑到它们的函数库与相关的编译参数,如果今天只要升级PHP,有的时候因为只涉及到动态函数库的升级,所以只要升级PHP即可,其他部分可能影响不大.但如果PHP需要重新编译的模块比较多,那么可能会连带地重新编译Apache这个程序.比较麻烦.



选择RPM还是Tarball
1.优先选择RPM
如果版本支持RPM安装并且没有严重的相依属性问题时,选择RPM安装是一个比较好的选择.此外,当一个套件经过大幅修改,通常旧的RPM与新的RPM之间几乎无法完全兼容,升级或移除过程就很麻烦。
2.简易方法
使用Tarball可以自行编译并且安装在不同的路径,只要在启动时启动适当的版本,不同版本的套件可以同时存在于一个系统中,而且可以通过选择启动文件来启动不同的版本。




动手制作RPM
1.修改SRPM的默认设定值,以rp-pppoe-3.5-1.src.RPM为例
#RPM -i rp-pppoe-3.5-1.src.RPM     
#cd /usr/src/RPM/SOURCES  ; ls -l  
#cd ../SPECS  ; vi rp-pppoe.spec   
说明(配置文件内容):
1.整个文件的开头以Summary开始,这部分的配置是最基础的说明内容
2.然后,每个不同的段落之间以%作为开头,例%prep与%install等。
接下来说说几个常见的SRPM配置段落
系统整体信息
.Summary:主要的套件说明;
.Name:套件的名称;
.Version:套件的版本;
.Release:该版本打包的次数,在Mandrake中,会自动帮你设定打包的次数;
.Copyright:套件的授权模式;
.Group:套件的开发团体名称;
.Source:套件的来源;
.Url:源代码的主要官方网站;
.Packager:这个套件是经由谁来打包;
.Vender:开发厂商;
.ExclusiveArch:说明这个套件适合安装的硬件,通常默认为i386.
.Requires:如果这个套件还需要其他套件的支持,那么这里必需写出来,当制成RPM之后,系统会自动检查,这就是相依属性的主要来源;
%description:为套件做简短说明,这个也是必需的。
%prep:这部分的设定在尚未配置或安装之前,是需要编译完成的RPM帮你事先准备的事情,是prepare的简写。其主要的工作事项主要有:
   1.寻找套件需要的目录是否己经存在,用于确认;
   2.事先建立套件所需要的目录,或者事先需要进行的任务;
   3.如果待安装的Linux系统内有安装时可能被覆盖的文件,必需进行备份工作。
%setup:这个段落用于建立在Tarball中说明的那个Makefile文件,所以,当然就是执行./config之类的配置文件。如果要新增自己的参数,可以在这个地方加入你的设定值,如果你的软件本身没有这方面的需要,里面就不需要编写内容了。
%build:build就是建立。这个段落用于描述怎么make编译成可执行程序。
%install:编译(build)完成之后就是安装过程。安装就写在这里,类似Tarball中的make install.
%files:这个套件的文件都需要写到这里来,其中包括目录,所以连同目录请一起写到这个段落。以备查验。
%changelog:主要用于记录这个套件曾经的更新记录。
修改完之后,就将它编译成可以安装的RPM文件。
#RPM -bb rp-pppoe.spec   
#RPM -ba rp-pppoe.spec   
这时系统会这样做:
1.进入BUILD目录,在Mandrake 9.0中是/usr/src/RPM/BUILD,在Red Hat下是/usr/src/redhat/BUILD目录。
2.依照*.spec文件内的Name与Version设定定义工作目录名称。
3.在新建目录中针对Source目录下的源文件,也即*.spec中Source设定的那个文件,以tar进行解压缩。
4.执行%setup工作
5.进行%build及%install的设定与编译
6.最后,将完成打包的文件放置到该放置的地方。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/18616/showart_221543.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP