程序包管理
API: 应用程序接口
ABI:应用二进制接口
unix-like: ELF 的形式
windows:exe,msi形式
库级别虚拟化
使用windows可以有linux的库,或linux可以有windows的库
linux: wine
windows: cywin
开发语言
系统级开发: C/C++,go
应用级开发: java/python/perl/ruby/php
程序格式
源代码: 文本格式的程序代码
二进制格式: 文本格式的程序代码 ---> 编译器 ---> 二进制格式(二进制程序,库文件,配置文件,帮助文件)
java/python 程序格式
源代码: 编译成能够在其虚拟机(jvm/pvm)运行的格式
开发环境: 编译器,开发库
项目构建工具
C/C++:make
java:maven
程序包管理器
源代码--->目标二进制格式--->组织成为一个或有限几个'包'文件
程序包管理器
debian: dpt ,dpkg ".deb"
redhat: rpm,".rpm"
S.u.S.E: rpm,".rpm" 格式与redhat一样,但其内部组织格式已经改变。两个系统的rpm包不能通用
源代码名字
name-VERSION.tar.gz
VERSION:marjor.minjor.release 主版本号.次版本号.版本
rpm命名格式
name-VERSION-release.arch.rpm
VERSION: major.minjor.release
release.arch:rpm包的发行号
arch: 为架构 i386,x64(amd64)
release.os
rpm包分为主包和支包
主包: name-VERSION-release.arch.rpm
支包: name-function-VERSION-release.arch.rpm
function:devel,utils,lib
rpm包存在的依赖关系
前端工具: 自动解决依赖关系
yum: rhel 系列rpm管理工具
agt-get(agt-cahce): dep 包管理工具,agt-cache查询功能
zypper: SUSE的rpm管理器的前端工具
dnf: fedora 22+ 系统上的rpm包管理工具
程序包管理器
功能: 将编译好的应用程序各组件打包成一个或几个程序包文件,从而更方便实现程序包的安装,升级,卸载,和查询等功能
1 .程序包的组成清单(每个程序包都要单独实现)
文件清单
安装或卸载运行的脚本
- 数据库(公共)
程序包的名称和版本
依赖关系
功能说明
安装生成的各文件的文件路径,及校验码信息
/var/lib/rpm
rpm包的数据路径
获取程序包方式
1)系统发行版的光盘或官方的文件服务器(或镜像站点)
2) 项目的官方站点
3) 第三方组织 epel
4) 搜索引擎https://pkgs.org/
http://rpmfind.net/
5)自制rpm包
建议:
检查其合法性
来源合法性
程序包的完整性
centos系统上rpm命令管理程序包
安装,升级,卸载,查询,和效验,数据库维护
rpm 命令:rpm [options] [package_file]
安装:-i,--install
升级:-U,--update -F,--freshen
卸载: -e,--erase
查询:-q,--query
效验:-V,--verify
数据库维护:--buiddb ,--initdb
安装
rpm [--install] [installoptions] [package_file]+
-v
-vvv
installoptions:
-h: 以hash标记输出进度条
--test: 测试安装
--nodeps:忽略依赖关系
--replacepkgs: 重新安装
--noscripts: 不执行安装脚本
注:rpm可以自带脚本
四类:
preinstall:安装过程开始之前运行的脚本%pre,--nopre
postinstall:安装过程完成之后运行的脚本%post,--nopost
preuninstall:卸载过程中,真正开始之前运行的脚本,%preun,--nopreun
postuninstall:卸载过程完成之后,运行的脚本%postun,--nopostun
--nosignature: 不检查签名信息,不检查来源的合法性
--nodigest: 不检查包完整性,md5信息
升级
rpm -U [install-options] <package_file>+
rpm [-F|--freshen] [install-options] <package_file>+
-U: 升级或安装(没有旧的包,会把新的安装上去)
-F:升级 (无包时不安装)
rpm -Uvh
rpm -Fvh
install-options:与上述安装的时参数一样
注意:
1) 不要对内核做升级操作,linux支持多内核版本共存,因此直接安装新版本内核
2)如果某原程序包,的配置文件安装后曾经修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后保留
卸载
rpm [--uninstall|-e] [uninstalloptions] [package]+
uninstalloptions:
--allmatches:卸载所有匹配的指定名称的程序包的各版本
--nodeps: 忽略依赖关系
--test: 测试卸载,dry run 模式
查询
rpm -q [query-options]
query-options
-a,--all,查询所有已安装包
rpm -qa |grep '^z' 查询所有已z开头的程序包
-f,--file: 查询指定文件有哪个程序包提供
rpm -qf 文件名
-g,--group 查询指定包组中包含了哪些包
-p,--package PACKAGE_FILE:对未安装的程序包执行查询操作
--whatprovides <capability> 查询所有需要<capability>才能提供适当功能的包.
--whatprovides <virtual> 查询所有提供<virtual>功能的包
--changelog 查询rpm包的changelog
rpm -q --changelog bash
-l,--list。列出一个程序包生成的文件列表
rpm -ql bash
-i,--info:查询程序包相关的信息,版本号,大小,所属的包组等
rpm -qi bash
-c,--configfiles 查询指定包的配置文件
-d,--docfiles:查询指定程序包所提供的文档
--provides:列出指定程序性包所提供的capability
rpm -q --provides bash
-R,--reuese,查询指定程序包依赖的capability
--scripts:查询程序包自带的脚本
用法
rpm -qpi 包的完整名字 查询未安装程序包的信息
效验
rpm -V|-y|--verify [verify-options]
包来源合法性和完整性验证
来源合法性:数字签名
完整性验证:rpm --import 公钥文件
rpm -k 包名 是手动认证、获取并导入信任的包
centos7
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证:
1)安装此组织签名的程序时,会自动执行验证
2)手动验证:rpm -k 包名
数据库重建
/var/lib/rpm
rpm管理数据库的路径
[root@db02 ~]# ls /var/lib/rpm
Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5
Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername
cenots7: man rpmdb
centos6: man rpm
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb: 初始化数据库,当前无任何数据时,可初始化成一个新的,当前不执行任何操作
--rebuiddb:重新构建,通过读取当前系统上已经安装的程序包进行重新构建
[root@db02 ~]# rpm --initdb --dbpath /tmp/rpm
[root@db02 ~]# ls /tmp/rpm/
Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5
Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername
[root@db02 ~]# rpm --rebuilddb --dbpath /tmp/rpm
[root@db02 ~]# ls /tmp/rpm/
Basenames Dirnames Installtid Obsoletename Providename Sha1header Triggername
Conflictname Group Name Packages Requirename Sigmd5
yum

- client 将yum server URL指向本地
2 .clinet 请求URL,得到yum 文件(包含yum仓库所有包的元数据,和包的依赖关系)
3 .并将其文件缓存到本地
4 . 当需要安装包时,yum 会根据自己当地缓存的文件,查找所需要的包及其依赖关系下载下来
当server 端yum仓库里面发生改变时,client已经把文件yum 元数据缓存到本地了,如何知道server端的数据已经改变了。 yum 元数据文件里有效验码,每次yum请求安装包时,都会对比本地缓存的元数据效验码和服务器的是否一致,如果不一致则更新本地缓存文件。但安装后会被删除
createrepo 创建元数据文件
yum repository
存储了众多rpm包,及包相关的元数据文件(放置于特定目录底下 repodata),因此yum 配置文件的URL所指向的路径,及repodata所在的路径
yum 仓库首先是个文件服务器
file:/// 本地磁盘 最后一个/代表根路径
http://
nfs://
仓库配置文件
[repositorID]
name=
baseurl=URL 仓库的访问路径及repodata所在的路径 可以指明多个
enabled={1|0}
gpgcheck={1|0}
gpgkey={URL} gpg的秘钥文件
enablegroups={roundrobin|priority} 如果定义了多个baseurl,roundrobin 是轮询,从多个baseurl中任选一个,priority 优先级,从第一个开始,随后第二个... 默认: roundrobin
cost= 开销数字,默认1000
$releaserver: 当前OS发行的主版本号
$arch: 平台
$basearch: 基础平台(当前有i386,586,786) 通通理解为i386
$yum0-$yum9 自定义yum变量,创建yum仓库
createrepo
createrepo [options] <directory>
--basedir 指定repodata的路径
yum 客户端
配置文件
/etc/yum.conf:只提供yum指向的公共配置
/etc/yum.repos.d/*.repo 提供一个或多个仓库指向
yum命令用法
yum [options] [command] [package]
help: 查看帮助
repolist: [all|enabled| disabled] 显示仓库列表
yum repolist all
yum repolist disabled
list: 显示程序包
yum list [all|glob_exp1 glob_exp2....]
yum list php* 先php格式的包
yum list [available|installed|updates] [glob_exp1]
available: 所有可用的
installed: 所有安装的
updates: 所有可升级的
安装程序包:
install package1
install package-版本号 指定安装程序包的版本号,yum默认安装的是仓库中的最新版本
升级程序包
update [package1] [package2]
检查可用升级
check-update
卸载程序包
remove|erase package1 其他依赖包也会被卸载
查看程序包 information
yum info gcc
查看指定的特性(可以是某文件)由哪个程序包提供
yum provides /bin/ls
清理本地缓存
clean [packages|metadata|expire-cache|rpmdb|plugins|all]
clean packages 清理程序包
all 代表清理全部
构建缓存
makecache
搜索
search string 已关键字搜索程序包以及summary信息
yum search bash 搜索bash关键字的包
重新安装
reinstall packages
降级
downgrade packages
查询包的依赖关系的capabilities
deplist packages
查看历史事务
yum history
每次yum安装和卸载都称为一次事务
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|status]
yum history list(默认)
yum history status(查看统计信息)
安装升级本地程序包
localinstall rpmfile
localupdate rpmfile1
可用install 替代
包组相关的命令
yum groupinstall "组名"
groupunpdate "组名"
grouplist "组名"
groupinfo "组名"
--nogpgcheck: 禁止gpgcheck
-y:自动回答为yes
-q:启用静默模式
--disablerepo= 临时禁用此处指定的repo
--enablerepo= 临时启用此处指定的repo
--noplugins: 禁用所有插件
网友评论