程序包管理
内核功能:进程管理、内存管理、网络协议栈、驱动程序、...
应用程序:特定功能
包管理器:打包,包管理(安装、升级、卸载、查询及校验)
- deb: debian
- rpm: redhat package manager
- RPM is Package Manager(包管理器)
程序包的组成部分:
二进制程序:/bin, /sbin,/ /usr/bin, /usr/sbin,
库文件:/lib64, /usr/lib64(程序共通的功能,代码运行时可以共通)
配置文件:/etc
帮助文件:manual, info,
包管理器:
打包:诸多文件一个单一的归档文件中;
安装:打包文件展开,把文件放在应该放在的路径上
卸载:收集起来,删除
升级:替换
查询:
校验:
安装检查来源的合法性、完整性;
rpm包:rpmbuild: 提供specs文件,以specs打包;
10功能:5, 3, 2
分包机制:testapp-VERSION.tar.gz
- 核心包:testapp-VERSION
- 支包:testapp-devel-VERSION
VERSION:major.minor.release
- base-4.2.4.tar.gz
rpm包的命名机制:
name-VERSION-RELEASE.ARCH.rpm
bash-4.2.4-1.el7.x86_64.rpm
bash-devel-4.2.4-1.el7.x86_64.rpm
RELEASE: rpm release
包和包之间:有可能存在依赖关系:
X --> Y
rpm数据库:/var/lib/rpm/(redhat,centos)
如何获取rpm包:
1、发行版提供的程序包;(iso)
2、Fedora-EPEL
3、项目的官方站点
4、搜索引擎
- http://rpmfind.net
- http://rpm.pbone.net
- http://pkgs.org
CentOS识别光盘用的设备文件:/dev/cdrom,
基于rpm命令实现程序包管理:
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
- -i:
- -v:显示详细过程,-vv, -vvv
- -h:
每个rpm包都提供一个或多个能力,当那个能力没有安装的话就不能安装
--nodeps:忽略依赖关系安装(安装后可能不能使用)
--replacepkgs:重装程序包
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
- -Uvh: 如果有旧版程序包,则升级之;如果没有,则安装之;
- -Fvh: 如果有旧版程序包,则升级之;如果没有,则不安装;
- --nodeps
- --oldpackage:降级;
- --force:其他相关联的文件不允许升级,使用此选项
卸载:
rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--nodeps:常用选项
查询:
rpm {-q|--query} [select-options] [query-options]
- -qa: 查询本机已经安装的所有程序包;
- -qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;
- -qc: 查询指定程序包安装生成的配置文件
- -qd: 查询指定的程序包安装生成的文档
- -qi: 查询指定的程序包的相关信息;
- -ql: 查询程序包安装生成的所有文件的列表;
- -q --scripts:查询程序包相关的脚本:
preinstall: 安装前脚本
postinstall:安装后脚本
preuninstall: 卸载前脚本
postuninstall: 卸载后脚本
- -p: 查询针对是未安装的程序包文件;
qpi:预计安装的信息
qpl:预计安装后的文件目录
校验:
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
- 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 --import /PATH/TO/KEY_FILE
校验:rpm -K /PATH/TO/RPM_FILE
YUM: Yellowdog Updater Modified--前端管理工具
文件服务器:
ftp://hostname/PATH/TO/REPO
http://hostname/PATH/TO/REPO
file:///PATH/TO/REPO
yum程序的配置文件:
/etc/yum.conf
定义全局配置:对所有仓库都适用的配置
/etc/yum.repos.d/*.repo
一个文件通常用于一个或一组功能相近或相关的仓库
定义一个仓库指向:
[REPO_ID]
name=
baseurl=(3个路径之一)
# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE
enabled={1|0}
gpgcheck={1|0}
gpgkey=
cost=仓库的开销
以阿里云举例
定义仓库指向可用变量:
$releasever: 引用当前系统的主版本号;
$basearch: 当前系统的基本架构;
i386, i486, i586, i686: i386
http://mirrors.magedu.com/CentOS/$releasever/os/$basearch
yum命令:
yum [options] [command] [package ...]
安装:install
卸载:remove
升级:update
查询:
- info(首字段)
- search KEYWORD(字段内)
- list all|installed|availiable
- provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成
重新安装:reinstall
降级:downgrade
清理缓存:clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
生动生成缓存:makecache
注意:指向repodata的父目录
包组:
grouplist
groupinfo "GRP_NAME"
groupinstall "GRP_NAME"
groupremove "GRP_NAME"
仓库:
repolist [all|enabled|disabled]
repoinfo [all|enabled|disabled]
如何使用光盘当做本地仓库:
挂载光盘至某目录
定义仓库,使用file:///指明其访问路径;
创建本地仓库:
yum install createrepo
createrepo /PATH/TO/RPMFILES/
1.创建目录
2.目录rpm包
3.createrepo -v 目录名
4.yum clean all
5. yum makecache
另外:
当外网下载一个rpm包,当要使用仓库的依赖文件
yum install ...rpm -y
下一代的前端:dnf