您的位置:首页 > 运维架构 > Linux

Linux软件安装:RPM、SRPM与YUM功能

2015-08-20 16:52 501 查看

一、软件管理器简介


--包管理模式

·用户使用的系统与软件发行商的一样,发行商就可以在他们的系统上编译好用户需要的软件,然后将编译好的软件发给用户,就可以在用户的系统上直接安装使用,省去了编译的过程;

·包管理模式的安装方式类似于Windows下面的安装,不需要编译;

·发行商即是Linux distribution的发行商或团体组织,这些用户使用它们的Linux distribution;


--软件管理器(或包管理器)

·软件管理器在软件安装的时候会记录一些与安装软件相关的信息,方便以后进行软件的升级与卸载;

·软件管理器类似于Windows下的“添加或删除程序”,或者是360软件管家等;

·在Linux下常见的软件管理器有RPM、dpkg等。



1.Linux界的两大主流:RPM与DPKG


--软件管理机制

·RPM软件管理器对应RPM软件管理机制等,软件管理机制记录安装软件的相关信息,方便以后的升级与卸载操作;

·软件文件属性本身会检测软件属性的依赖问题,软件管理机制不会解决该问题,需要其对应的在线升级机制来解决;

·软件属性依赖的简单例子:安装A软件需要先安装B与C软件;


--在线升级机制

·不同软件管理机制对应不同的在线升级机制,以解决软件属性依赖问题;

·即使是用apt-get来安装软件,实际使用的软件管理机制还是dpkg;


--对应关系

Linux distribution软件管理机制使用命令在线升级机制(命令)

Red Hat/Fedora

CentOS/SuSE

RPMrmp,rpmbuildYUM(yum)
Debian/UbuntuDPKGdpkgAPT(apt-get)

·例如CentOS,使用的软件管理机制为RPM机制,而用来作为在线升级的方式(机制)为yum.



2.RPM与SRPM


--RPM

·RPM是以一种数据库记录的方式将软件安装到Linux系统的一套管理机制;

·RPM包的安装过程图示:

·RPM优点:

a.软件已经编译完成和打包完毕,软件传输与安装方便(不需要重新编译)

b.软件的信息已经记录在Linux主机的RPM软件数据库上,方便查询、升级与卸载

c.RPM包在被安装前,会先检查系统的硬盘容量、操作系统版本等,避免文件被错误安装

·RPM缺点:

a.软件安装的环境必须与打包时的环境需求一致或相当,以下情况不行:

~通常不同distribution所发布的RPM包不能用在其它的distributions上

~相同distribution的不同版本也可能不行,如CentOS 4.x与CentOS 5.x

b.需要满足软件的依赖属性需求

c.卸载时需要谨慎,最底层的软件不可先删除,否则可能造成整个系统的问题


--SRPM:Source RPM

·SRPM是RPM未编译时的文件,包含源代码文件、依赖性软件说明、参数设置文件(configure与makefile);

·使用SRPM,可以通过修改SRPM内的参数设置文件,重新编译生成适合当前Linux环境的RPM文件(SRPM作用);

·使用SRPM,需要Linux主机环境使用的软件管理机制为RPM;

·SRPM的使用步骤:

a.先将该软件以RPM管理的方式编译,SRPM即被编译成RPM文件

b.将编译完成的RPM文件安装到Linux系统中


--对比RPM与SRPM


文件格式文件名格式直接安装与否内含程序类型可否修改参数并编译
RPMxxx.rpm已编译不可
SRPMxxx.src.rpm不可未编译的源代码

·RPM包安装完成后,即完成软件的安装,SRPM包安装完成后就得到软件的源码、makefile、configure等文件。



3.i386、i586、i686、noarch、x86_64


·以软件名rp-rpppoe-3.1-5.i386.rpm为例,各项说明如下:

rp-rpppoe3.15i386rpm
软件名称软件版本信息发布次数适合硬件平台扩展名

·对硬件平台的说明:

a.i386几乎适用所有的x86平台

b.x86_64主要是针对64位的CPU进行优化设置

c.noarch没有任何硬件等级上的限制,一般属于shell script方面的软件

·硬件方面是向下兼容的。



4.RPM属性依赖的解决方式:YUM在线升级


·RPM软件文件属性依赖问题产生的原因:

a.为了重复利用既有的软件功能,很多软件都会以函数库的方式释出部分功能,以方便其他软件的调用应用,例如PAM模块的验证功能

b.为了节省用户的数据量,distributions在发布软件时分为一般使用与开发(development)使用两大类,而默认情况下开发类软件不会被安装(某些软件安装可能需要这些开发类的软件)

·图示YUM在线升级的原理与过程:

YUM服务器

yum客户端

流程


·yum可以分析出软件依赖属性问题,下载所有需要安装的软件;

·下载的软件最终还是需要通过RPM机制进行安装。



二、RPM软件管理程序:rpm


1.RPM默认安装的路径


·软件安装完毕,软件相关信息会被写入以下目录的数据库文件中

[code=as3;toolbar:false">/var/lib/rpm[p][root@xpleaf ~]# rpm -ivh pam-devel-1.1.1-17.el6.x86_64.rpm i:install v:view,显示详细安装信息画面 h:以安装信息栏显示安装进度(显示50个“#”) [root@xpleaf ~]# rpm -ivh pam-devel*.rpm    ===>安装以pam-devel开头的多个RPM包 [root@xpleaf ~]# rpm -ivh http://website.name/path/pkgname.rpm    ===>安装网络上的RPM包[p][root@xpleaf ~]# mount /dev/cdrom /mnt    ===>挂载光盘到/mnt mount: block device /dev/sr0 is write-protected, mounting read-only [root@xpleaf ~]# find /mnt -name "pam-devel*"    ===>查找pam-devel软件 /mnt/Packages/pam-devel-1.1.1-17.el6.i686.rpm /mnt/Packages/pam-devel-1.1.1-17.el6.x86_64.rpm [root@xpleaf ~]# cp -a /mnt/Packages/pam-devel-1.1.1-17.el6.x86_64.rpm /root [root@xpleaf ~]# rpm -ivh pam-devel-1.1.1-17.el6.x86_64.rpm --test    ===>检测依赖软件 Preparing...                ########################################### [100%] [root@xpleaf ~]# rpm -ivh pam-devel-1.1.1-17.el6.x86_64.rpm     ===>安装 Preparing...                ########################################### [100%]    1:pam-devel              ########################################### [100%][p]rpm -Uvh/-Fvh RPM文件名[p]-qp[icdlR]:-qp后面接的所有参数以上面的说明一致,但仅用于找出某个RPM文件内的信息,而非已安装的软件信息[p][root@xpleaf ~]# rpm -ql python /usr/bin/pydoc /usr/bin/python /usr/bin/python2 /usr/bin/python2.6 /usr/share/doc/python-2.6.6 /usr/share/doc/python-2.6.6/LICENSE /usr/share/doc/python-2.6.6/README /usr/share/man/man1/python.1.gz[p][root@xpleaf ~]# rpm -qc logrotate /etc/logrotate.conf /var/lib/logrotate.status[p][root@xpleaf ~]# rpm -qR python /usr/bin/python2.6   libc.so.6()(64bit)   libc.so.6(GLIBC_2.2.5)(64bit)   libdl.so.2()(64bit)   libm.so.6()(64bit)   libpthread.so.0()(64bit)   libpython2.6.so.1.0()(64bit)   libutil.so.1()(64bit)   python-libs(x86-64) = 2.6.6-51.el6 rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PartialHardlinkSets) <= 4.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1 rtld(GNU_HASH)   rpmlib(PayloadIsXz) <= 5.2-1[p][root@xpleaf ~]# rpm -qpR crontabs-1.10-33.el6.noarch.rpm /bin/bash   /etc/cron.d   config(crontabs) = 1.10-33.el6 rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadIsXz) <= 5.2-1[p][root@xpleaf ~]# rpm -e pam-devel[p]--rebuild    对SRPM文件编译,并打包成为RPM包,但不安装 --recompile  对SRPM文件编译,打包成RPM包,并安装[p][root@xpleaf ~]# rpmbuild --rebuild setarch-1.3-1.src.rpm …… + cd /root/rpmbuild/BUILD + rm -rf setarch-1.3 …… + rm -rf /root/rpmbuild/BUILDROOT/setarch-1.3-1.x86_64 …… + rm -rf /root/rpmbuild/BUILDROOT/setarch-1.3-1.x86_64 …… + cd /root/rpmbuild/BUILD + cd setarch-1.3 + rm -rf /root/rpmbuild/BUILDROOT/setarch-1.3-1.x86_64 …… + cd /root/rpmbuild/BUILD + rm -rf setarch-1.3 …… [root@xpleaf rpmbuild]# ls -l BUILD BUILDROOT/ RPMS/ SOURCES/ SPECS/ SRPMS/ BUILD: total 0 BUILDROOT/: total 0 RPMS/: total 4 drwxr-xr-x 2 root root 4096 Aug 17 20:00 x86_64 SOURCES/: total 4 -rw-r--r--. 1 root root 2220 Sep  2  2003 setarch-1.3.tar.gz SPECS/: total 4 -rw-r--r--. 1 root root 1440 Sep  2  2003 setarch.spec SRPMS/: total 0[p]Summary: Rotates, compresses, removes and mails system log files Name: logrotate    ===>RPM名字类似:{Name}-{Version}-{Release}.rpm Version: 3.7.8 Release: 12%{?dist} License: GPL+ URL: https://fedorahosted.org/logrotate/ Group: System Environment/Base Source: https://fedorahosted.org/releases/l/o/logrotate/logrotate-%{version}.tar.gz Patch1: logrotate-3.7.7-curdir2.patch    ===>即是前面在SOURCES中看到的一些补丁文件 Patch2: logrotate-3.7.7-toolarge.patch   ===>意在说明该软件SRPM包中含有的文件 Patch3: logrotate-3.7.8-devnull.patch Patch4: logrotate-3.7.8-man5.patch Patch5: logrotate-3.7.8-missingok.patch Patch6: logrotate-3.7.8-configsize.patch Patch7: logrotate-3.7.8-dont-remove-log.patch Patch8: logrotate-3.7.8-scripts-args.patch Patch9: logrotate-3.7.8-scripts-man.patch Patch10: logrotate-3.7.8-handle-rename-error.patch[p][strong]%prep        ===>预处理,就是上面的patch补丁文件 %setup -q %patch1 -p1 -b .curdir %patch2 -p1 -b .toolarge %patch3 -p1 -b .devnull                       %patch4 -p1 -b .man5  %patch5 -p1 -b .missingok                          %patch6 -b .configsize    %patch7 -b .dont-remove-log  %patch8 -b .scripts-args   %patch9 -b .scripts-man    %patch10 -b .handle-rename-error                            %build     ===>编译                                                                                                              make %{?_smp_mflags} RPM_OPT_FLAGS="$RPM_OPT_FLAGS" WITH_SELINUX=yes                                                                           %install     ===>安装                                                                     rm -rf $RPM_BUILD_ROOT                           make PREFIX=$RPM_BUILD_ROOT MANDIR=%{_mandir} install                           mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d                           mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/cron.daily                            mkdir -p $RPM_BUILD_ROOT/%{_localstatedir}/lib                                                                       install -p -m 644 examples/logrotate-default $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.conf                           install -p -m 755 examples/logrotate.cron $RPM_BUILD_ROOT/%{_sysconfdir}/cron.daily/logrotate                        touch $RPM_BUILD_ROOT/%{_localstatedir}/lib/logrotate.status                                                                                                                                                                              %clean     ===>清理删除临时文件                           rm -rf $RPM_BUILD_ROOT[p] ……  Tue Jun 15 2010 Jan Kaluza <jkaluza@redhat.com> 3.7.8-9 - fix #604073 - do not remove log if there is an error in   rotate process * Fri Jun 11 2010 Jan Kaluza <jkaluza@redhat.com> 3.7.8-8 - fix #602654 - fix integer overflow in size and minsize * Tue Apr 06 2010 Daniel Novotny <dnovotny@redhat.com> 3.7.8-7 - fix #578116 - missingok problem with globs ……[p][root@xpleaf ~]# cd rpmbuild/ [root@xpleaf rpmbuild]# ll total 8 drwxr-xr-x 2 root root 4096 Aug 17 22:02 SOURCES drwxr-xr-x 2 root root 4096 Aug 17 22:02 SPECS [root@xpleaf rpmbuild]# cd SPECS/ [root@xpleaf SPECS]# ll total 4 -rw-r--r--. 1 root root 1440 Sep  2  2003 setarch.spec [root@xpleaf SPECS]# rpmbuild -ba setarch.spec  …… [root@xpleaf rpmbuild]# find ./ -name "*.rpm" ./RPMS/x86_64/setarch-1.3-1.x86_64.rpm ./RPMS/x86_64/setarch-debuginfo-1.3-1.x86_64.rpm ./SRPMS/setarch-1.3-1.src.rpm[p]-y:响应安装过程中的提示输入 --installroot=/some/path:把软件安装在/some/path中[p][root@xpleaf ~]# yum search raid …… dmraid.i686 : dmraid (Device-mapper RAID tool and library) dmraid.x86_64 : dmraid (Device-mapper RAID tool and library) dmraid-devel.x86_64 : Development libraries and headers for dmraid. dmraid-events-logwatch.x86_64 : dmraid logwatch-based email reporting dmraid-events.x86_64 : dmevent_tool (Device-mapper event tool) and DSO firstaidkit-plugin-mdadm-conf.noarch : Firstaidkit plugin to diagnose software raid                                      : configuration file mdadm.x86_64 : The mdadm program controls Linux md devices (software RAID arrays)   Name and summary matches only, use "search all" for everything.[p][root@xpleaf ~]# yum list Installed Packages    ===>已经安装的软件 ConsoleKit.x86_64                 0.4.1-3.el6           @anaconda-CentOS-201311272149.x86_64/6.5 ConsoleKit-libs.x86_64            0.4.1-3.el6           @anaconda-CentOS-201311272149.x86_64/6.5 …… Available Packages    ===>还可以安装的软件 389-ds-base.x86_64                1.2.11.15-60.el6      base                                     389-ds-base-devel.i686            1.2.11.15-60.el6      base                                     389-ds-base-devel.x86_64          1.2.11.15-60.el6      base ……[p][root@xpleaf ~]# yum provides passwd passwd-0.77-4.el6_2.2.x86_64 : An utility for setting or changing passwords using PAM Repo        : base Matched from: passwd-0.77-4.el6_2.2.x86_64 : An utility for setting or changing passwords using PAM Repo        : installed Matched from: Other       : Provides-match: passwd[p]yum remove 软件名称[p]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: