linux运维实战练习-2015年9月10日课程作业(练习)安排
一、作业(练习)内容:
1、总结rpm和yum实现程序包的管理功能.
(1)相关概念
内核功能:进程管理、内存管理、提供网络协议栈、驱动程序、...
应用程序功能:提供各种各样特定功能,如bash等
程序包的组成部分:
二进制程序:程序包的核心,存储在/bin, /sbin,/ /usr/bin, /usr/sbin等路径下
库文件:共享资源,存储在/lib64, /usr/lib64等路径下
配置文件:定义工作属性,存储在/etc路径下
帮助文件:存储在manual, info等路径下
包管理器功能: 打包,包管理(如程序包的安装、升级、卸载、查询及校验等功能)
打包:将程序的所有文件存放在一个单一的归档文件中;
安装:将打包的文件对应展开在当前系统上(要验证来源的合法性、完整性)
卸载:把安装上的文件全部收集起来删除掉
升级:新版本代替旧版本
查询:安装情况及安装信息
校验:安装后配置文件是否被改变
包管理器类别:
deb: debian
rpm: redhat package manager
RPM is Package Manager
包组: 由许多程序包构成的一组包的集合
rpm包:基于rpm命令管理程序包的包组
打包工具:rpmbuild: 基于specs文件打包
rpm包的命名机制:
对于每一个程序包: name-VERSION.tar.gz
(包名-版本号.归档格式名称.压缩后缀名称)
VERSION:major.minor.release
( 程序版本号:主版本号.次版本号.修正号)
如:base-4.2.4.tar.gz
对于rpm包的程序包: name-VERSION-RELEASE.ARCH.rpm
(包名-版本号-rpm发行号.架构.rpm)
VERSION:major.minor.release
RELEASE :rpm包的发行号 (如1.el7)
ARCH:平台架构(如x86_64)
如:bash-4.2.4-1.el7.x86_64.rpm
bash-devel-4.2.4-1.el7.x86_64.rpm
分包机制:
testapp-VERSION.tar.gz可分为:
核心包:testapp-VERSION ( bash-4.2.4-1.el7.x86_64.rpm)
支包:testapp-devel-VERSION (bash-devel-4.2.4-1.el7.x86_64.rpm)
包和包之间:有可能存在依赖关系:
每个rpm包都提供一个或多个capabilities(能力):
依赖其他包,或被其他包依赖
X --> Y (X功能依赖Y的功能)
(在使用rpm安装X时,必须先将Y安装了才安装X
在使用yum安装X时,是将Y一同安装了的)
rpm包的数据库:记录当前系统上安装的所有的包的信息
在RedHat、Centos系统中存储在/var/lib/rpm/路径下
如何获取rpm包:
1、发行版提供的程序包;
2、Fedora-EPEL
3、项目的官方站点
4、搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
如何在CentOS7系统识获取rpm包(光盘用的设备文件存储在:/dev/cdrom)
(1)确认光盘设备为开启状态
(2)创建挂载点,并挂载光盘设备文件
(3)打开光盘设备中的文件
YUM: Yellowdog Updater Modified,是rpm包的前端管理工具,实现自动解决程序包的所有依赖关系,会将安装包和被安装包依赖的所有包一同安装,不再需要一个个去手动安装被依赖的包
yum的仓库:yum命令可以调用的所有程序包的路径(存储位置)
路径就是 yum repositories(文件服务器),它可以是一个服务器地址,也可以是网址,也可以是本地的路径,如:
ftp://hostname/PATH/TO/REPO
http://hostname/PATH/TO/REPO
file:///PATH/TO/REPO
如何创建yum的仓库(关键在于定义一个仓库指向)
yum程序仓库的配置文件:
/etc/yum.conf
定义全局配置:对所有仓库都适用的配置
/etc/yum.repos.d/*.repo
一个文件通常用于一个或一组功能相近或相关的仓库
1、切换到 /etc/yum.repos.d/目录下,
在该目录下创建一个以.repo结尾的文件,并使用vim编辑器打开该文件
2、定义一个仓库指向:在以.repo结尾的文件中编辑如下内容,保存后退出
[REPO_ID] : 唯一的ID
name= :仓库名称
baseurl= :程序包路径(可以有多个,但不建议使用多个)
或者mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE :
# 以#开头表示注释信息,无需执行
enabled={1|0} :是否启用仓库,默认1(启用)
gpgcheck={1|0} :安装前是否校验来源合法性、完整性
gpgkey= :密钥文件的路径
cost= :指明优先级,默认为1000,
这样就定义好了仓库的指向,上面操作是定义了互联网上的两个镜像路径为仓库指向,
相当于创建了两个仓库,可查看到
定义仓库指向时的可用变量:实现通用语法配置
$releasever: 引用当前操作系统的主版本号;
$basearch: 当前操作系统的基本架构;
64位:x-86
32位:i386, i486, i586, i686: i386
http://mirrors.magedu.com/CentOS/$releasever/os/$basearch
http://mirrors.163/ailyun/sohu.com/CentOS/$releasever/os/$basearch
如何使用光盘当做本地仓库:
(1)挂载光盘至某目录
(2)使用file:///指明其访问路径,用来定义仓库指向
(baseurl=file://挂载点)
如何创建本地仓库:
(1)下载一个rpm包至本地某目录下(如/tmp/test)
(2) 安装createrepo工具:yum install createrepo
(3)使用命令createrepo /PATH/TO/RPMFILES/(如createrepo /tmp/test)
(4)在/etc/yum.repo.d/目录下定义仓库(如baseurl= file:///tmp/test)
使用包管理器安装程序包时,在安装前要对程序包的来源合法性、完整性进行校验
(1)找到密钥,一般都在光盘里面(挂载点)
这是Centos7系统的
这是Centos6系统的
(2)导入密钥:rpm --import /PATH/TO/KEY_FILE (导入后将会自动校验)
或手动校验:rpm -K /PATH/TO/RPM_FILE
(2)基于rpm命令实现程序包管理:
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -i PACKAGE_FILE ...:直接安装程序包
rpm -ivh PACKAGE_FILE...:显示安装过程及安装进度
-v:显示详细过程,
-vv, -vvv(显示比-v更为详细的安装过程)
-h:用#显示安装进度
rpm -ivh PACKAGE_FILE... --replacepkgs:重装程序包
rpm -ivh PACKAGE_FILE... --nodeps:安装时忽略依赖关系安装
安装时忽略依赖关系安装,程序能正常安装,但可能会无法运行
升级:(http://pkgs.org/可查询程序包是否有新版本)
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-Uvh PACKAGE_FILE ...: 如果已安装了该程序包的旧版程序包,则将其升级;
如果没有安装该程序包,则安装最新版本的;
-Fvh: 如果已安装旧版程序包,则将其升级;
如果没有安装该程序包,则不做任何操作(即不安装);
--nodeps:忽略依赖关系
--oldpackage:降级;
-force:强制升级
卸载:
rpm {-e|--erase} [--notriggers] [--test] PACKAGE_NAME ...
rpm -e PACKAGE_NAME
rpm -e PACKAGE_NAME --nodeps:卸载时忽略依赖关系
(忽略依赖关系卸载后,依赖于此程序包的程序将无法正常运行)
rpm -e PACKAGE_NAME --noscripts:卸载时不执行脚本
查询:
rpm {-q|--query} [select-options] [query-options]
查询选项:
已安装的程序包的查询
rpm -qa: 查询本机已经安装的所有程序包;
rpm -qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;
rpm -qc PACKAGE_NAME: 查询指定程序包安装时生成的配置文件
rpm -qd PACKAGE_NAME: 查询指定的程序包安装时生成的帮助文档
rpm -ql PACKAGE_NAME: 查询程序包安装时生成的所有文件的列表
( 包含qd、qc的查询结果);
rpm -qi PACKAGE_NAME: 查询指定的程序包的相关信息;
rpm -qR PACKAGE_NAME:查询程序包依赖于哪些其他人提供的程序包
rpm -q --provides PACKAGE_NAME:查询程序包可以被哪些程序包依赖
rpm -q --scripts PACKAGE_NAME:查询程序包安装需执行的相关的脚本
preinstall: 安装前脚本
postinstall:安装后脚本
preuninstall: 卸载前脚本
postuninstall: 卸载后脚本
未安装的程序包的查询
rpm -qpi PACKAGE_FILE : 查询可以安装但尚未安装的程序包文件的信息;
rpm -qpl PACKAGE_FILE :查询未安装的程序包安装时会生成的所有文件
校验:
rpm {-V|--verify} [select-options] [verify-options]
rpm -V PACKAGE_NAME:检查已安装的程序包生成的文件是否被改变
表示 /usr/share/doc/tree-1.6.0/LICENSE文件的S、5、T发生改变了
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文件被删除
(3)基于yum命令实现程序包管理
yum [options] [command] [package ...]
安装:install
yum install PACKAGE_NAME
yum install /PATH/TO/PACKAGE_FILE
yum reinstall PACKAGE_NAME:重新安装
yum groupinstall "GRP_NAME":安装包组(安装包组中的所有程序包)
卸载:remove
yum remove PACKAGE_NAME
yum groupremove "GRP_NAME":卸载包组(卸载包组中的所有程序包)
注意:卸载程序包时,依赖于此程序包的其他程序包将会被一起卸载
查询:
查询包
yum info PACKAGE_NAME:查询指定包的简要信息
yum search KEYWORD:查询KEYWORD相关的包(匹配包名)
yum search all KEYWORD (匹配包名,匹配包的简要信息)
yum check-update :查询是否有可升级的程序包
yum list PACKAGE_NAME:查询指定程序包是否已安装
yum list all:显示所有程序包
yum list installed:显示已安装的程序包
yum list availiable:显示能安装但尚未安装的程序包
yum provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
yum clean all:清理所有缓存
yum makecache ;手动生成缓存
查询包组:
yum grouplist:显示当前系统的所有包组
yum groupinfo "GRP_NAME":显示指定包组中的程序包的相关信息
查询仓库:
yum repolist :显示当前系统中可用的仓库
yum repolist enabled:(可用的),等同于yum repolist
yum repolist all:显示当前系统所有仓库
yum repolist disabled:显示当前系统中禁用的仓库
yum repoinfo [all|enabled|disabled] 显示仓库的相关信息
升级:
yum update PACKAGE_NAME
降级:
yum downgrade PACKAGE_NAME
(4)补充: dnf管理工具:yum的升级版工具
(1)使用yum info dnf 查询dnf程序包相关信息
(2)使用yum inst dnf安装dnf
这样就可以使用dnf命令管理包了