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

学习日志---linuxの RPM软件包管理器

2015-10-25 14:42 513 查看
rpm包的使用:
rpm包命名格式:
源程序:name-version.tar.{gz|bz2|xz} 打包在一起的源码
version: major.minor.release

rpm包:name-version-release.arch.rpm 这是打包好的二进制程序了
release:通常包含rpm的制作发行号,还包含适用的OS
arch:这个是适用于哪种硬件架构,还有位数
例子:bash-4.3.2-2.el6.x86_64.rpm

OS平台:
el6: redhat enterprise linux 6
el5:
CentOS5
CentOS6
suse11

arch:
x86_64
i386, i586, i686
ppc
noarch

nginx-1.4.16-5.noarch.rpm

比如,一个源码:有10个功能
大多数用户只用其6个功能,余下的4个呢?

分包:把一个大的程序打包制作成多个包
主包:bash-4.3.2-2.el6.x86_64.rpm
支包:bash-hello-4.3.2-2.el6.x86_64.rpm
bash-world-4.3.2-2.el6.x86_64.rpm

DNS:bind, bind-devel, bind-libs, bind-utils

来源合法性验正:
源程序:通过md5或sha1校验码验正;
rpm包:发行商提供的合法性是可信的
验正包完整性:校验码
验正来源合法:公钥,使用私钥加密,对外用公钥解密,可以解密,则可认为是原作者

获取rpm包的途径:
1、发行商的光盘或站点服务器
以CentOS为例: http://mirrors.163.com http://mirrors.sohu.com
下面两个是用于找rpm包的
2、http://rpmfind.net
3、http://rpm.pbone.net

注意:
1、发行商,发行光盘中的包,需要升级时,官方释放出升级包;
2、Fedora EPEL 这里面有很多的rpm包

rpm包管理:安装
使用wget+地址去下载rpm
rpm -i, --install
# rpm -i /path/to/rpm_package ...
-v:
-vv:
-vvv:
-h: hash, 以#的个数显示安装进度,一个#表示2%的进度;

--test:仅测试,不真正执行安装过程

如果存在依赖:
解决依赖关系
忽略依赖关系: --nodeps

重新安装:
-ivh --replacepkgs

原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件;

rpm包管理:卸载
rpm -e, --erase
rpm -e package_name

如果卸载被其它程序所依赖的包:
1、把依赖者一同卸载;
2、忽略依赖关系;
--nodeps
3、不再卸载

rpm包管理:查询
rpm -q

查询所有已经安装的包:rpm -qa

查询包的描述信息:rpm -qi package_name
Name : bash Relocations: (not relocatable)不支持重新定位
Version : 4.1.2 Vendor: CentOS
Release : 15.el6_4 Build Date: Thu 18 Jul 2013 09:21:24 PM CST
Install Date: Wed 12 Feb 2014 09:48:43 AM CST Build Host: c6b10.bsys.dev.centos.org(系统)
Group : System Environment/Shells Source RPM: bash-4.1.2-15.el6_4.src.rpm
Size : 3139291 License: GPLv3+
Signature : RSA/SHA1, Thu 18 Jul 2013 09:46:10 PM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://www.gnu.org/software/bash 源码地址
Summary : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.

查询某单个包是否安装:rpm -q package_name

查询包安装之后在当前系统生成文件列表:rpm -ql(list) package_name
这个是查看安装完程序之后,都散布在哪些目录下,rpm包的安装都在/bin /sbin /lib /etc等这些目录下,包括二进制程序,库或者配置文件

查询某文件是哪个包安装生成的:rpm -qf /path/to/somefile
[root@xuanxuan ~]# rpm -qf /etc/passwd
setup-2.8.14-20.el6_4.1.noarch 可以看到/etc/passwd是在setup包安装后生成的文件

查询包安装后生成的帮助文档:rpm -qd package_name
查看某个包安装后生产的帮助文档所在的目录

查询包安装后生成的配置文件:rpm -qc package_name
查看包安装户的配置文件都在哪里
[root@xuanxuan ~]# rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc

查询包相关的脚本:rpm -q --scripts package_name
脚本有四类:
preinstall: 安装前脚本
postinstall: 安装后脚本
preuninstall: 卸载前脚本
postuninstall: 卸载后脚本

查询尚未安装的rpm包文件的相关信息:q改为qp即可
查询安装后会生成的文件列表:rpm -qpl(list) /path/to/package_file 这里要跟包文件,不能只跟名,因为还没安装
查询其简单描述信息:rpm -qpi(information) /path/to/package_file

rpm包之升级:
rpm -U: 升级或安装
rpm -F:升级
rpm {-Uvh|-Fvh} /path/to/package_file 文件

--nodeps:忽略依赖关系
--force: 强行安装

注意:不要对内核执行升级操作;
多版本内核可并存,因此,建议执行安装操作;

rpm包管理:校验
检查包安装后生成的文件是否被修改过;
rpm -V package_name (verify校验) 检查安装后的文件是否有被改变的
[root@xuanxuan ~]# rpm -V wget
如果wget安装后的文件有修改,如/etc下的某对应文件修改了,则会显示修改提示,如下格式:
S file Size differs 大小改变了
M Mode differs (includes permissions and file type) 权限改变
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch 设备号不匹配(设备类型,同一类型不同设备)
L readLink(2) path mismatch 路径不匹配
U User ownership differs 属主
G Group ownership differs 属组
T mTime differs 时间戳
P caPabilities differ 能力

rpm包管理:检验来源合法性和软件包完整性
包完整性:通过单向加密机制(md5|sha1)
来源合法性:通过公钥加密机制(RSA)

命令:gpg, pgp

导入制作者的公钥,CentOS发行版的公钥在iso文件中;
导入命令:rpm --import /path/to/gpg-key-file

检查:rpm -K /path/to/package_file 文件,因为此时还没安装
rpm --checksig /path/to/package_file
--nosignature: 不检查来源合法性
--nodigest: 不检查完整性

[root@xuanxuan ~]# rpm --import RPM-GPG-KEY-CentOS-6
[root@xuanxuan ~]# rpm -K httpd-2.2.15-45.el6.centos.i686.rpm
httpd-2.2.15-45.el6.centos.i686.rpm: rsa sha1 (md5) pgp md5 OK

rpm包管理:数据库重建
数据库:/var/lib/rpm/ 这个是rpm管理工具数据库的位置

重建:
rpm --initdb: 初始化
如果事先不存在一个数据库,则新建之;
rpm --rebuilddb: 重建
直接重建数据库,会覆盖原有的库;
这个是rpm数据库存储的信息
[root@xuanxuan rpm]# ll /var/lib/rpm
total 19208
-rw-r--r--. 1 root root 860160 Oct 22 02:31 Basenames 包的基名
-rw-r--r--. 1 root root 12288 Oct 21 07:03 Conflictname
-rw-r--r--. 1 root root 245760 Oct 22 02:31 Dirnames 包的路径
-rw-r--r--. 1 root root 1339392 Oct 22 02:31 Filedigests
-rw-r--r--. 1 root root 12288 Oct 22 03:10 Group
-rw-r--r--. 1 root root 12288 Oct 22 03:10 Installtid
-rw-r--r--. 1 root root 12288 Oct 22 03:10 Name
-rw-r--r--. 1 root root 12288 Oct 21 07:03 Obsoletename
-rw-r--r--. 1 root root 14245888 Oct 22 03:10 Packages 详细的信息
-rw-r--r--. 1 root root 684032 Oct 22 03:10 Providename
-rw-r--r--. 1 root root 577536 Oct 22 03:10 Provideversion
-rw-r--r--. 1 root root 12288 Oct 22 03:10 Pubkeys
-rw-r--r--. 1 root root 110592 Oct 22 02:31 Requirename
-rw-r--r--. 1 root root 65536 Oct 22 02:31 Requireversion
-rw-r--r--. 1 root root 24576 Oct 22 02:31 Sha1header
-rw-r--r--. 1 root root 12288 Oct 22 02:31 Sigmd5
-rw-r--r--. 1 root root 12288 Oct 21 07:03 Triggername
-rw-r--r--. 1 root root 24576 Oct 22 03:10 __db.001
-rw-r--r--. 1 root root 180224 Oct 22 03:10 __db.002
-rw-r--r--. 1 root root 1318912 Oct 22 03:10 __db.003
-rw-r--r--. 1 root root 491520 Oct 22 03:10 __db.004
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux