1、程序包管理概述php
1.程序包语言前端
(1)系统级开发:通常直接调用硬件java
C/C++:httpd, vsftpd, nginxnode
go语言python
(2)应用级开发:java/Python/perl/ruby/php:nginx
java: hadoop, hbase, (基于jvm虚拟机)c++
Python:openstack, (基于pvm虚拟机)web
perl: (perl解释器)数据库
ruby: (ruby解释器)express
php: (php解释器)
2.程序语言格式
(1)C/C++程序格式:
源代码:文本格式的程序代码;
编译开发环境:编译器、头文件、开发库
二进制格式:文本格式的程序代码 --> 编译器 --> 二进制格式(二进制程序、库文件、配置文件、帮助文件)
(2)java/python程序格式:
源代码:编译成可以在其虚拟机(jvm/pvm)运行的格式;
开发环境:编译器、开发库
二进制
3.项目构建工具:
c/c++: make
java: maven
4.程序包管理器:要完成安装、升级、卸载、查询、校验(校验为Linux全部)功能
(1)功能
将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操做;
(2)组成方式
1)程序包的组成清单(每一个程序包都单独实现):文件清单、 安装或卸载时运行的脚本
2)数据库(公共):/var/lib/rpm/
程序包的名称和版本、依赖关系、 功能说明、安装生成的各文件的文件路径及校验码信息...
(3)不一样系列Linux所用程序包管理器:
debian:dpt, dpkg, ".deb"
redhat:redhat package manager, rpm, ".rpm"; rpm is package manager;
S.u.S.E:rpm, ".rpm",
Gentoo:ports
ArchLinux:
5.包的命名格式
(1)源代码:name-VERSION.tar.*z
VERSION:major.minor.release 主版本号.次版本号.发行号
(2)RPM包:name-VERSION-release.arch.rpm
VERSION:major.minor.release
release.arch:rpm包的发行号,arch 平台号
6.RHEL制做RPM包时会拆包:主包和支包,方便安装所须要组件而非所有
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
function(功能):devel, utils, libs, ...
7.程序包管理器前端工具:自动解决依赖关系;
yum:rhel系列系统上rpm包管理器的前端工具;
apt-get (apt-cache):deb包管理器的前端工具;
zypper:suse的rpm管理器前端工具;
dnf:Fedora 22+系统上rpm包管理器的前端工具,yum的升级版;
8.获取程序包的途径:
(1)系统发行版的光盘或官方的文件服务器(或镜像站点):
http://mirrors.aliyun.com、http://mirrors.sohu.com、http://mirrors.163.com
(2)各个项目本身的官方站点
(3)第三方组织:
1) EPEL等可靠地开源社区组织
2) 搜索引擎:http://pkgs.org、 http://rpmfind.net 、http://rpm.pbone.net
(4)自动编译二进制代码、制做
2、RPM包管理
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安装:-i, --install
升级:-U, --update, -F, --freshen
卸载:-e, --erase
查询:-q, --query
校验:-V, --verify
数据库维护:--builddb, --initdb
1.安装:
(1)rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_FILE ...
GENERAL OPTIONS(通用选项):
-v:verbose,详细信息
-vv:更详细的输出
[install-options]:
-h:hash marks输出进度条;每一个#表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等;
--nodeps:忽略依赖关系;不建议;
--replacepkgs:从新安装
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;
注意:rpm能够自带脚本;
四类:--noscripts
preinstall:安装过程开始以前运行的脚本,%pre , --nopre
postinstall:安装过程完成以后运行的脚本,%post , --nopost
preuninstall:卸载过程真正开始执行以前运行的脚本,%preun, --nopreun
postuninstall:卸载过程完成以后运行的脚本,%postun , --nopostun
(2)实例演示
1)[root@localhost Packages]#rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm #安装zsh程序,显示过程
[root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:zsh-5.0.2-28.el7 ################################# [100%]
2.升级:
(1)rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:升级或安装 -Uvh; rpm -Uvh PACKAGE_FILE ...
-F:纯粹升级,必须存在老版本,不支持安装操做 -Fvh rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级;
--force:强制升级;
注意:
1) 不要对内核作升级操做;Linux支持多内核版本并存,可直接安装新版本内核;
2) 若是某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件 不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
(2)实例演示
[root@localhost Packages]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm
[root@localhost Packages]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm 准备中... ################################# [100%] 软件包 zsh-5.0.2-28.el7.x86_64 已经安装
3.卸载:
(1)rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸载全部匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系
--test:测试卸载,dry run模式
(2)实例演示
1)[root@localhost Packages]#rpm -e --test zsh #测试卸载zsh
[root@localhost Packages]#rpm -ql zsh #查看zsh程序安装所生成的全部文件列表
结论:--test不会真的卸载程序
[root@localhost Packages]# rpm -e --test zsh [root@localhost Packages]# rpm -ql zsh /bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile
2)[root@localhost Packages] rpm -e zsh
#卸载程序
[root@localhost Packages]# rpm -e zsh [root@localhost Packages]# rpm -ql zsh 未安装软件包 zsh [root@localhost Packages]#
4.查询:
(1)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包的changlog;
-l, --list:程序安装生成的全部文件列表;
-i, --info:程序包相关的信息,版本号、大小、所属的包组,等;
-c, --configfiles:查询指定的程序包提供的配置文件;
-d, --docfiles:查询指定的程序包提供的文档;
--provides:列出指定的程序包提供的全部的CAPABILITY;
-R, --requires:查询指定的程序包的依赖关系;
--scripts:查看程序包自带的脚本片段;
用法总结:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, ...d
(2)实例演示
1)[root@localhost Packages]# rpm -ql sed
#查询程序安装因此生成的全部文件列表
[root@localhost Packages]# rpm -ql sed
2)[root@localhost Packages]# rpm -qi sed
#显示程序的相关信息
[root@localhost Packages]# rpm -qi sed Name : sed Version : 4.2.2 Release : 5.el7 Architecture: x86_64 Install Date: 2018年12月10日 星期一 05时28分49秒 Group : Applications/Text Size : 601208 License : GPLv3+ Signature : RSA/SHA256, 2014年07月04日 星期五 12时58分02秒, Key ID 24c6a8a7f4a80eb5 Source RPM : sed-4.2.2-5.el7.src.rpm Build Date : 2014年06月10日 星期二 09时01分55秒 Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://sed.sourceforge.net/ Summary : A GNU stream text editor Description : The sed (Stream EDitor) editor is a stream or batch (non-interactive)
3)[root@localhost Packages]# rpm -qd sed #查看包所提供文档位置
[root@localhost Packages]# rpm -qd sed /usr/share/doc/sed-4.2.2/AUTHORS /usr/share/doc/sed-4.2.2/BUGS /usr/share/doc/sed-4.2.2/COPYING /usr/share/doc/sed-4.2.2/COPYING.DOC /usr/share/doc/sed-4.2.2/NEWS /usr/share/doc/sed-4.2.2/README /usr/share/doc/sed-4.2.2/THANKS /usr/share/doc/sed-4.2.2/sedfaq.txt.gz /usr/share/info/sed.info.gz /usr/share/man/man1/sed.1.gz
4)[root@localhost Packages]# rpm -qc zsh #显示zsh相关的配置文件的位置
[root@localhost Packages]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc
5)[root@localhost Packages]# rpm -q --changelog zsh #查询zsh的改变日志
# 从近到远显示出该程序每次改版更新的相关信息
[root@localhost Packages]# rpm -q --changelog zsh \* 四 2月 16 2017 Kamil Dudka <kdudka@redhat.com> - 5.0.2-28 - zero new space allocated in prompt buffer (#1408619) * 一 11月 28 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-27 - fix parsing of parameter subscript expression with NOEXEC (#1398740) * 一 10月 17 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-26 - fix crash while parsing the here-document syntax (#1374752) * 四 7月 14 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-25 - improve use of new command substitution in completion (#1356388) * 五 6月 10 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-24 - fix off-by-one error in completion utility cache code (#1344599)
5.校验:
(1)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 #MD5校验码是否改变
D Device major/minor number mismatch #设备的主次版本号是否错配
L readLink(2) path mismatch # readlink路径是否错配
U User ownership differs #用户自己关系
G Group ownership differs # 用户组自己关系
T mTime differs # 修改时间modify time
P caPabilities differ
(2)实例演示
测试安装的程序的校验信息
[root@localhost Packages]# rpm -ivh --nodeps php-5.4.16-45.el7_0.3.x86_64.rpm
[root@localhost Packages]# rpm -V php
# 忽略依赖关系安装php程序,此处为了测试使用
#测试程序的校验信息
[root@localhost Packages]# rpm -ivh --nodeps php-5.4.16-45.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:php-5.4.16-45.el7 ################################# [100%] [root@localhost Packages]# rpm -V php 未知足的依赖关系 php-5.4.16-45.el7.x86_64: php-common(x86-64) = 5.4.16-45.el7 被 (已安裝) php-5.4.16-45.el7.x86_64 须要 php-cli(x86-64) = 5.4.16-45.el7 被 (已安裝) php-5.4.16-45.el7.x86_64 须要
6.包来源合法性验正和完整性验证:
(1) 检验方式
数字签名:用私钥加密对应程序的特征码
(2) 获取并导入信任的包制做者的密钥:
[root@localhost rpm-gpg]# cd /etc/pki/rpm-gpg/ [root@localhost rpm-gpg]# rpm --import RPM-GPG-KEY-CentOS-7
(3)验证:
1) 安装此组织签名的程序时,会自动执行验证;
2) 手动验正:rpm -K PACKAGE_FILE
在导入秘钥的CentOS7.1上验证
[root@localhost Packages]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 肯定
7.数据库重建:
(1)rpm管理器数据库路径:/var/lib/rpm/
查询操做:经过此处的数据库进行;
(2)获取帮助:CentOS命令查询位置不一样
CentOS 6:man rpm
CentOS 7:man rpmdb
(3)rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb:初始化数据库,当前无任何数据库可实始化建立一个新的;当前有时不执行任何操做;
--rebuilddb:从新构建,经过读取当前系统上全部已经安装过的程序包进行从新建立;
[--dbpath DIRECTORY] :指明创建位置
(4)实例演示
1)在指定目录下/rpmdb下初始化一个rpm的数据库
注意:此时的库是没用的,因此大小和原来的库不一样
[root@localhost Packages]# rpm -initdb --dbpath /rpmdb/ [root@localhost Packages]# ll /rpmdb/ 总用量 440 -rw-r--r--. 1 root root 8192 12月 16 16:05 Basenames -rw-r--r--. 1 root root 8192 12月 16 16:05 Conflictname -rw-r--r--. 1 root root 311296 12月 16 16:05 __db.001 -rw-r--r--. 1 root root 90112 12月 16 16:05 __db.002 -rw-r--r--. 1 root root 107048 12月 16 16:05 __db.003 -rw-r--r--. 1 root root 8192 12月 16 16:05 Dirnames -rw-r--r--. 1 root root 8192 12月 16 16:05 Group -rw-r--r--. 1 root root 8192 12月 16 16:05 Installtid -rw-r--r--. 1 root root 8192 12月 16 16:05 Name -rw-r--r--. 1 root root 8192 12月 16 16:05 Obsoletename -rw-r--r--. 1 root root 12288 12月 16 16:05 Packages -rw-r--r--. 1 root root 8192 12月 16 16:05 Providename -rw-r--r--. 1 root root 8192 12月 16 16:05 Requirename -rw-r--r--. 1 root root 8192 12月 16 16:05 Sha1header -rw-r--r--. 1 root root 8192 12月 16 16:05 Sigmd5 -rw-r--r--. 1 root root 8192 12月 16 16:05 Triggername
2)查看/var/lib/rpm
[root@localhost Packages]# cd /var/lib/rpm [root@localhost rpm]# ll 总用量 101428 -rw-r--r--. 1 root root 5173248 12月 16 15:55 Basenames -rw-r--r--. 1 root root 16384 12月 13 21:25 Conflictname -rw-r--r--. 1 root root 311296 12月 16 16:02 __db.001 -rw-r--r--. 1 root root 90112 12月 16 16:02 __db.002 -rw-r--r--. 1 root root 1318912 12月 16 16:02 __db.003 -rw-r--r--. 1 root root 1376256 12月 16 15:55 Dirnames -rw-r--r--. 1 root root 32768 12月 16 15:55 Group -rw-r--r--. 1 root root 24576 12月 16 15:55 Installtid -rw-r--r--. 1 root root 81920 12月 16 15:55 Name -rw-r--r--. 1 root root 36864 12月 16 15:55 Obsoletename -rw-r--r--. 1 root root 92139520 12月 16 15:55 Packages -rw-r--r--. 1 root root 2527232 12月 16 15:55 Providename -rw-r--r--. 1 root root 614400 12月 16 15:55 Requirename -rw-r--r--. 1 root root 147456 12月 16 15:55 Sha1header -rw-r--r--. 1 root root 86016 12月 16 15:55 Sigmd5 -rw-r--r--. 1 root root 8192 12月 13 22:33 Triggername
参考博客:https://blog.51cto.com/xuding/1727510