rpm 软件包管理
CentOS 软件包管理
系统环境:CentOS 6.9 和 7.3
CentOS 6.9 系统软件包管理
rpm - RPM Package Manager
rpm --version
RPM version 4.8.0
linux 包管理
二进制应用程序的组成部分:二进制文件,库文件,配置文件,帮助文件
debian:deb 文件,dpkg 包管理器
Redhat:rpm 文件,rpm 包管理器
ldd /bin/cat 查看软件依赖的库文件
ldd /bin/ls
误删除系统库文件恢复方法:
光盘启动进入救援模式
默认挂载到 / mnt/sysimage
运行 chroot /mnt/sysimage 改变挂载点
还原移动或删除的库文件,重启即可
查看和管理本机装载的库文件
ldconfig
/sbin/ldconfig -p
配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
第三方安装源 EPEL——rpmforge
搜索:http://pkgs.org http://rpmfind.net http://rpm.pbone.net https://sourceforge.net/
rpm 包命名格式
包名 - 包版本号 - 编译版本号. cpu 架构. rpm
name-version-release.arch.rpm
例: bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release: release.OS
常见的 arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平台无关: noarch
制作 rpm 包命令:rpmbuild 和 FPM
查找所有包的平台架构
ls -al /mnt/Packages/ > lsrpm.log
more lsrpm.log | egrep -o "[^.]+\.rpm" |cut -d. -f1 |sort| uniq
######################
安装 - i
安装选项:
- --test:测试安装,但不真正执行安装,即dry run模式
- --nodeps:忽略依赖关系
- --replacepkgs | replacefiles 用于同一个包,替换包,即重新安装|替换文件,用于不同的包
- --nosignature:不检查来源合法性
- --nodigest:不检查包完整性
- --noscripts:不执行程序包脚本
- %pre:安装前脚本;--nopre
- %post:安装后脚本;--nopost
- %preun:卸载前脚本;--nopreun
- %postun:卸载后脚本;--nopostun
- --root=/mnt/sysimage 救援模式下重新安装kernel需要指定/目录或者运行chroot
- rpm -ivh rpmfile 安装软件包
#######################
查询 - q
选项:
- -a:查询所有已经安装的包
- -f:查询指定的文件由哪个程序包安装生成
- -p rpmfile:查询指定包内容,必须跟rpm包路径
- -c:查询程序的配置文件
- -d:查询程序的文档
- -i:查询程序的详细信息
- -l:查询程序包的所有文件
- -R:查询指定程序包所依赖的功能
- -s: 查询所有文件的状态
- --changelog
- --scripts:程序包自带的脚本
- --provides:列出指定程序包所提供的功能
- 常用组合选项:
- -qi 查询软件包的详细信息
- -ql 查询软件包生成的所有文件列表
- -qc 查询软件包生成的所有配置文件(/etc目录下)
- -qd 查询软件包生成的所有说明文件(man帮助文档)
- -qR 查询软件包的依赖包关系
- rpm -q kernel
- rpm -qa tree
- rpm -qa | grep tre 模糊搜索tree
- rpm -qa | wc -l 查询所有已安装的软件包
- rpm -qf /etc/issue 查看指定文件属于哪个rpm包
- rpm -qf /bin/bash
- rpm -qf `which rpm` 查询指定命令由哪个包生成
- rpm -qpl rpmfile 查看指定包文件列表
- rpm -qpi rpmfile 查询指定包信息
- rpm -qpl --scripts bash-xxx.rpm 查询指定安装包的安装脚本
- rpm -qa bash --scripts
- rpm -qc bash 配置文件
- rpm -qd bash 文档
- rpm -ql tree
- rpm -qi tree 查询已经安装过的包
- rpm -q --whatprovides bash 查询指定命令由哪个包提供
- rpm -q --whatrequires bash 查询指定命令依赖哪个包
查询系统是否安装了指定软件
- rpm -q logrotate
- rpm -q logrotating
查询系统工具来自哪个安装包
- #rpm -qf `which lsblk`
- util-linux-2.23.2-33.el7.x86_64
- #yum install util-linux
- rpm2cpio rpmfile |cpio -itv 查看rpm包内文件的详细信息,包括权限,大小的,类似于ls的显示
- rpm2cpio rpmfile |cpio -id "*.conf" 提取安装包内的指定文件
- rpm2cpio /mnt/sdb1/Packages/tree-1.5.3-3.el6.x86_64.rpm |cpio -itv
- rpm2cpio /mnt/sdb1/Packages/tree-1.5.3-3.el6.x86_64.rpm |cpio -id *.gz
- 恢复误删除文件,此种方式可能会有权限问题,注意查看属主和权限,不推荐
- #rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -itv
- #rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -id ./usr/bin/tree
- #ll usr/bin/tree
- -rwxr-xr-x. 1 root root 62768 Jun 9 14:29 usr/bin/tree
- #ll /usr/bin/tree
- -rwxr-xr-x. 1 root root 62768 Jun 10 2014 /usr/bin/tree
- #cp usr/bin/tree /usr/bin
#######################
校验 - V
- rpm -V tree 查询软件是否被更改过
- rpm -Va tree 查询系统中所有可能被更改过的文件
- rpm -Vp rpmfile 查询该软件包被更改过的文件列表
- rpm -Vf filename 查询文件的属性
列出你的 Linux 内的 logrotate 这个软件是否被更改过
rpm -V logrotate
查询一下你的 / etc/crontab 是否有被更改过
# rpm -V tree
S.5....T. /usr/bin/tree
# 被更改过所以会列出被更改过的信息类型
# rpm -Vf /etc/ssh/sshd_config
S.5....T. c /etc/ssh/sshd_config
显示的信息类型如下:
S :(file Size differs) 文件大小已被改变
M :(Mode differs) 文件的权限 (rwx) 已被改变
5 :(MD5 sum differs) MD5 验证不同
D :(Device major/minor number mis-match) 设备的主 / 次号码不匹配
L :(readLink(2) path mis-match) Link 路径已被改变
U :(User ownership differs) 文件的所有者已被改变
G :(Group ownership differs) 文件的所属组已被改变
T :(mTime differs) 文件的 mtime 时间已被改变
显示的文件类型如下:
c :配置文件 (config file)
d :文档文件 (documentation)
g :ghost 文件,指该文件不被软件包所包含,较少发生 (ghost file)
l :许可证文件 (license file)
r :自述文件 (read me)
chgrp bin /usr/bin/tree
rpm -V tree
echo >> /usr/bin/tree
rpm -V tree
rpm -Va
包来源的完整性验证:SHA256,来源合法性验证:RSA
对称加密:加密,解密使用同一密钥
非对称加密:密钥是成对出现的,公钥和私钥
rpm -K rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 导入公钥,光盘里也有
rpm -qa "gpg-pubkey"
rpm -qi gpg-pubkey
# rpm -K tree-1.5.3-3.el6.x86_64.rpm
tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
#######################
升级 - U/-F
- rpm -Uvh rpmfile
- rpm -Fvh rpmfile
- -U,--upgrade:安装有旧版程序包,则升级;如果不存在则安装
- -F,--freshen:安装有旧版程序包,则升级,如果不存在则不执行升级操作
- --oldpackage:降级
- --force:强制安装,不能用于卸载
#######################
卸载 - e
卸载 rpm 包
- rpm -e tree
- rpm -q tree
- rpm -e kernel-2.6.32-573.el6.x86_64 内核需要加上版本号
- rpm -e rpm 不能直接删除
- rpm -e rpm --nodeps 去除依赖性
- rpm误删除后需要通过光盘启动救援模式来重新安装rpm包,然后重启
- rpm -ivh /mnt/cdrom/Packages/rpm.rpm --root=/mnt/sysimage 指定新的/目录
rpm 数据库重建:存放路径 / var/lib/rpm
--initdb:初始化数据库,如果原先不存在则新建,否则不执行任何操作。
--rebuilddb:重建已安装的包头数据库索引
rpm 的查询和安装都依赖 rpm 数据库,很重要,这里即使重建,但是数据为空,重建也无意义,所以最好提前做备份。
如何制作一个 rpm 包?
yum - Yellowdog Updater Modified
yum 是一个交互式的 RPM 包管理程序,可自动解决包依赖问题,基于 repository 元数据来查询,安装,更新,卸载软件包,执行系统更新,检查包依赖性等操作
repodata:存储 rpm 包以及依赖包的相关元数据
repodata 的父目录就是 yum 仓库的路径,Redhat5 系列在 Server 目录下,centos6 之后为光盘根目录。
支持 4 种路径 http:// https:// ftp:// file://
yum 日志:/var/log/yum.log
/var/lib/yum/ yum 的元数据
/var/lib/rpm/ rpm 数据库
yum 只能同时运行一个进程,底层依赖 rpm 命令。
yum --version 查看版本等信息
yum
选项:
- -c 指定配置文件
- -q 静默模式,只提示必要的包列表信息
- -y, --assumeyes 自动回答yes
- --assumeno 自动回答no
- --installroot=[path] 指定安装的根目录
- --nogpgcheck 禁止进行gpg check
- --noplugins 禁用所有插件
- --version
命令:
- yum repolist 列出可用的yum源
- yum list 显示所有安装包,@表示已经安装,installed表示是通过rpm命令安装的
- yum search 通过yum数据库查询软件包
- yum info 查询软件包的信息
- yum install 安装
- yum reinstall 重新安装
- yum update 升级
- yum deplist 查询包依赖关系
- yum provides 查询命令或功能由哪个包提供
- yum distribution-synchronization 同步已安装的软件到最新版本
- yum remove|erase 卸载
- yum check-update 检查更新
- yum history 显示yum操作历史
- yum shell 进入yum自带的shell
包组命令:
- yum groupinfo 显示包组信息
- yum groupinstall 安装包组
- yum grouplist 显示所有包组列表
- yum groupupdate 更新包组
- yum groupremove 卸载包组
- yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]
- yum history
- yum history info 2 显示yum历史列表为2的详细操作
- yum history undo 2 回退操作,即还原安装历史序列号为2的所有操作
- yum repolist all 显示所有的的yum源
- yum list installed|more 查询已安装的包
- yum list available|more 查询可用的安装包
- yum grouplist | grep -A 10 Installed //查看已安装的软件包组
- yum grouplist development tools //查询指定包组
- Server Platform Development 和 Development tools 这两个包组是完全一样的,一般只需要安装后者即可
- yum groupinstall Development tools
更新缓存:
- yum clean all
- yum makecache
yum 源配置文件:
/etc/yum.conf 全局配置,为所有仓库提供公共配置
/etc/yum.repos.d/*.repo 配置 yum 仓库
- vi base.repo
- [base] //仓库名不能重名
- name=centos6 //描述信息
- baseurl=URL //元数据路径,即repodata目录的路径,支持http,ftp,file
- enabled={1|0} //1启用,0禁用
- gpgcheck={1|0} //验证
- gpgkey=URL
- enablegroups={1|0}
- failovermethod={roundrobin|priority} //roundrobin表示随机挑选,默认值;priority表示按顺序访问
- cost= //默认为1000
yum 的 repo 配置文件中可用的变量:
$releasever: 当前 OS 的发行版的主版本号
$arch: 平台,i386,i586,x86_64
$basearch: 基础平台,i386,x86_64
$YUM0-$YUM9: 自定义变量
http://server/centos/$releasever/$basearch/ 通用方式,可以表示以下两种
http://server/centos/7/x86_64
http://server/centos/6/i386
最简单的 repo 文件
- [base]
- name=centos6
- baseurl=ftp://192.168.1.1/pub/6
- gpgcheck=0
yum 只能同时运行一个进程,如果有其他用户同时使用 yum,可以通过 fuser -km /repodata-path 强行结束。
- fuser -km /var/ftp/pub/6
- mount --bind /misc/cd /var/ftp/pub/6
- mount
- yum install gcc
创建 yum 仓库:createrepo .
先把 rpm 文件放到一个目录,然后执行 createrepo 目录路径即可生成 repodata 目录仓库
配置 yum 源
1. 光盘 yum 源配置,通过 autofs 服务开机自动挂载光盘
- yum install autofs
- service autofs start
- vi /etc/yum.repos.d/base.repo
- [cdrom]
- name=cdrom
- baseurl=file:///misc/cd
- gpgcheck=0
- enabled=1
更新 yum 源缓存并测试安装软件,以下均省略说明
- yum clean all
- yum makecache
- yum repolist
- yum remove tree
- yum install tree
2. 网络 yum 源配置,推荐使用 http 方式
- yum install httpd
- mkdir /var/www/html/yum
- mount /dev/sr0 /var/www/html/yum
- service httpd start
- vi /etc/yum.repos.d/base.repo
- [yumsrc]
- name=yumsrc
- baseurl=http://192.168.10.61/yum
- gpgcheck=0
- enabled=1
更新 yum 源缓存并测试安装软件,同上
3. 搭建自定义的 yum 源
- yum install createrepo
- mkdir /app/Packages
- cp /root/xxx.rpm /app/Packages
- createrepo /app/Packages
- mkdir /var/www/html/yum
- mount -o bind /app/Packages /var/www/html/yum
- vi /etc/yum.repos.d/base.repo
- [yumsrc]
- name=yumsrc
- baseurl=http://192.168.10.61/yum
- gpgcheck=0
- enabled=1
更新 yum 源缓存并测试安装软件,同上
CentOS 7.3 系统软件包管理
yum groups 命令与 6 不同,如下:
yum groups list 查询包组
yum groups info
yum groups install
yum groups remove
yum groups summary
yum groups list | grep -A 10 Installed // 查看已安装的软件包组
yum groups info Development Tools
来源: http://www.bubuko.com/infodetail-2270203.html