程序包管理一之概论及rpm详解

程序包管理是运维人员的基本工作之一。在操作系统上,不断的安装,卸载,配置应用程序包,让不同程序包运行提供不同的服务;利用某种工具完成某些操作的过程。这就要求运维工作人员熟悉安装,管理应用程序包。 在linux上,程序包主要有两种:tar,rpm包。

Linux程序包管理:

一、概述:

  • 系统接口

API:Application Program Interface  应用编程接口

ABI:APPlication Binary Interface应用二进制接口

不同操作系统,API兼容,ABI不一定相同

Unix-like:

ELF

windows:

exe;msl

  • 跨平台程序

平台不同,二进制程序的类型不同,借助库级别的虚拟化;运行跨系统的二进制程序

linux:WinE

windows:cywin

  • 开发语言分类

系统级开发语言:C/C++  go : httpd,vsftpd,nginx

应用级开发语言:JAVA/python/perl/ruby/PHP :

java:hadoop ,hbase,(jvm虚拟机) j虚拟机 c/c++研发

python:openstack  (pvm虚拟机)

perl:  (rvm解释器)

复杂应用程序糅合不同级别开发语言,系统级语言写程序核心,应用级辅助类的工具程序

  • 语言程序格式

C/C++程序格式:

源代码:文本格式的程序代码

编译开发环境:编译器,头文件,开发库

二进制程序:文本格式的程序代码-->编译器-->二进制程序(二进制程序,库文件,配置文件,帮助文件)

java/python程序格式:

源代码:编译成能够在其虚拟机(jvm/pvm)运行的格式;

开发环境:编译器,开发库,

二进制格式:文本格式的程序代码-->编译器-->二进制程序(二进制程序,库文件,配置文件,帮助文件)

  • 项目构建工具:

借助配置文档,自动决定程序包的编译顺序,依赖关系

依赖于开发环境

c/c++:make

java:maven

二、程序包管理器:

源代码-->目标二进制格式-->把(二进制程序,库文件,配置文件,帮助文件)组织成为一个或几个包文件;

实现程序包安装,升级,卸载,查询,校验功能

  • 程序包管理器类型:

deblan: dpt(命令dpkg) 程序包以“.deb”为后缀

redhat: redhat package manager:rpm(命令rpm) 程序包以“.rpm””为后缀

Su.S.E: rpm包,(命令rpm) 与redhat的rpm包的路径格式不兼容

Gentoo:ports

ArchLinux: 轻量级Linux

  • 程序包命名格式:

源代码:

name-VERSION.tar.gz

VERSION:major.minor.release(主版本号.次版本号.发行号)

例:mysql-5.0.2.tar.gz

rpm包:

name-VERSION-release.arch.rpm

VERSION:major.minor.release(主版本号.次版本号.发行号)

release.arch:rpm包的发行号.操作系统的平台架构类型

release.os: 操作系统类型 (rhat,centos,el7)

arch:i386,X64,ppc,noarch(适用全部平台,java编写)

例:redis-3.0.2-1.centos7.x64.rpm

拆包:拆除多余功能的包,按需安装程序包内的包,分主包和只包

主包:name-VEESION-release.arch.rpm

php-5.4.16-36.el7_1.x86_64.rpm

支包:name-function-CERSION-release.arch.rpm

php-bcmath-5.4.16-36.el7_1.x86_64.rpm

  • 程序包依赖关系:

x,y,z

x-->y,z

y-->a,b,c

c-->D

安装某个主包,必须安装主包依赖的副包

解决依赖关系,使用rpm前端工具

  • 程序包前端工具:

yum:rhel系列上 rpm包管理器的前端工具

agt-get(apt-cache):deb包管理器的前端工具

zypper:suse的rpm管理器前段工具

dnf: Fedora 22+系统上rpm包管理器的前端工具

  • 程序包管理器介绍:

功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便的实现 安装,卸载,查询,校验功能

1.程序包的组成清单(每个程序包都独立实现)

文件清单

安装或卸载时运行的脚本

2.数据库(公共)

存储程序包的名称和版本

依赖关系

功能说明

安装生成的个文件的文件路径及校验码信息;

注意:/var/lib/rpm/  centos程序库的存放位置

  • 获取程序包的途径:

(1)系统发行版的光盘或官方的文件服务器(或镜像站点)

http://mirrors.aliyun.com/

http://mirrors.sohu.com

http://mirrors.163.com

(2)项目的官方站点

http://www.zabbix.com

(3)第三方组织 社区组织维护

EPEL:

搜索引擎:不安全

http://pkgs.org

http://rpmfind.net/

http://rpm.pbone.net/

(4)自已动手,丰衣足食

建议:md5校验,检查其完整性,合法性

来源合法性:

程序包的完整性;

三、centos7系统上rpm命令管理程序包:

安装,升级卸载,查询和校验,数据库维护

rpm命令:rpm [OPTIONS] [PACKAGE_FILE]

安装:-i,--install

升级:-U,--update,--freshen

卸载:-e,--erase

查询:-q

校验:-v

数据库维护:--builddb,--initdb

  • 安装:

rpm {-i|--install} [install-options] PACKAGE_FILE...

rpm -ivh PACKAGE_FILE..

GENERAL OPTIONS:

-v:详细信息

-VV:更详细的输出

[install-options]:

-h:hash marks 输出进度条;每个#表示2%的进度

--test:测试安装,检查并报告依赖关系及冲突消息,并不真正安装程序

--nodeps:忽略依赖关系,强制安装 ,但程序不一定能使用 不建议

--replacepkgs 重新安装

--justdb:更新数据库,但不重新安装

注意:rpm可以自带脚本

四类:

preinstall:安装过程开始之前运行的脚本,%pre --nopre

postinstall:安装过程完成之后运行的脚本 $post --nopost

preuninstall:卸载过程真正开始前运行的脚本 $preun --nopreun

postuninstall:卸载过程中运行的脚本 $postun --nopreun

--nosignature:不检查报名签名信息,不检查来源合法性

--nodigest:不检查包的完整性信息 (校验 MD5)

  • 升级:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE..

rpm {-F|-upgrade} [install-options] PACKAGE_FILE..

[PTIONS]

-U:升级或安装

-F:升级

rpm -UVH PACKAGE_FILE..

rpm -FVH PACKAGE_FILE.

[install-options]:

--oldpackage:降级安装旧版本

--force:强制升级;新版本的程序包不满足老版本的依赖关系 ,强制安装,忽略依赖关系

注意:

(1)不要对内核kernel做升级操作 linux支持多内核并存,因此,直接安装新版本内核即可

(2)如果某源程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重名命为(FILEname.rpmnew)后提供

  • 卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts][--notriggers] [--test] PACKAGE_NAME ...

--allmatches:卸载所有匹配指定名称的程序包的各版本

--nodeps:强制忽略依赖关系

--test:测试卸载:dry run模式

  • 查询:

rpm {-q|--query} [select-options] [query-options] PACKAGE_NAME ...

select-options:

PACKAGE_NAME :查询指定程序包是否安装及安装信息

-a:所有已安装的程序包列表

-f:查询指定的文件由那个程序包安装

-g:查询指定包组中包含哪些包

-p:对未安装的程序包执行查询操作;

--whatprovides CAPABILITY:查询指定的CAPABILITY由那个程序包提供;

--whatrequires CAPABILITY:查询指定的CAPABILITY被那个程序包所依赖;

query-options:

--changelog:查询rpm包的changlog

-l:rpm包生成的所有文件列表

-i:查询程序包相关的信息,版本号,大小,所属包组等等

-c:查询指定的程序包提供的配置文件

-d:查询指定的程序包提供的帮助文档

--provides:列出指定的程序包提供的所有的CAPABILITY. 在确定--whatprovides CAPABILITY

-R:查询指定程序包的依赖关系

--scripts:查询指定程序包自带的脚本片段

用法:

-ql ,-qd,-qc,-qi,-qa PACKAGE_NAME

-qp{i,c,d,f} 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) differsMD5

D Device major/minor number mismatc  主次设备号不配备

L readLink(2) path mismatch 路径不匹配

U User ownership differs

G Group ownership differs      属组比匹配

T mTime differs 时间戳改变

P caPabilities differ

  • 数据库重建:

rpm管理器数据库路径:/var/lib/rpm/

查询操作:通过此处的数据库进行;

NAME

rpmdb - RPM Database Tool

SYNOPSIS

rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]

--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的,当前有时,不执行任何操作

--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建

例:

[[email protected] ~]# mkdir /tmp/rpm

[[email protected] ~]# rpm --initdb --dbpath=/tmp/rpm/

[[email protected] ~]# ls /tmp/rpm/

Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5

Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

[[email protected] ~]# rpm --initdb --dbpath=/tmp/rpm/

[[email protected] ~]# ls /tmp/rpm/

Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5

Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

[[email protected] ~]# rpm --rebuilddb --dbpath=/tmp/rpm/

[[email protected] ~]# ls /tmp/rpm/

Basenames     Dirnames  Installtid  Obsoletename  Providename  Sha1header  Triggername

Conflictname  Group     Name        Packages      Requirename  Sigmd5

  • 程序包 来源合法性和完整性验证:

来源合法性验证:

完整性验证:

获取并导入信任的包制作者的密钥:

对于Centos发行版来说:rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-centos-7

验正:

(1)安装此组织签名的程序时,会自动执行验证

(2)手动验证:rpm-k PACEAGE-FILE

回顾:

rpm命令实现程序管理:

安装:-ivh --nodepsd,--replacepkgs

卸载:-e,--nodeps

升级:-Uvh,-Fvh --nodeps,--oldpackage

查询:-q,-qa,-qf,-qi,-qd,-qc,-q --scripts,-q --changlog,-q --provides,-q --requires

校验:-v

导入GPG密钥:--import,-K,--nodigest,--nosignature

数据库重建:--initdb ,--redilddb

以上是对程序包管理的概论和对rpm命令的总结,依据此文档可以Centos6.8或7.2系统做练习,熟悉rpm的系列命令。下节将介绍程序包管理之Yum工具的介绍,欢迎阅读,参考。

时间: 2024-08-25 20:19:05

程序包管理一之概论及rpm详解的相关文章

Linux的程序包管理器(上)——rpm详解

在使用Linux操作系统的过程中,我们需要的一些服务(例如Nginx)并没有提供,需要用户自行安装相应的程序包,才能使用相应的服务.本文以CentOS6.6为例,分三小节为读者朋友们尽可能详细的讲解rpm.yum以及程序包的编译安装三种程序包的管理方法. rpm rpm包管理工具是Red Hat公司贡献的一款rpm程序包管理器,在RHEL.CentOS.Fedora.SUSE等主流发行版本中,被广泛使用. rpm包管理工具可用于安装,升级,卸载,重新安装程序:也可以用于查询当前系统上安装了哪些程

#12 程序包管理与rpm命令的使用

Linux的程序包管理: 程序:指令+数据 程序:算法+数据结构 应用程序的存在形式: 1.源代码:包含了整个应用程序的编程语言的所有代码的文本文件: 2.二进制:将源代码经过一系列的转换操作之后得到的可以直接执行的文件 使用源代码安装应用程序: 预处理(预处理器) --> 编译(编译器) --> 汇编(汇编器) --> 链接(链接器) --> 可以直接执行的二进制程序文件 POSIX:POS,Portable Operating System,可移植操作系统 API:Applic

程序包管理rpm、quota、磁盘配额

下面介绍的是磁盘配额.quota及相关命令.rpm程序包管理器.rpm命令行工具的功能等. 一.磁盘配额 1.磁盘配额功能:磁盘配额可以用来构建文件服务器. 文件服务器功能:用来共享存储空间,让用户能够随时存储数据. 常见的文件服务器有FTP.SMB.网盘.网盘(极速上传) 磁盘配额主要是针对这类文件服务器进行用户的磁盘空间使用限制而提出的. 2.磁盘配额的设定对象 (1).能够实施读写操作的块设备: (2).要有正确的文件系统. 3.磁盘配额主要限制哪些人的访问行为 (1).用户 磁盘配额为指

linux的程序包管理-rpm

我们知道,程序就是指令加上数据的集合或者称为算法加上数据结构的集合.应用程序以源代码和二进制的形式存在:源代码是包含了整个应用程序的编程语言的所有代码的文本文件:二进制则是将源代码经过一系列的转换操作之后得到的可以直接执行的文件.    使用源代码安装应用程序的步骤为:预处理(预处理器) --> 编译(编译器) --> 字节码 --> 汇编(汇编器) --> 链接(链接器) --> 可以直接执行的二进制程序文件.当我们使用源代码安装应用程序时,不同操作系统的相同操作安装出来的

Linux系统管理-(8)-RPM程序包管理器

Centos下RPM程序包管理器:     安装:     rpm {-i|--install} [install-options] PACKAGE_FILE ...            -v: 显示过程            -vv:  显示更详细的过程            -h: 以#显示程序包管理执行进度:每个#表示2%的进度          其他选项: --test 测试安装 --nodeps:忽略依赖关系:                    --replacepkgs: 重新

以rpm为后端及以yum为前端工具的程序包管理器在Linux发行版系统centos中的使用

程序包管理: 应用程序的安装,实际上是解压缩并复制程序包中的文件到指定目录的过程: 程序包管理器: 方便终端用户进行程序的安装.卸载.升级.安装信息查询及校验等工作: 不同的Linux的发行版本中,有不同的程序包管理器: Debian:dpt:Redhat:rpm:S.u.S.E:rpm:Gentoo:借鉴了FREEBSD的portage程序包管理机制,ports方式,emerge工具:ArchLinux:pacman 以CentOS为例,rpm程序包管理器: rpm程序包的命名规则: 源代码包

RHEL程序包管理

RHEL程序包管理 YUM : Yellowdog UpdateModifier RPM : RPM is PackageManager 一.程序包管理 1.程序包的命名格式: 程序包的命名经过多个过程,最初状态是由程序员编写后以program_name-VERSION的形式打包共享的.编译之后会加上相应的适用硬件架构平台ARCH. program name-VERSION.tar.gz 编译:--> 归档压缩 programname-VERSION-ARCH.tar.gz 包管理器:-->

CentOS程序包管理、上

程序包管理:应用程序的安装,实际上是解压缩并复制程序包中的文件到指定目录的过程: 应用程序的结构形式: 源代码: 包含了整个应用程序完整的编程语言的所有代码的文本文件集合: 使用源代码安装应用程序: 编译开发环境:编译器(gcc, GNU C Compiler),开发库,头文件,... 预处理(预处理器) --> 编译(编译器) --> 汇编(汇编器) --> 链接(链接器) -->可以直接在CPU上运行的二进制程序文件: API:Application Programing In

学习笔记之Linux程序包管理rpm、yum、编译

无论是Windows系统还是Linux系统,我们用户想要在操作系统上获得更多的乐趣还是更多的功能的话,就需要在一个干净的系统上安装各式各样的软件程序,Linux上的是ELF格式的,目前比较常见的程序包管理器如: Redhat软件包管理器---rpm Debian软件包管理器---dpkg 一.1.RPM 安装:rpm {-i|--install} [install-options] PACKAGE_FILE... -v: verbose,详细信息 -vv: 更详细的输出 -h: hashmark