第一、程序包的定义
程序包管理:
内核功能:进程管理:内存管理,网络协议栈、驱动程序……………
应用程序
Linux常用包管理器、打包、包管理(安装、升级、卸载、查询、校验)
deb:debian 早期程序包管理
rpm:redhat (redhat package manage---> (标准)
RPM is Package Manager( 采用C语言实现、目前成为Linux包的标准)
第二、程序包组成
程序包组成4类:
二进程制程序(/bin,/sbin ,/usr/bin,/usr/sbin
库文件(共通的功能,通过库形式提供/lib64,/usr/lib64
配置文件:/etc
帮助文件:manual,info
第三、包管理器功能
打包:前以上类型文件存放在一个单一的归档文件中,支持包管理的功能)
安装: 将相应文件安装到相应的位置,执行文件在/bin,/usr/bin
卸载:
升级:新版本替换旧版本程序
查询:安装信息
检验:检验的二个方面:来源的合法性、完整性,基于md5
第四、rpm包工具
rpm利用rpmbuild创建:依赖于specs文件,每个文件存在不同的路径
10,5,3,2(说明10个功能包,5个常用,3个次常用、2个很少用)
RPM分包机制: 例如:testapp-version.tar.gz ,(tar.gz归档压缩格式)
testapp-version 核心包(主包)
testapp-develp-version 支包(分包)
一个包分多个片,安装时安装需要的小包
第五、RPM包的命名
version:主版本号---- 次版本号------ realese(修正)
major. Minor.release(点号分隔)
RPM包的命名机制:
name-verision-release.ARCH.rpm(ARCH架构,RPM特定后缀)
示例:bash-4.2.4.1.el17.x86.rpm
bash_devel-4.2.4-1.e17.x86_64.rpm
4.2.4为version,1el17为release是rpm包release,不是程序包
Release:rpm release el17指redhat 7
libselinux-2.2.2-6.el7.i686.rpm这主包
libselinux-devel-2.2.2-6.el17.i686.rpm等为分包
第六:包之间依赖关系
rpm实现基本功能包与包之间有可能存在依赖关系(功能单一),
多个包或工具来完成复杂工作。
Linux为了追踪系统安装的rpm包以及生成的文件有RPM数据库,
记录当前包名、文件、原始检验码、对应关系等。通常在/var/lib/rpm路径下
第七:如何获取rpm包:
获取途径
1、发行版提供的程序包
2、fedora-EPEL 是程序项目 社区组织开源项目提供额外包
3、项目的管方站点: 国内阿里、163等镜像
4、搜索引擎 第三方
http://rpmfind.net http://rpm.pbone.net http://pkgs.org
第八:RPM包管理
1、包挂载
显示OS版本
centos识别光盘使用的文件cdrom,所有文件先挂载后使用
/dev/cdrom-sr0 是一个链接 cdrom-sro系统可能不同
cdrom实际为一个符号链接,采用ls –l显示
-r代表只读,
查看安装包/cdrom/Packages目录下包的数量使用ls |wc –l
2、基于RPM命令支持程序包管理操作
1)安装:
A:命令格式:
NAME
rpm - RPM Package Manager
SYNOPSIS
QUERYING AND VERIFYING PACKAGES:
rpm {-q|--query} [select-options] [query-options]
rpm {-V|--verify} [select-options] [verify-options]
INSTALLING, UPGRADING, AND REMOVING PACKAGES:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE …
命令选项:
--i install
-v显示详细过程 -vv, -vvv
-h hash用#号显示进度
示例:安装包
一般-ivvh更详细的内容:包括安装目录、
示例:删除、卸载包 -e选项代表ease、uninstall
示例:查看包是否安装,后为包名
B:依赖关系
程序包有依赖关系,未安装将被组织
每个rpm包都提供一个或多个capabilitles
--nodeps 忽略依赖关系
--test 只测试
--replacepkgs 重装程序包
--nodeps可放到后面
示例:-- 忽略依赖进行安装,
重新安装并忽略依赖关系
C:安装多个包,后面多个包名即可,并可添加相应的选项
2)升级
A:命令格式
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE …
-UuH:如果有旧版本程序包,则升级,如果没有则安装
-Fvh:如果有旧版程序包,则升级,如果没有则不安装
安装选项
--nodeps
--oldpackage:降级
--force 强制升级
3)卸载
A:命令格式
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME …
--noscripts
卸载指定包名 rpm –e 包名
4)查询
A:命令格式
rpm {--querytags|--showrc}
rpm {--setperms|--setugids} PACKAGE_NAME …
查询选项:
-qa包括所有包 -a所有包 -f由那个生成、-g包组
-qf /path/file 这个文件由那个安装包生成
示例:/etc/fstab文件由setup包生成
-qc 查询指定程序生成那些配置文件
-qd 查询指定安装包生成的文档:一般在doc、man、info
-qi 包名: 指定相关包的相关信息
-ql 查询安装包生成了那些文件的列表:wc-l统计信息
-qR 查看依赖那些程序包
-q –scripts 包名,显示程序包中的脚本
共4类:preinstall安装前准备脚本
postintall 安装后脚本
preuninstall卸载前脚本
postuninstall卸载后脚本
-p :查询针对未安装的程序包文件
安装后可能生成的文件-qpl
5)校验
命令格式:用于检查安装包是否被修改过
rpm {-V|--verify} [select-options] [verify-options]
rpm -V的属性
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 –V zsh :修改zsh安装后通过rpm –ql查看相
关文件,利用vim修改后运行运行查看是被修改,输出如下
6)包校验:
来源合法性验证:非对称加密(利用公钥、私钥)有公钥需要私钥解密。
有私钥需要用公钥解密,如果二次验证码相同说明来源合法
默认情况下公钥在安装盘中存在。其中rpm-gpc-key为公钥
系统自带公钥:
导入密钥:(导入后不会再提醒)将RPM-GPG-KEY-CentOS-7导入
后,将校验安装在光盘package目录的所有包,示例:
rpm –import RPM-GPG-KEY-CentOS-7
用选项-K(大写) 进行校验
完整性验证:单向加密
导入密钥:rpm --import /path/to/file
校验: rpm -K /path/to/RPM_FILE
第九:YUM源管理
1)YUM定义
用于自动更新依赖关系(操作系统提供不好),YUM一次只能安装一
个包,不能够并行运行。
YUM (yellowdog update modfity)
YUM(依赖服务器组件)指定一个包仓库(可不指一个),
每个仓库都有(仓库管理程序包的集合,包名、版本号、依赖关系
都记录在仓库源数据文件当中)。每个仓库都有源数据文件下载缓存,
通过缓存数据文件下载(最新版本源文件包名、版本号、下载关系)YUM
一般是文件服务器。一般源数据文件不会删除,但下载的文件安装完成后下载)
yum install zsh 在仓库找zsh程序包,找最新的同时下载
到本地,放到缓存空间中。所有相关包完成开始类似rpm进行安装
下载后,本地后进行安装。针
YUM通过检验码检测最新版本!新版本将覆盖本地旧版本文件。
2)YUM的配置与使用
A:常用YUM源
常用的YUM源镜像包括aliyun,163,sohu等(EPEL)
mirrors.aliyun.com等
repodata为源数据所在目录的你目录为仓库路径,该目录与服务器对比
yum repositories:提供的三种方式
文件服务器:
ftp://hostmae/Path/to/repo
file:///path/to/repo 本地某个目录
告诉yum来源 mirrors.aliyu.com
B:yum程序(客户端)的配置文件
/etc/yum.conf 全局,对所有都适用的配置
/etc/yum.repos.d/*.repo
一个文件通常用于一个或一组功能相近或相关仓库。
重要是参数指向
C:定义一个仓库指向:
格式:
[REPO_ID]
name=
baseurl=或多个可从中选一个(文件服务器三种定义形式之一),要求包相同
#mirrorlist=互联网上的某个文件 scheme://hostname/path/to/mirror_list_file
enable={1|0} 是否启用
gpgcheck={1|0} 检验,需要key,二端都需要有
gpgkey 互联网路径密钥路径
cost=开销
Repo 路径为仓库路径(示例-Centos aliyun)
仓库指向时可利用的变量:实现引用当前系统的主版本号
$releasever:这条当前OS主版本号
$basearch:当前系统的基本架构
i386,i486,i586,i686,
例如http;//mirrors.magedu.com/centos/$releaser/$basrarch
当7时输出为
http://mirrors.magedu.cm/centos/7/i586
http://mirrors.magedu.cm/centos/$releasever/i586
$releaser/替换7等
步骤1:准备父路径(一般为repodata上一级目录
这里为http://mirrors.aliyun.com/centos/7/os/x86_64/
步骤2: 修改/etc/yum.repos.d目录下CentOS-Base.repo
文件,修改别名(非repo结尾)
步骤3:在/etc/yum.repos.d目录下创建以repo结尾的文件
根据仓库指向定义的格式进行编辑
步骤4:利用yum repolist显示可用仓库
可参考针对epel进行路径fedora-epel指定
yum repolist中status为包的数量
D:YUM命令的使用
命令格式
yum(8) yum(8)
NAME
yum - Yellowdog Updater Modified
SYNOPSIS
yum [options] [command] [package ...]
常用命令
安装 yum install php-mysql (自动解决依赖关系)
卸载yum remove 包名 (依赖所有的包都将卸载)
升级yum update 包名/yum check-update(查验可用升级包)
查询 yum info 包名
yum search zs 基于关键字
yum list all 所有以安装未安装或者yum list 包名(zs*)支持通配符
yum list all|installed|available
yum list all |grep
yum provides /path/to/somefile 文件名 ,程序文件由那个包安装完成
重新安装:reinstall
yum 可安装本地某路径文件 localinstall(旧版本使用)
降级:downgrade
clean:清理缓存:存储文件(后面文件类型)
[ packages | metadata | expire-cache | rpmdb | plugins | all ]
生成缓存:makecache
包组:列出所有包组 yum grouplist 列出所有包组
groupinfo “GRP_NAME”
groupinstall “GRP_NAME”
Groupremove “GRP_NAME”
包组信息:注意名称空格使用双引号 " "
仓库相关命令:repolist
repoinfo[all|enable|disable]
不能同时启动二个yum安装,因为二个yum之间相互隔离
yum help repoinfo
E:使用光盘当做本地仓库
步骤1:定义文件:前提光盘已挂载
步骤2:在/etc/yum.repos.d目录创建centos-local.repo文件
步骤3:编辑文件:使用file:///指明其访问路径
数据越大,优先级低。默认1000
步骤4:yum repolist
F:创建本地仓库
自己利用rpm包创建本地仓库包
yum install createrepo 自动分析源数据包
createrepo /path/to/rpmfiles/
yum分组基于xml定义
yum是包程序前端管理工具
G:DNF(yum的升级版,有suse研发)
可利用yum install dnf进行安装