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

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
简介:

一、软件管理器简介


--包管理模式

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

·包管理模式的安装方式类似于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包的安装过程图示:

wKiom1XV8Mvh0_QIAAIyJ0fFztM488.jpg

·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服务器

wKiom1XWjIPw9R_MAAF0phDvvmk070.jpg

yum客户端

wKioL1XWjt-xWOuOAAE1dv6Q2M8845.jpg

流程

wKioL1XWkJ2S0OHvAAJLZxJAmM4006.jpg


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

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





二、RPM软件管理程序:rpm


1.RPM默认安装的路径


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

1
/ var /lib/rpm

·与RPM默认安装相关的目录

1
2
3
4
/etc                设置文件放置目录
/usr/bin            一些程序使用的动态函数库
/usr/share/doc      一些基本软件的使用手册与帮助文档
/usr/share/man      一引起man page文件




2.RPM安装(install)


·常用安装参数-ivh

1
2
3
4
5
6
7
8
[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包

·其它安装参数

1
2
3
4
5
--replacefiles    覆盖安装
--replacepkgs     重复安装
--force           强制安装,上面两个参数的结合
--test            检测需要安装的软件依赖性问题
[root@xpleaf ~]# rpm -ivh pam-devel- 1.1 . 1 - 17 .el6.x86_64.rpm --test

·演示从CentOS 6.5光盘中安装pam-devel:

1
2
3
4
5
6
7
8
9
10
11
[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 %]

·如果安装的软件已经存在,会有下面的提示:

1
2
3
[root@xpleaf ~]# rpm -ivh pam-devel- 1.1 . 1 - 17 .el6.x86_64.rpm 
Preparing...                ########################################### [ 100 %]
         package  pam-devel- 1.1 . 1 - 17 .el6.x86_64  is  already installed




3.RPM升级与更新(upgrade/freshen)


·参数对比:

参数 区别
-Uvh 如果没有安装该软件,则直接安装;如果安装的是旧版,则升级
-Fvh 如果没有安装该软件,不予以安装;如果安装的是旧版,则升级

·命令执行:

1
rpm -Uvh/-Fvh RPM文件名




4.RPM查询(query)


·执行RPM查询,如果软件已经安装,查询的是/var/lib/rpm这个目录下的数据库文件;

·执行RPM查询,如果软件没有安装,查询的是该软件安装后要放入RPM软件数据库(即上面的目录中)中的软件信息;


·参数语法简要说明:

1
2
3
4
rpm -qa                              ===>查询本机已安装的软件
rpm -q[ilcdR] 已安装的软件名称       ===>查询已安装软件的特定信息
rpm -qf 存在于系统上的某个文件名     ===>查询文件的所属安装软件
rpm -qp[ilcdR] 未安装的RPM包完整名称 ===>查询RMP包的特定信息(与上面类似,只是安装与未安装)

·参数详细说明:

查询已安装的软件信息

参数 说明
-q

仅查询,后面接的软件名称是否有安装

-qa
列出所有的已经安装在本机 Linux 系统上面的所有软件名称
-qi
列出该软件的详绅信息 (information),包含开发商、版本与说明等
-ql
列出该软件所有的文件与目录所在完整文件名(list)
-qc
列出该软件的所有配置文件 (找出在/etc/下面的文件名而已)
-qd
列出该软件的所有帮助文件 (找出与man有关的文件而已)
-qR
列出与该软件有关的依赖软件所含的文件(Required 的意思)
-qf
由后面接的文件名找出该文件属于哪一个已安装的软件

查询RPM文件内含有的信息

1
-qp[icdlR]:-qp后面接的所有参数以上面的说明一致,但仅用于找出某个RPM文件内的信息,而非已安装的软件信息


·RPM查询实战演示

a.查询是否有安装python软件

1
2
[root@xpleaf ~]# rpm -q python
python- 2.6 . 6 - 51 .el6.x86_64

b.查询python软件所提供的所有目录与文件

1
2
3
4
5
6
7
8
9
[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

c.查询python软件的详细信息说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@xpleaf ~]# rpm -qi python
Name        : python                       Relocations: (not relocatable)
Version     :  2.6 . 6                              Vendor: CentOS
Release     :  51 .el6                        Build  Date : Fri  22  Nov  2013  08 : 18 : 53  PM CST
Install  Date : Mon  11  May  2015  10 : 21 : 27  PM CST      Build Host: c6b8.bsys.dev.centos.org
Group       : Development/Languages         Source RPM: python- 2.6 . 6 - 51 .el6.src.rpm
Size        :  79603                             License: Python
Signature   : RSA/SHA1, Mon  25  Nov  2013  03 : 33 : 16  AM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http: //bugs.centos.org>
URL         : http: //www.python.org/
Summary     : An interpreted, interactive, object-oriented programming language
Description :
Python  is  an interpreted, interactive, object-oriented programming
language often compared to Tcl, Perl, Scheme or Java. Python includes
modules, classes, exceptions, very high level  dynamic  data types and
dynamic  typing. Python supports interfaces to many system calls and
libraries,  as  well  as  to  var ious windowing systems (X11, Motif, Tk,
Mac and MFC).
 
Programmers can write  new  built- in  modules  for  Python  in  C or C++.
Python can be used  as  an extension language  for  applications that need
a programmable  interface .
 
Note that documentation  for  Python  is  provided  in  the python-docs
package .
 
This  package  provides the  "python"  executable; most of the actual
implementation  is  within the  "python-libs"  package .

d.查询logrotate软件的配置文件

1
2
3
[root@xpleaf ~]# rpm -qc logrotate
/etc/logrotate.conf
/ var /lib/logrotate.status

e.查询logrotate软件的帮助文件

1
2
3
4
5
[root@xpleaf ~]# rpm -qd logrotate
/usr/share/doc/logrotate- 3.7 . 8 /CHANGES
/usr/share/doc/logrotate- 3.7 . 8 /COPYING
/usr/share/man/man5/logrotate.conf. 5 .gz
/usr/share/man/man8/logrotate. 8 .gz

f.查询python软件的依赖软件所含的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[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

g.由f,查询/usr/bin/python2.6是哪个软件提供的

1
2
[root@xpleaf ~]# rpm -qf /usr/bin/python2. 6
python- 2.6 . 6 - 51 .el6.x86_64

h.查询crontabs-1.10-33.el6.noarch.rpm包的依赖文件

1
2
3
4
5
6
7
8
[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

i.查询系统当中以c开头的软件有几个

1
2
[root@xpleaf ~]# rpm -qa | grep ^c | wc -l
52




5.RPM卸载与RPM数据库重建


·RPM卸载软件,要先把依赖该软件的软件删除,否则会出现问题;

·即卸载的原则为:从上到下;


·卸载命令

1
[root@xpleaf ~]# rpm -e pam-devel

·如果执行的操作导致RPM数据库/var/lib/rpm内的文件损坏,可以使用下面的命令

1
[root@xpleaf ~]# rpm --rebuilddb





三、SRPM的使用:rpmbuild


1.默认值安装SRPM文件


·SRPM主要参数:

1
2
--rebuild    对SRPM文件编译,并打包成为RPM包,但不安装
--recompile  对SRPM文件编译,打包成RPM包,并安装




2.SRPM使用的路径


·在CentOS 6.5中,默认没有SRPM的路径,解压缩一个SRPM包后才会在当前目录下创建rpmbuild目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@xpleaf ~]# rpmbuild --rebuild setarch- 1.3 - 1 .src.rpm  ===>使用--rebuild参数制作RPM包              
Installing setarch- 1.3 - 1 .src.rpm
……省略输出
+ exit  0
[root@xpleaf ~]# ls -l rpmbuild/ 
total  24
drwxr-xr-x  2  root root  4096  Aug  17  20 : 08  BUILD
drwxr-xr-x  2  root root  4096  Aug  17  20 : 08  BUILDROOT
drwxr-xr-x  3  root root  4096  Aug  17  20 : 08  RPMS
drwxr-xr-x  2  root root  4096  Aug  17  20 : 08  SOURCES
drwxr-xr-x  2  root root  4096  Aug  17  20 : 08  SPECS
drwxr-xr-x  2  root root  4096  Aug  17  20 : 08  SRPMS
===>上面这些目录即是SRPM使用的路径
[root@xpleaf ~]# cd rpmbuild/RPMS/x86_64/    ===>RPM包放在这里
[root@xpleaf x86_64]# ll
total  12
-rw-r--r--  1  root root  6704  Aug  17  20 : 08  setarch- 1.3 - 1 .x86_64.rpm
-rw-r--r--  1  root root  1912  Aug  17  20 : 08  setarch-debuginfo- 1.3 - 1 .x86_64.rpm

·使用--rebuild参数,只会创建RPM包,其余的临时文件在RPM包创建后即会被删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[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

·重要目录说明

目录 说明
SPECS       放置软件的设置文件,如软件的信息参数、设置项目
SOURCES       放置软件的源文件(*.tar.gz)及config设置文件
BUILD/BUILDROOT       放置编译过程中产生的临时文件
RPMS       编译完成后,放置RPM包。下面会有子目录如x86_64、i386等
SRPM       放置自己制作的SRPM包




3.设置文件的主要内容(*.spec)



·使用-i参数解压缩SRPM包(如果是RPM包,则直接安装了):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@xpleaf ~]# rpm -i logrotate- 3.7 . 8 - 12 .el6.src.rpm 
……
[root@xpleaf ~]# cd rpmbuild/
[root@xpleaf rpmbuild]# ll
total  8
drwxr-xr-x  2  root root  4096  Aug  17  20 : 35  SOURCES
drwxr-xr-x  2  root root  4096  Aug  17  20 : 35  SPECS
[root@xpleaf rpmbuild]# find ./ -type f
./SPECS/logrotate.spec    ===>设置文件
./SOURCES/logrotate- 3.7 . 8 -man5.patch    ===>.patch的即是一些补丁文件
./SOURCES/logrotate- 3.7 . 8 -devnull.patch
./SOURCES/logrotate- 3.7 . 8 -configsize.patch
./SOURCES/logrotate- 3.7 . 7 -toolarge.patch
./SOURCES/logrotate- 3.7 . 8 .tar.gz    ===>源代码文件压缩包
./SOURCES/logrotate- 3.7 . 8 -dont-remove-log.patch
./SOURCES/logrotate- 3.7 . 8 -handle-rename-error.patch
./SOURCES/logrotate- 3.7 . 8 -scripts-man.patch
./SOURCES/logrotate- 3.7 . 8 -missingok.patch
./SOURCES/logrotate- 3.7 . 8 -scripts-args.patch
./SOURCES/logrotate- 3.7 . 7 -curdir2.patch
===>如果还有其它文件,则可能是一些脚本文件

·直接对SRPM包解压缩,得到的内容是:

a.重要的是源代码文件(*.tar.gz)与设置文件(*.spec)

b.可能还有一些脚本方面的文件

c.因为只产生上面这些文件,在CentOS 6.5中,只会创建rpmbuild下的SOURCES与SPECS目录

d.因为不涉及编译过程,所以不会有临时文件的产生


·spec文件的主要内容介绍

a.spec第一部分内容:软件基本信息——rpm -qi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

b.spec第二部分:依赖属性需求设置——rpm -qR

1
2
3
4
5
6
7
8
9
10
11
12
13
Requires: coreutils >=  5.92  libsepol libselinux popt    ===>需要的软件,即依赖软件
BuildRequires: libselinux-devel popt-devel        ===>编译时需求的工具软件
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)===>编译时临时文件存放的目录
%description    ===>软件描述信息
The logrotate utility  is  designed to simplify the administration of
log files on a system which generates a lot of log files.  Logrotate
allows  for  the automatic rotation compression, removal and mailing of
log files.  Logrotate can be  set  to handle a log file daily, weekly,
monthly or when the log file gets to a certain size.  Normally,
logrotate runs  as  a daily cron job.
 
Install the logrotate  package  if  you need a utility to deal  with  the
log files on your system.

c.spec第三部分:编译前的预处理以及编译过程中所需要进行的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
%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

d.spec第四部分:软件发布的文件——rpm -qcf

1
2
3
4
5
6
7
8
9
10
%files                                                                                                              
%defattr(-,root,root)                                                                                               
%doc CHANGES COPYING                                                                                                
%attr( 0755 , root, root) %{_sbindir}/logrotate                                                                       
%attr( 0644 , root, root) %{_mandir}/man8/logrotate. 8 *                                                                
%attr( 0644 , root, root) %{_mandir}/man5/logrotate.conf. 5 *                                                           
%attr( 0755 , root, root) %{_sysconfdir}/cron.daily/logrotate                                                         
%attr( 0644 , root, root) %config(noreplace) %{_sysconfdir}/logrotate.conf                                            
%attr( 0755 , root, root) %dir %{_sysconfdir}/logrotate.d                                                             
%attr( 0644 , root, root) %verify(not size md5 mtime) %config(noreplace) %{_localstatedir}/lib/logrotate.status

e.第五部分:软件更改历史记录

1
2
3
4
5
6
7
8
9
10
11
  ……
  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
……




4.SRPM的编译命令


1
2
[root@xpleaf SPECS]# rpmbuild -ba setarch.spec     ===>编译并同时生成RPM与SRPM文件
[root@xpleaf SPECS]# rpmbuild -bb setarch.spec     ===>编译只生成RPM文件


·编译演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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





四、YUM在线升级机制


·每个yum server可能都会提供不同的软件功能,每一种功能即是前面所说的“容器”;


1.利用yum进行查询、安装升级与删除功能


--查询功能:yum [list|info|search|provieds]


·查询语法

1
yum [option] [查询项目] [相关参数]

a.[option]

1
2
-y:响应安装过程中的提示输入
--installroot=/some/path:把软件安装在/some/path中

b.[查询项目]、[相关参数]

1
2
3
4
search:搜索软件相关信息,如名称、描述
list:列出yum管理的所有软件(包括安装与未安装的),rpm -qa列出的是本地已安装的
info:查询软件的相关系统
provides:由文件去找出软件


·查询实例

a.查询与raid名称相关的软件

1
2
3
4
5
6
7
8
9
10
11
12
[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.

b.查询上面mdadm软件的相关信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@xpleaf ~]# yum info mdadm
……
Installed Packages    ===>已经安装的软件版本
Name        : mdadm
Arch        : x86_64
Version     :  3.2 . 6
Release     :  7 .el6
Size        :  847  k
Repo        : installed
From repo   : anaconda-CentOS- 201311272149 .x86_64
Summary     : The mdadm program controls Linux md devices (software RAID arrays)
URL         : http: //www.kernel.org/pub/linux/utils/raid/mdadm/
License     : GPLv2+
Description : The mdadm program  is  used to create, manage, and monitor Linux MD (software
             : RAID) devices.  As such, it provides similar functionality to the raidtools
             package .  However, mdadm  is  a single program, and it can perform
             : almost all functions without a configuration file, though a configuration
             : file can be used to help  with  some common tasks.
 
Available Packages    ===>还可以安装的软件版本
Name        : mdadm
Arch        : x86_64
……

c.列出yum服务器上面提供的软件列表

1
2
3
4
5
6
7
8
9
10
[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
……

d.列出本机可升级的软件

1
2
3
4
5
6
7
[root@xpleaf ~]# yum list updates
Updated Packages
abrt.x86_64                                    2.0 . 8 - 34 .el6.centos                        base   
abrt-addon-ccpp.x86_64                         2.0 . 8 - 34 .el6.centos                        base   
abrt-addon-kerneloops.x86_64                   2.0 . 8 - 34 .el6.centos                        base   
abrt-addon-python.x86_64                       2.0 . 8 - 34 .el6.centos                        base 
……

e.查询提供passwd这个文件的软件

1
2
3
4
5
6
7
8
[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


--安装、升级

1
2
yum install 安装软件名称
yum update  升级软件名称



--删除

1
yum remove 软件名称

·一般不建议使用yum来卸载软件,因为会把相关依赖的包也删除




2.yum源的配置


·可以查看另一篇博客文件

·更改源后需要运行以下两个命令:

1
2
yum clean all    ===>删除已下载过的所有容器的相关数据(含软件本身与列表)
yum makecache    ===>生成缓存




3.yum的软件组功能


·常用参数:

1
2
3
4
grouplist:列出所有的组列表(软件组),包括安装和未安装的,如Development Tools
groupinfo:后面接软件组名称,可以了解软件组内的软件名称
groupinstall:后面接软件组,可以安装一整组软件组
groupremove:删除某个软件组

相关文章
|
4月前
|
安全 数据挖掘 Linux
Linux命令rpm深度解析
`rpm`是Linux下的软件包管理器,用于安装、升级、卸载和查询`.rpm`包,常见于Red Hat系Linux。它管理依赖、维护软件信息数据库,支持版本控制和安全验证。常用命令如`-i`安装,`-U`升级,`-e`卸载,`-q`查询。安装时用`-v`和`-h`可查看详细信息和进度。注意依赖关系、权限和签名验证,最佳实践包括使用仓库、定期更新和备份数据。
|
12月前
|
Linux
Linux命令(13)之rpm
Linux命令(13)之rpm
157 1
|
4月前
|
Ubuntu Linux
Linux软件安装-Linux系统靠yum命令安装软件,yum命令是一个RPM包软件管理器,用于自动化安装配置Linux软件,.rpm是Linux包下的软件,yum install下载 wget re
Linux软件安装-Linux系统靠yum命令安装软件,yum命令是一个RPM包软件管理器,用于自动化安装配置Linux软件,.rpm是Linux包下的软件,yum install下载 wget re
|
Linux
【Linux】CentOS7 alien命令 转化deb 与 rpm的相互转化
-d, --to-deb Make debian packages. This is the default. -r, --to-rpm Make rpm packages.
2063 0
|
16天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
116 5
|
16天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
51 4
|
3天前
|
缓存 监控 Linux
|
6天前
|
Linux Shell 数据安全/隐私保护