本篇概述
作为一个操作系统,软件的安装与管理是必不可少的。在本篇中,将介绍CentOS 中常用的两个软件软件安装与管理工具:RPM 和 yum 。
Linux中常见的包管理器
debian : deb文件,dpkg包管理器
redhat : rpm文件,rpm包管理器
rpm,为Redhat Package Manager 的缩写,本是由红帽开发的包管理工具,后来用的公司多了,于是衍变成了 RPM Package Manager 的缩写。
包的命名
源代码:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.releaserpm包命名方式:
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包之间的依赖与解决
包之间可能存在相互依赖,甚至是循环依赖。若要安装包,可能会需要同时安装这个包需要的各种依赖。此时就需要有工具来解决安装包时需要先安装各种以来的问题。
解决依赖包管理工具:
yum: rpm包管理器的前端工具
apt-get: deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具程序包的来源
(1) 系统发版的光盘或官方的服务器;
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com(2) 项目官方站点
(3) 第三方组织:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/(4)自己制作
需要注意的是,第三方包建议检查其合法性和完整性。
RPM包管理器
rpm CentOS 系统上使用rpm命令管理程序包。可以用于安装、卸载、升级、查询、校验、数据库维护等。
rpm包管理:
安装与卸载:
rpm {-i | --install} [install-options] packagesfile...
选项:
-a 查询所有套件
-e 卸载指定的程序,卸载时,程序的配置文件会被保留,命名为filename.rpmsave,重复安装卸载会
刷新该文件,先删除再创建新的。
-v varbose
-vv
-h 以#显示安装进度
exp: rpm -ivh packagesfile...
rpm包安装: 安装时需要完整的路径
[install-options]
--test 测试安装,但不真正安装,即 dry run 模式
--nodeps 忽略依赖关系,可以安装,但安装完毕不一定能够使用
--replacepkgs|repalcefiles 替换安装包|文件,整个覆盖安装,文件完全被覆盖,可以使用cpio提取
指定的文件并复制到该出安装以避免覆盖其他文件。replacefiles,安装时若两个包在同一目录下拥有相同的文件,则使用该命令以替换安装。
--nosignature 不检查来源的合法性
--nodigest 不检查包完整性
--noscripts 不执行程序包脚本
%pre :安装前脚本 --nopre
%post :安装后脚本 --nopost
%preun :卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun
rpm包升级
rpm {-U | --upgrade} [install-options] packagesfile...
rpm {-F | --freshen} [install-option] packagesfile...
upgrade 安装有旧版程序包则升级,若未安装则安装该程序包
freshen 安装有旧版程序包则升级,若未安装则不执行操作
--oldpackage 降级安装
--force 强制安装
注意:
(1)不要直接对内核做升级操作,Linux支持对内核版本存在,因此可以直接安装新版本内核
(2)如果原程序包的配置文件在安装后被修改,升级时,新版本提供的同一个配置文件并不会覆盖老版本的配置文件,而是把新版本的文件重命名(filename.rpmnew)后备用。
rpm包查询
rpm {-q | --query} [select-options] [query-options]
[slect-options]
-a 所有包
-f 指定的文件由哪个包生成
-p rpmfile 针对未安装的程序包文件做查询操作
--whatprovide CAPABILITIY 查询指定的CAPABILITY由哪个包提供
--whatrequires CAPABILITY 查询指定的CAPABILITY被哪个包所依赖
rpm2cpio 包文件 | cpio -itv 预览包内文件
rpm2cpio 包文件 | cpio -id "*.conf" 释放包内文件
注意:只要是已经安装的包,即便是被损坏了,只要未被卸载,也能被查询到,查询时查询的是rpm数据库
[query-options]
--changelog 查询包的changelog
-c 查询程序的配置文件
-d 查询程序的文档
-i information
-l 查看指定程序包安装后生成的所有文件
--scripts 程序包自带的脚本
--provides 列出指定程序包提供的CAPABILITY
-R 查询制定程序包所依赖的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
包检验
rpm {-V|--verify} [select-options] [verify-options] 检验文件与最安装初的变化
S file Size differs 大小
M Mode differs (includes permissions and file type) 权限
5 digest (formerly MD5 sum) differs MD5哈希值
D Device major/minor number mismatch 设备编号
L readLink(2) path mismatch 硬链接
U User ownership differs 所有者
G Group ownership differs 所属组
T mTime differs 修改时间
P capabilities differs 依赖变化
包来源合法性验正及完整性验正
完整性验正:SHA256
来源合法性验正:RSA
导入所需要公钥公钥加密
对称加密:加密、解密使用同一密钥
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
导入所需要公钥
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”
rpm数据库
数据库重建
/var/lib/rpm,此为数据库所在的目录。
rpm {--initdb|--rebuilddb}
initdb 初始化
若事先不存在数据库,则重建,若存在,则不执行操作
rebuilddb 创建已安装的包头的数据库索引目录
yum
yum Yellowdog Update Modifier,rpm的前端程序,可以解决软件包的相互依赖性,可在多个库之间定位软件包,是
up2date的替代品。
yum repository:yum repo ,存储了众多rpm包,以及包的诸多元数据(放置在repodate下)
语法:
yum [options] [command] [packages...]
yum客户端配置文件:
/etc/yum.conf : 为所有仓库提供公共配置
/ect/yum.repo.d/*.repo 为仓库的指向提供配置
仓库指向的定义:
[repositoryID] :可以为任意非空字符,否则会报错
name=#### :仓库名
baseurl=url://path/to/repository :仓库的路径
enabled={1|0} 是否启用仓库
gpgcheck={1|0} 是否进行检查
gpgkey=URL gpgkey的路径,会自动导入
enablegroups={1|0} 是否启用组包(未查证????)
failovermethod={roudrobin|priority} 针对有多个库地址的情况
roundrobin:随机挑选
priority: 顺序访问
cost= 默认为1000,指定访问顺序的权重
yum的repo配置文件中可用的变量:
$releasever 当前OS发行版本的主版本号
$arch 平台,i386,i486,i586,x6_64等
$basearch 基础平台,i386,x86_64等
$YUM0-YUM9 自定义变量
yum源
阿里云repo文件
http://mirrors.aliyun.com/repo
CentOS系统的yum源
阿里云源:
https://mirrors.aliyun.com/centos/$releasever/os/$basearch 当然,到centos7后就只有64位系统了
EPEL的yum源
阿里云:
https://mirrors.aliyun.com/epel/$releasever/$basearch
显示仓库列表
yum repolist [all|enabled|disabled]
显示程序包:
yum list
yum list [all|glob_exp1] [glob_exp2]... 此处搜索支持正则表达式
yum list {available|installed|updates} [glob_exp] [...]
安装程序包:
yum install package1 [package2...] 安装未安装的程序进行安装
yum reinstall packages... 对已经安装的程序进行重复安装
升级程序包
yum update [package1] [package2...] 升级程序包
yum doewngrade [packages...] 降级安装程序包,降版本
检查可用升级
yum check-update 检查可用升级
卸载程序包
yum remove|erase packages... 卸载程序
查看程序包information
yum info [packages]
查看指定的特性:可以是某个文件由哪个程序包提供
yum provides | whatprovides [features...]
清除本地缓存
yum clean [package|metadata|expire-cache|rpmdb|plugins|all]
清楚/var/cache/yum/$basearch/$releasever缓存
构建缓存
yum makecache 实际上使用yum就会自动创建缓存
搜索
yum search [string...] 以指定关键字搜索程序包名及summary信息
查看指定包所依赖的capabilites:
yum deplist [package...]
查看yum事务历史
yum history [info|list|packagelist|package-info|summary|addon-info|redo|undo|rollback|new|sync|
stats]
yum history 查看简单地历史
yum history info 6 查看第六步详细信息
yum history undo 6 取消第六步的操作,安装与卸载的相反操作
日志:
/var/log/yum.log
安装及升级本地程序包
yum localinstall [rpmfile...]
用install代替
yum localupdate [rpmfile...]
用update代替
包组管理相关的命令
yum groupinstall [group...] 安装包组
yum groupupdate [group...] 升级包组
yum grouplist [hidden] [groupwildcard...] 列出包组
yum groupremove [group...] 卸载包组
yum groupinfo [group...] 包组信息
yum的命令行选项:
--nogpgcheck 禁止gpg check
--y 自动应答为yes
-q 静默模式
--disablerepo=repoidglob 临时禁用此处指定的repo
--enablerepo=repoidglob 临时启用此处指定的repo
--noplugins 禁止所有插件
系统光盘yum仓库的搭建
系统安装光盘作为本地yum仓库
(1)挂载光盘至某目录,如:/mnt
mount /dev/cdrom /mnt
(2)创建配置文件:vim /etc/yum.repo.d/base.repo 此处文件名随意,最好见名知意,但后缀必须为.repo
[repotitle] 仓库标签
name= 仓库名
baseurl= 仓库地址
gpgcheck= 是否启用gpg check
enabled= 是否启用仓库此处需要注意的是,仓库地址必须为repodeta的父目录,否则不能正确识别源!
创建yum仓库元数据
#creatrepo [options] [directory]这个只有在自己使用软件包搭建源的时候会用到,一般的源,如光盘和官网的源,都会自带元数据文件,而不需要创建。
网络yum源的创建与本地光盘yum源的创建时类似的,只不过是要开启ftp或者http服务。此时也会需要关闭防火墙和selinux策略,否则会导致创建的网络源无法被访问。
具体关闭防火墙的方法为:
centos7:
# systemctl stop firewalld 立即关闭防火墙
#systemctl disable firedwalld 设置开机不启动
centos6:
#chkconfig iptables off 设置开机不启动
#server iptables stop 立即关闭防火墙关闭selinux策略
修改/etc/selinux/config 文件,将其中的SELINUX=enforcing修改为SELINUX=permissive。
开启vsftpd服务:
centos7
#systemctl start vsftpd 立即启动
#systemctl enable vsftpd 下次开机自动启动
centos6
#service vsftpd start 立即启动
#chkconfig vsftpd on 下次开机自动启动结语
至此,关于centos中的两个包管理和安装工具都做了介绍,具体的用法还需亲手操作,诸位且当参考。谬误之处,还请不吝赐教,我虚心学习。