rpm与yum

来源:互联网 发布:北京sem优化师 编辑:程序博客网 时间:2024/06/04 20:49

RPM软件包管理器
程序包管理器
作用
将编译好的应用程序的各组文件打包成一个或多个程序包文件,便于实现安装、卸载、查询、升级、校验等管理工作
由两部分组成:
1、程序的组成清单:(每个程序包独有)
文件清单
安装或卸载是运行的脚本
2、数据库(公共的)
程序包名称及版本
依赖关系
功能说明
安装生成的各文件的文件路径及校验码信息

rpm包的命名方式:
1、源代码的命名方式:
name-VERSION.ta.gz VERSION( 版本号):major.minor.release
主(大)- 次(小)-发(bug)
2、rpm包的命名方式:
name-VERSION-release.arch.rpm
release.arch :这里的relaese是rpm包的realease
release: release.OS(系统名称及版本信息)
arch:平台
32位 x86 : i386 i586 i586 i686
64位 x86_64 :x64 x86_64 amd64

zip-3.0-1.el6.x86_64.rpm el*: 表示这个软件包版本,
例如el6 表示发行商版本是REHL 6.x / CentOS 6.x
zlib-1.2.3-29.el6.i686.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zlib-devel-1.2.3-29.el6.i686.rpm devel表示这个包是软件包的开发包
zlib-devel-1.2.3-29.el6.x86_64.rpm
yum-plugin-aliases-1.1.30-14.el6.noarch.rpm noarch表示这样的软件包在任何硬件平台上都可运行

挂cdrom 到mnt — cd mnt –> cd packages

testapp:拆包
testapp-VERSION-ARCH.rpm: 主包
testapp-devel-VERSION-ARCH.rpm :支包
testapp-testing-VERSION-ARCH.rpm
rpm包有主包和支包,主包提供软件的主要功能,而支包提供扩展功能

查看二进制程序所依赖的库文件
ldd /PATH/TO/BINARY_FILE
[root@www Packages]# ldd /bin/ls
linux-vdso.so.1 => (0x00007fff535ff000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003876a00000)
librt.so.1 => /lib64/librt.so.1 (0x00000036d4600000)
libcap.so.2 => /lib64/libcap.so.2 (0x00000036d6a00000)
libacl.so.1 => /lib64/libacl.so.1 (0x00000036d7600000)
libc.so.6 => /lib64/libc.so.6 (0x00000036d3e00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000038db200000)
/lib64/ld-linux-x86-64.so.2 (0x00000036d3600000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000036d4200000)
libattr.so.1 => /lib64/libattr.so.1 (0x00000036d6200000)

查看及管理本机装载的库文件:
ldconfig
/sbin/ldconfig -p :显示本机中已缓存的所有可用库文件及文件路径映射关系
t@www Packages]# ldconfig -p
[root@www Packages]# /sbin/ldconfig -p
配置文件:/etc/ld.so.conf , /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
这个程序也可以配置让系统重新生成缓存,重新生成缓存时通过读取配置文件

CentOS上rpm命令管理程序包
安装、卸载、升级、查询、校验
安装:
rpm {-i|–install} [install-options] PACKAGE_FILE
-v: 详细
-vv:更详细
-h:以#显示程序包管理进度,每个#默认为2%
一般会这样使用: rpm -vih PACKAGE_FILE
[root@localhost Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm
[install-options]
–test: 测试安装,但不真正执行安装过程: dry run 模式
–nodeps:忽略依赖关系:
–replacepkgs : 重新安装
–nosignature:不检查来源合法性
–nodegest:不检查包完整性

–noscipts:不执行程序包中的脚本片段;
%pre:安装前脚本 : –nopre
%post:安装后脚本 –nopost
%preun:卸载前脚本 –nopreun
%postun:卸载后脚本 –nopostun

升级:
Rpm {-U|–upgrade} [install-options] PACKAGE_FILE
Rpm {-F|–freshen} [install-options] PACKAGE_FILE
-U:存在旧程序包,则升级,不存在旧程序包,则安装
-F:存在旧程序包,升级,不存在,啥都不干
–downpackage:降级
–force:强制升级

注意:
1、不要对内核进行升级,内核支持多版本并存,直接安装新版本就行
2、如果原安装包的配置文件在安装后曾被修改,那么新安装包提供的的同一个配置文件不会直接覆盖原安装包的配置文件(因为原安装包的配置文件对我们来说可能仍然是有用的),而是将新的配置文件重新命名(FILENAME.rpmnew)后保留

查询
rpm {-q|–query} select-options [query-options]
-f:查询指定文件是由那个程序包安装生成的
[root@localhost Packages]# rpm -qf /etc/issue
centos-release-6-5.el6.centos.11.1.x86_64

 -p /PATH/TO/PACKAGE_FILE:针对未安装的程序包文件所做出的查询操作

[root@localhost Packages]# rpm -ql -p php-common-5.3.3-26.el6.x86_64.rpm

–whatprovides CAPABILITY: 查询指定的CAPABILITY由哪个包所提供
–whatrequires CAPABILITY: 查询指定的CAPABILITY被哪个包所依赖
[root@localhost Packages]# rpm -q –whatrequires /etc/fsttab
[query-options]:
–changelog : 查询rpm包的修改日志
root@localhost Packages]# rpm -q –changelog zsh
-c :查询配置文件
[root@localhost Packages]# rpm -q -c zsh
-d:查询程序的文档
-i:information
-l:查看指定程序包安装后生成的所有文件
–scripts:程序包自带的脚本片段
-R:查询指定程序包所依赖的CAPABILITY
–provides:列出指定程序包所提供-的CAPABILITY
用法:
-qi PACKAGE ,-qf FILE , -qc PACKAGE , -ql PACKAGE , -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE,…
-qa

卸载
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts]
[–notriggers] [–test] PACKAGE_NAME ..
[root@localhost ~]# rpm -e zsh

校验
rpm {-V|–verify} select-options [verify-options]

(1)[root@www ~]# rpm -ql zsh 查询zsh程序包安装后生成的所有文件
(2)[root@www ~]# file /usr/share/zsh/4.3.10/functions/zmv 查看文件类型
(3)[root@www ~]# vim /usr/share/zsh/4.3.10/functions/zmv 编辑此文件
(4) [root@www ~]# rpm -V zsh 再次校验时会发现文件大小,校验码,时间戳发生改变
S.5….T. /usr/share/zsh/4.3.10/functions/zmv

包来源合法性验证及完整性验证:
完整性验证:
来源合法性:
公钥加密:
对称加密:加密、解密使用同一密钥
非对称加密:密钥是成对的
public key:公钥,可以公开
secret key:私钥,不能公开
导入所需要公钥:
rpm –import /PATH/FROM/GPG-PUKEY-FILE
CentOS 6: RPM-GPG-KEY-CentOS-6
[root@localhost cdrom]# ls
CentOS_BuildTag isolinux RPM-GPG-KEY-CentOS-Debug-6
EFI Packages RPM-GPG-KEY-CentOS-Security-6
EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
GPL repodata TRANS.TBL
images RPM-GPG-KEY-CentOS-6
[root@localhost cdrom]# rpm –import RPM-GPG-KEY-CentOS-6
[root@localhost Packages]# rpm -ivh –replacepkgs zsh-4.3.10-7.el6.x86_64.rpm
Preparing… ########################################### [100%]
1:zsh ########################################### [100%

注意:此时装就没有警告了

数据库重建
rpm {–initdb|–rebuilddb}
initdb:初始化
如果事先不存在数据在新建之,否则,不进行任何操作

   rebuilddb:重建      无论当前存在与否,直接重新创建数据库

关于YUM

1.yum并不是取代rpm,是一个基于RPM 包管理的字符前端软件,解决了软件包的依赖关系。

2.配置文件:用于指向我们所用到的库
(1)mian: 位于/etc/yum.conf中,为所有仓库提供公共配置(全局配置) 只有1个,一般不动
(2)repository: 位于/etc/yum.repos.d/*.repo 为仓库的指向提供配置信息 (具体配置)
root@localhost yum.repos.d]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/basearch/releasever
yum更新软件时的缓存目录,默认设置为/var/cache/yum
keepcache=0
RPM缓存的程序包安装完成后是否保存,0表示不保存,1表示保存
debuglevel=2#debuglevel:Debug(程序除错)信息输出等级,范围为0-10,缺省为2
logfile=/var/log/yum.log
存放系统更新软件的日志的目录。用户可以到/var/log/yum.log文件去查询自己在过去的日子里都做了哪些更新。
exactarch=1
设置为1,则yum只会安装和系统架构匹配的软件包,例如,yum不会将i686的软件包安装在适合i386的系统中。默认为1
obsoletes=1
gpgcheck=1
有1和0两个选择,分别代表是否是否进行gpg校验。这个选项如果设置在[main]部分,则对每个repository都有效。默认值为0.
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

仓库指向的定义:
[repositoryID]
name=some name for this repository 两个仓库不能同名
baseurl=url://path/to/repository/
enabled={1|0} 是否启用此仓库,默认为启用
gpgcheck={1|0}是否检验其完整性及来源合法性
gpgkey=URL :指明密钥文件
enablegroups={1|0}是否支持使用组来批量管理程序包
failovermethod={roundrobin|priority}:多个url可供选择时,yum选择的次序,随机|优先级,默认为随机
cost= 开销
默认为1000
等号两端无空格

备注:默认各仓库的用法
bash库:通常是系统发行版所提供的程序包:光盘
updates库:存放更新包
Extra库:存放额外包
epel:epel库文件

前提:主机联网,光盘已挂载
yum命令的用法 :
yum [options] [command] [package …]
显示仓库列表: repolist [all|enabled|disabled]
所有 启用 禁用
list :显示程序包
yum list [all | glob_exp1] [glob_exp2] […]
[glob_exp1]:通配条件
[root@localhost yum.repos.d]# yum list ‘*.noarch’
yum list [availiable|installed|updates]
availiable:可用的,仓库中有,但是尚未安装

安装程序包
* install package1 [package2] […]
[root@localhost ~]# yum install gcc
升级程序包
update [package1] [package2] […]
Downgrade package1 [pachage2] […] (降级)
检查可用升级
check-update
卸载程序包
remove | erase package1 [package2] […]
卸载某程序包,它会把依赖此程序包的程序包也卸载
查看包的information:
Info […]
[root@www ~]# yum info gcc
查看指定的特性(可以是某文件)是由那个程序包所提供
provides | whatprovides feature1 [feature2] […]
[root@www ~]# yum provides /bin/ls /bin/cat
清理本地缓存:
clean [packages| metadata | expire-cache | rpmdb | plugins | all]
程序包会自动删除,但元数据不会,如果想删除元数据,则使用clean
构建缓存:
makecache
搜索
Search string1 [string2] […]
搜索程序包名及summary信息
[root@www ~]# yum search bash
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
============================== N/S Matched: bash ==============================
bash-doc.x86_64 : Documentation files for bash
bash.x86_64 : The GNU Bourne Again shell

Name and summary matches only, use “search all” for everything.

查看指定包所依赖的capabilities:
deplist [package1] [pachage2] […]
[root@www ~]# yum deplist gcc
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Finding dependencies:
package: gcc.x86_64 4.4.7-4.el6
dependency: libgcc >= 4.4.7-4.el6
provider: libgcc.i686 4.4.7-4.el6
provider: libgcc.x86_64 4.4.7-4.el6
dependency: /sbin/install-info
provider: info.x86_64 4.13a-8.el6
dependency: libgomp.so.1()(64bit)
查看yum事务历史
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
[root@www ~]# yum history
注意:查询不会产生事务,只有安装,卸载等操作才会产生事务
安装及升级本地程序包 不太用了
* localinstall rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only - use update)
与包组相关的命令
* groupinstall group1 [group2] […]
* groupupdate group1 [group2] […]
* grouplist [hidden] [groupwildcard] […]
* groupremove group1 [group2] […]
* groupinfo group1 […]
[root@www ~]# yum groupinfo ’ 性能工具’
Loaded plugins: fastestmirror, security
Setting up Group Process
Loading mirror speeds from cached hostfile

Group: 性能工具
Description: 诊断系统和程序级别性能问题的工具。
Mandatory Packages: 强制必须安装的包
blktrace
sysstat
Default Packages: 默认安装的包
dstat
iotop
latencytop
latencytop-tui
oprofile
perf
powertop
seekwatcher
Optional Packages: 可选安装的包,被依赖才安装
oprofile-jit
papi
sdparm
sg3_utils
tuned
tuned-utils
安装某包组:
[root@localhost yum.repos.d]# yum grouplist
[root@localhost yum.repos.d]# mount /dev/cdrom /mnt
[root@localhost yum.repos.d]# yum groupinstall ‘附加开发’

注意
yum源仓库指向可以升级但不能降级
7.0可以指向7.1的源
7.1不能指向7.0的源

如何使用光盘当做本地yum仓库
(1)挂载光盘至某目录, 例如 /mnt
# mount -r -t iso9660 /dev/cdrom /media/cdrom
(2)创建配置文件
[CentoOS7]
name=
baseurl=
gpgcheck=
enabled=
gpgkey=
yum的命令行选项:
–nogpgcheck:禁止进行gpg check;
-y:自动回答为”yes”
-q: 静默模式
-disablerepo=repoidglob: 临时禁用此处指定的repo
–enablerepo=repoidglob:临时启用此处的repo
–noplugins:禁用所有插件
yum 的repo配置文件中可用的变量:
releasever:OSarch: 平台
basearch:YUM0-$YUM9

http://mirrors.magedu.com/centos/releasever/basearch/os

创建yum仓库
createrepo [options]
一般一些选项可以省略
程序包的编译安装:
testapp-VERSION-release.src.rpm–> 安装后,使用rpmbuild命令制作成二进制格式的rpm包
源代码 – 预处理 – -编译(gcc)–汇编(汇编器)-链接(链接器)– 执行

源代码组织格式:
多文件: 文件中的代码之间,很可能存在跨文件依赖关系
C、C++: make
java :maven
make ———> 源代码
配置文件:makefile <—– Makefile.in 模板 <——-configure 传递选项

编译安装三步骤:
./configure :( 1)传递通过选项参数 ,指定启用路径、安装路径等.
configure+Makefile.in —-> makefile
(2)检查依赖的外部环境
make :
根据makefile 文件,构建应用程序
make install : cp/install 分配

编译C源代码:
译C源代码:
前提:提供开发工具及开发环境
开发工具: make, gcc等
开发环境:开发库,头文件
glibc:标准库

     通过“包组”提供开发组件(开发工具及开发环境)          CentOS 6:“Development Tools”,“Server Platform Development”         [root@localhost yum.repos.d]# yum groupinstall '服务器平台开发'

[root@localhost yum.repos.d]# gcc –version 检查gcc是否已提供
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
Copyright © 2010 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。

第一步:configure脚本
选项:指定安装位置,指定启用特性
- -help:获取其支持使用的选项
选项分类:
安装路径设定:
–prefix=/PATH/TO/SOMEWHERE: 指定默认安装位置;默认为/usr/local
–sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置

       System types:目标系统平台结构       Optionl Features:可选特性           --disable-FEATURE 禁用特性           --enable-FEATURE[=ARG] 启用特性       Optional Packages:可选程序包                    --with-PACKAGE[=ARG]            --without-PACKAGE

第二步 make

第三步:make install

安装后的配置:
(1)导出二进制程序目录至PATH 环境变量中
编辑文件/etc/profile.d/NAME(程序名).sh
export PATH=/PATH/TO/BIN:$PATH
(2)导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件

让系统重新生成缓存:
Ldconfg [-v]
(3) 导出头文件
基于链接方式实现:
ln -sv

 (4)导出帮助手册      编辑/etc/man.config文件          添加一个MANPATH

练习:
1.yum配置和使用,包括yum repository的创建
2. 编译安装apach 2.2;启动此服务
博客作业: 程序包管理:rpm/yum/编译