一、软件管理器简介
--包管理模式
·用户使用的系统与软件发行商的一样,发行商就可以在他们的系统上编译好用户需要的软件,然后将编译好的软件发给用户,就可以在用户的系统上直接安装使用,省去了编译的过程;
·包管理模式的安装方式类似于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 | RPM | rmp,rpmbuild | YUM(yum) |
Debian/Ubuntu | DPKG | dpkg | APT(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
文件格式 | 文件名格式 | 直接安装与否 | 内含程序类型 | 可否修改参数并编译 |
RPM | xxx.rpm | 可 | 已编译 | 不可 |
SRPM | xxx.src.rpm | 不可 | 未编译的源代码 | 可 |
·RPM包安装完成后,即完成软件的安装,SRPM包安装完成后就得到软件的源码、makefile、configure等文件。
3.i386、i586、i686、noarch、x86_64
·以软件名rp-rpppoe-3.1-5.i386.rpm为例,各项说明如下:
rp-rpppoe | 3.1 | 5 | i386 | rpm |
软件名称 | 软件版本信息 | 发布次数 | 适合硬件平台 | 扩展名 |
·对硬件平台的说明:
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]