Linux程序包管理
API:Application Program Interface
ABI:Application Binary Interface
Unix-like
ELF
Windows
exe,msi
库级别的虚拟化
Linux:WinE
Windows:Cywin
系统级开发:
C/C++: http,vsftpd,nginx
应用级开发:
java/Python/perl/ruby/php
java:hadoop,hbase(jvm)
Python: openstack(pvm)
perl:(perl)
ruby:(ruby)
php:(php)
程序格式:
源代码:文本格式的程序代码
二进制格式:文本格式的程序代码--> 编译器-->二进制格式(二进制程序、库文件、配置文件、帮助文件)
java/Python程序格式:
源代码-->目标二进制格式(二进制程序、库文件、配置文件、帮助文件)-->组织成为一个或有限几个"包"文件
安装、升级、卸载、查询、校验
程序包管理器:
debian:dpt,dpkg, ".deb"
redhat:redhat package manager,rpm ".rpm"; rpm is package manager
S.u.S.E:rpm, ".rpm"
Gentoo:ports
Archlinux
源代码:name-VERSION.tar.gz
VERSION: major,minor,release
rpm包命令格式:
name-VERSION-release.arch.rpm
VERSION: major.minor.release
release.arch:rpm包的发行号
release.os: 2.el7.i386.rpm
archetecture:i386,x64(amd64),ppc,noarch
redis-3.0.2.tar.gz-->redis-3.0.2.1.centos7.x64.rpm
拆包:主包和支包
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm包命令格式:
function:devel,utils,libs,...
依赖关系:
X,Y,Z
X-->Y,Z
Y-->A,B,C
C-->Y
前端工具:自动解决依赖关系:
yum:rhel系列系统上rpm包管理器的前端工具
apt-get(apt-cache): deb包管理器的前端工具
zypper:suse的rpm管理器的前端工具
dnf:Fedora22+系统上的rpm包管理器的前端工具
程序包管理器:
功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作
1、程序的组成清单(每个程序包都单独实现)
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包的名称和版本:
依赖关系
功能说明
安装生成的各文件的文件路径及校验码信息
...
/var/lib/rpm/
获取程序包的途径:
(1)系统发行版的光盘或官方的文件服务器(或镜像站点)
http://mirrors.allyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2)项目的官方站点
(3)第三方组织:
EPEL:
搜索引擎
http://pkgs.org
http://rpmfind.net
http://rpm/pbone.net
(4)自己动手,丰衣足食
建议:检查其合法性
来源合法性
程序包的完整性
CentOS系统上rpm命令管理程序包:
安装、升级、卸载、查询、校验和数据库维护
rpm命令:rpm [OPTION] [PACKAGE_FILE]
安装: -i,--install
升级: -U,--update,-F,--freshen
卸载: -e,--erase
查询: -q,--query
校验: -V,--verify
数据库维护:--builddb,--initdb
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
GENERAL OPTIONS:
-v:verbose,详细信息
-vv:更详细的信息
[install-options]
-h:hast marks输出进度条:每个#表示2%的进度
--test:测试安装,检查并报告依赖关系及冲突消息等
--nodeps:忽略依赖关系,不建议
--replacepkgs:重新安装
注意: rpm可以自带脚本:
四类:--noscripts
preinstall:安装过程开始之前运行的脚本,%pre,--nopre
postinstall:安装过程开始之后运行的脚本,%post,--nopost
preuninstall:卸载过程开始之前运行的脚本,%preun,--nopreun
postuninstall 卸载过程开始之后运行的脚本,%postun,--nopostun
-nosignature:不检查包签名信息,不检查来源合法性
-nodigest:不检查包完整性信息
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:升级或安装
-F:升级
rpm -Uvh PACKAGE_FILE...
rpm -Fvh PACKAGE_FILE...
--oldpackage:降级
--force:强制升级
注意:(1)不要对内核做升级操作,Linux支持多内核版本并存,因此,直接安装新版本内核
(2)如果某原程序的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把版本的配置文件重命名(FILENAME.rpmnew)后提供
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸载所有匹配指定名称的程序包的各版本
--nodeps:忽略依赖关系
--test:测试卸载,dry run模式
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本
-a,--all: 查询所有安装的所有包
-f FILE: 查询指定的文件由哪个程序包安装生成
-p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个程序包所依赖
[query-options]
--changelog:查询rpm包的changelog
-l,--list:程序安装生成的所有文件列表
-i,--info:程序包相关的信息,版本号、大小、所属的包组,等;
-c,--configfiles:查询指定的程序包提供的配置文件;
-d,--docfiles;查询指定的程序包提供的文档;
--provides:列出指定的程序包提供的所有的CAPABILITY
-R,--requires: 查询指定的程序包的依赖关系
--scripts:查看程序包自带的脚本片断
用法:
-qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
-qpl PACKAGE_FILE,-qpi PACKAGE_FILE,-qpc PACKAGE_FILE,...
校验:
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
包来源合法性验证和完整性验证:
来源合法性验证:
数字签名:
完整性验证:
获取并导入信任的包制作者的密钥:
对于CentOS发行版:rpm --import /etc/pki/rpm-gpg/RPM-RPG-KEY-CentoOS-7
验证:
(1)安装此组织签名的程序时,会自动执行验证
(2)手动验证,rpm -K PACKAGE_FILE
数据库重建:
rpm管理数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行
获取帮助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb}
--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的,当前有时不执行任何错作;
--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建
博客作业:rpm包管理功能全解