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:测试安装,但不真正执行安装,即dryrun模式 --nodeps:忽略依赖关系 --replacepkgs|replacefiles用于同一个包,替换包,即重新安装|替换文件,用于不同的包 --nosignature:不检查来源合法性 --nodigest:不检查包完整性 --noscripts:不执行程序包脚本 %pre:安装前脚本;--nopre %post:安装后脚本;--nopost %preun:卸载前脚本;--nopreun %postun:卸载后脚本;--nopostun --root=/mnt/sysimage救援模式下重新安装kernel需要指定/目录或者运行chroot rpm-ivhrpmfile安装软件包
#######################
查询-q
选项:
-a:查询所有已经安装的包 -f:查询指定的文件由哪个程序包安装生成 -prpmfile:查询指定包内容,必须跟rpm包路径 -c:查询程序的配置文件 -d:查询程序的文档 -i:查询程序的详细信息 -l:查询程序包的所有文件 -R:查询指定程序包所依赖的功能 -s:查询所有文件的状态 --changelog --scripts:程序包自带的脚本 --provides:列出指定程序包所提供的功能 常用组合选项: -qi查询软件包的详细信息 -ql查询软件包生成的所有文件列表 -qc查询软件包生成的所有配置文件(/etc目录下) -qd查询软件包生成的所有说明文件(man帮助文档) -qR查询软件包的依赖包关系
rpm-qkernel rpm-qatree rpm-qa|greptre模糊搜索tree rpm-qa|wc-l查询所有已安装的软件包 rpm-qf/etc/issue查看指定文件属于哪个rpm包 rpm-qf/bin/bash rpm-qf`whichrpm`查询指定命令由哪个包生成 rpm-qplrpmfile查看指定包文件列表 rpm-qpirpmfile查询指定包信息 rpm-qpl--scriptsbash-xxx.rpm查询指定安装包的安装脚本 rpm-qabash--scripts rpm-qcbash配置文件 rpm-qdbash文档 rpm-qltree rpm-qitree查询已经安装过的包 rpm-q--whatprovidesbash查询指定命令由哪个包提供 rpm-q--whatrequiresbash查询指定命令依赖哪个包
查询系统是否安装了指定软件
rpm-qlogrotate rpm-qlogrotating
查询系统工具来自哪个安装包
#rpm-qf`whichlsblk` util-linux-2.23.2-33.el7.x86_64 #yuminstallutil-linux
rpm2cpiorpmfile|cpio-itv查看rpm包内文件的详细信息,包括权限,大小的,类似于ls的显示 rpm2cpiorpmfile|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 恢复误删除文件,此种方式可能会有权限问题,注意查看属主和权限,不推荐 #rpm2cpiotree-1.6.0-10.el7.x86_64.rpm|cpio-itv #rpm2cpiotree-1.6.0-10.el7.x86_64.rpm|cpio-id./usr/bin/tree #llusr/bin/tree -rwxr-xr-x.1rootroot62768Jun914:29usr/bin/tree #ll/usr/bin/tree -rwxr-xr-x.1rootroot62768Jun102014/usr/bin/tree #cpusr/bin/tree/usr/bin
#######################
校验-V
rpm-Vtree查询软件是否被更改过 rpm-Vatree查询系统中所有可能被更改过的文件 rpm-Vprpmfile查询该软件包被更改过的文件列表 rpm-Vffilename查询文件的属性
列出你的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-Uvhrpmfile rpm-Fvhrpmfile -U,--upgrade:安装有旧版程序包,则升级;如果不存在则安装 -F,--freshen:安装有旧版程序包,则升级,如果不存在则不执行升级操作 --oldpackage:降级 --force:强制安装,不能用于卸载
#######################
卸载-e
卸载rpm包
rpm-etree rpm-qtree rpm-ekernel-2.6.32-573.el6.x86_64内核需要加上版本号 rpm-erpm不能直接删除 rpm-erpm--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禁止进行gpgcheck --noplugins禁用所有插件 --version
命令:
yumrepolist列出可用的yum源 yumlist显示所有安装包,@表示已经安装,installed表示是通过rpm命令安装的 yumsearch通过yum数据库查询软件包 yuminfo查询软件包的信息 yuminstall安装 yumreinstall重新安装 yumupdate升级 yumdeplist查询包依赖关系 yumprovides查询命令或功能由哪个包提供 yumdistribution-synchronization同步已安装的软件到最新版本 yumremove|erase卸载 yumcheck-update检查更新 yumhistory显示yum操作历史 yumshell进入yum自带的shell
包组命令:
yumgroupinfo显示包组信息 yumgroupinstall安装包组 yumgrouplist显示所有包组列表 yumgroupupdate更新包组 yumgroupremove卸载包组 yumhistory[info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats] yumhistory yumhistoryinfo2显示yum历史列表为2的详细操作 yumhistoryundo2回退操作,即还原安装历史序列号为2的所有操作 yumrepolistall显示所有的的yum源 yumlistinstalled|more查询已安装的包 yumlistavailable|more查询可用的安装包 yumgrouplist|grep-A10Installed//查看已安装的软件包组 yumgrouplistdevelopmenttools//查询指定包组 ServerPlatformDevelopment和Developmenttools这两个包组是完全一样的,一般只需要安装后者即可 yumgroupinstallDevelopmenttools
更新缓存:
yumcleanall yummakecache
yum源配置文件:
/etc/yum.conf 全局配置,为所有仓库提供公共配置
/etc/yum.repos.d/*.repo 配置yum仓库
vibase.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,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 yuminstallgcc
创建yum仓库:createrepo .
先把rpm文件放到一个目录,然后执行createrepo 目录路径即可生成repodata目录仓库
配置yum源
1.光盘yum源配置,通过autofs服务开机自动挂载光盘
yuminstallautofs serviceautofsstart vi/etc/yum.repos.d/base.repo [cdrom] name=cdrom baseurl=file:///misc/cd gpgcheck=0 enabled=1
更新yum源缓存并测试安装软件,以下均省略说明
yumcleanall yummakecache yumrepolist yumremovetree yuminstalltree
2.网络yum源配置,推荐使用http方式
yuminstallhttpd mkdir/var/www/html/yum mount/dev/sr0/var/www/html/yum servicehttpdstart vi/etc/yum.repos.d/base.repo [yumsrc] name=yumsrc baseurl=http://192.168.10.61/yum gpgcheck=0 enabled=1
更新yum源缓存并测试安装软件,同上
3.搭建自定义的yum源
yuminstallcreaterepo mkdir/app/Packages cp/root/xxx.rpm/app/Packages createrepo/app/Packages mkdir/var/www/html/yum mount-obind/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