CentOS程序包管理器rpm、yum以及程序包编译安装详解

一、程序包管理器RPM和Yum简介

程序包管理器:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,可以更方便地实现程序包的安装、升级、卸载和查询等管理操作。

rpm软件包管理器(RPM Package Manager):rpm包存在依赖关系,依赖关系复杂,安装时间很长,虽然可以忽略依赖关系,但是可能会导致程序包安装后无法正常使用。

yum程序包管理器( Yellow dog Updater, Modified):yum是基于RPM包管理,自动解决程序包间的依赖关系。根据配置文件的资源地址找到远程服务器主机,服务器先会把程序包仓库元数据发送给本地,存储在cache;当有yum请求时,本地主机首先会通过cache中的程序包仓库元数据分析所需安装程序的依赖关系,然后查询本地,把剩余所需的程序包列出,从服务器下载所需程序包文件到本地;然后再开始安装程序,安装完成后自动删除本地已安装的程序包文件,但保留程序包仓库元数据,之后每次发生yum请求时,本地主机会向服务器请求程序包元数据校验码,判断存储在本地的元数据是否发生变化,如发生变化会重新下载。

注意:如果yum在安装程序的过程中终止,重新启动无法解决,无法判断程序是否安装成功。dnf可以解决此问题(在此不做详解)。

二、rpm程序包管理器详解

获取程序包的途径:

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

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

(2)项目的官方站点

(3)第三方组织:

(a)EPEL

(b)搜索引擎

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

(4)自动动手生成

注:在使用程序包之前建议先检查其来源合法性和完整性。

rpm命令:rpm  [OPTIONS] [PACKAGE_FILE]

安装:-i,--install

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

卸载:-e,--erase

查询:-q,--query

校验:-V,--verify

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


安装: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:安装过程中不检查包完整性信息;

--noscripts:禁运行rpm自带的脚本

注:rpm可以自带脚本,脚本共有四类:

Preinstall(%pre):安装过程开始之前运行的脚本,禁运行:--nopre

Postinstall(%post):安装过程完成之后运行的脚本,禁运行:--nopost

Preuninstall(%preun):卸载过程真正开始执行之前运行的脚本,禁运行:--nopreun

Postuninstall(%postun):卸载过程完成之后运行的脚本,禁运行:--nopostun

升级:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...:升级或安装

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...:仅升级

常用升级命令组合: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]

常用查询命令组合:

对已安装的包进行查询:

-qi  PACKAGE:查询程序包的相关信息

-qf  FILE:查询指定的文件由哪个程序包安装所生成的

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

-ql  PACKAGE:程序安装生成的所有文件列表

-qd  PACKAGE:查询指定的程序包提供的文档

对未安装的包进行查询:

-qpi  PACKAGE_FILE: 查询程序包的相关信息

-qpl PACKAGE_FILE:查询程序包安装后会生成的所有文件列表

-qpc PACKAGE_FILE:查询程序包安装后会生成的配置文件

[select-options]

PACKAGE_NAME:查询指定的程序包是否已经安装,并显示其版本;

-a,--all:查询所有已经安装过的包;

-f  FILE:查询指定的文件由哪个程序包安装所生成的;

-p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;

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

--whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

[query-options]

--changelog:查询rpm包的changlog(修改日志);

-l,--list:程序安装生成的所有文件列表;

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

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

-d,--docfiles:查询指定的程序包提供的文档;

--provides:列出指定的程序包提供的所有的CAPABILITY;

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

--scripts:查看程序包自带的脚本片断;

校验: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(MD发生了改变);

D:Device major/minor number mismatch(主次设备号发生了改变);

L:readLink(2) path mismatch (readLink路径发生了改变);

U:User ownership differs(属主发生了改变);

G:Group ownership differs(属组发生了改变);

T:mTime differs(最近一次修改时间的时间戳发生了改变);

P:caPabilities differ(CAPABILITIES发生了改变)。

程序包来源合法性和完整性验正过程简述:

1.程序包制作者首先通过使用单向加密算法生成特征码;

2.然后用私钥加密特征码生成该程序包的数字签名;

3.使用者先用制作者公钥解密特征码,来验证程序包来源的合法性;

4.然后使用相同的单向加密算法产生特征码,与程序包自带的特征码进行对比,以此来验证程序包的完整性。

获取并导入信任的包制作者的密钥:对于CentOS发行版来说, 以CentOS7为例,rpm安装后系统会自动把秘钥复制到此路径:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

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

(2) 手动验正:rpm -K PACKAGE_FILE

数据库重建:

rpm管理器数据库路径:/var/lib/rpm/,查询操作都是通过查询此处的数据库进行的。

获取帮助:

CentOS6:man rpm

CentOS7:man rpmdb

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

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

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

三、yum程序包管理器详解

yum repository(yum repo):存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata)。

yum客户端:

配置文件:

/etc/yum.conf:为yum命令提供配置,为所有仓库提供公共配置(man yum.conf可以查看详细说明)。

[main]

cachedir=/var/cache/yum/$basearch/$releasever

keepcache=0                本地缓存文件使用完后是否保存

debuglevel=2               yum安装完程序包后的调试级别

logfile=/var/log/yum.log

exactarch=1                在安装程序包时是否进行精确平台匹配

obsoletes=1

gpgcheck=1                 安装程序包时是否检查其合法性和完整性

plugins=1                  是否支持插件

installonly_limit=5        允许一批同时安装程序包的数量

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum

distroverpkg=centos-release

/etc/yum.repos.d/*.repo:为指定的仓库提供配置,方便管理

仓库指向的定义:

[repositoryID]

name=Some name for this repository

baseurl=url://path/to/repository/            仓库访问路径,可指明多个url

enabled={1|0}                                是否启用此仓库,不写默认启用

gpgcheck={1|0}                               对此仓库程序包安装时是否检查合法性和完整性

gpgkey=URL                                   指明秘钥文件的访问路径

enablegroups={1|0}                           是否支持在此仓库上使用组批量管理程序包

failovermethod={roundrobin|priority}         故障转移方法

当有多个baseurl时使用,默认为roundrobin(随机挑选)

cost=                                        指明该仓库开销,默认为1000

yum命令的用法:yum [options] [command] [package ...]

command is one of:

* install package1 [package2] [...]

* update [package1] [package2] [...]

* update-to [package1] [package2] [...]

* check-update

* upgrade [package1] [package2] [...]

* upgrade-to [package1] [package2] [...]

* distribution-synchronization [package1] [package2] [...]

* remove | erase package1 [package2] [...]

* list [...]

* info [...]

* provides | whatprovides feature1 [feature2] [...]

* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

* makecache

* groupinstall group1 [group2] [...]

* groupupdate group1 [group2] [...]

* grouplist [hidden] [groupwildcard] [...]

* groupremove group1 [group2] [...]

* groupinfo group1 [...]

* search string1 [string2] [...]

* shell [filename]

* resolvedep dep1 [dep2] [...]

* localinstall rpmfile1 [rpmfile2] [...]

(maintained for legacy reasons only - use install)

* localupdate rpmfile1 [rpmfile2] [...]

(maintained for legacy reasons only - use update)

* reinstall package1 [package2] [...]

* downgrade package1 [package2] [...]

* deplist package1 [package2] [...]

* repolist [all|enabled|disabled]

* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]

* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

* check

* help [command]

显示仓库列表:

repolist [all|enabled|disabled]

显示程序包:

list:# yum list [all | glob_exp1] [glob_exp2] [...]

# yum list {available|installed|updates} [glob_exp1] [...]

例:

         ~]# yum list php*

安装程序包:

install package1 [package2] [...]

reinstall package1 [package2] [...]  (重新安装)

例:

         ~]# yum install gcc

升级程序包:

update [package1] [package2] [...]

downgrade package1 [package2] [...] (降级)

例:

         ~]# yum update gcc

检查可用升级:

check-update

例:

         ~]# yum check-update gcc

卸载程序包:

remove | erase package1 [package2] [...]

例:

         ~]# yum remove gcc

注意:卸载程序包时,会把依赖于该程序包的程序都卸载了。

查看程序包information:

info [...]

例:

         ~]# yum info gcc

查看指定的特性(可以是某文件)是由哪个程序包所提供:

provides | whatprovides feature1 [feature2] [...]

例:

         ~]# yum provides /bin/ls

清理本地缓存:

clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

例:

         ~]# yum clean all

构建缓存:

makecache

搜索:

search string1 [string2] [...]:以指定的关键字搜索程序包名及摘要信息

例:

         ~]# yum search bash

查看指定包所依赖的capabilities:

deplist package1 [package2] [...]

例:

         ~]# yum deplist gcc

查看yum事务历史:

history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

例:

         ~]# yum history

安装及升级本地程序包:

localinstall rpmfile1 [rpmfile2] [...]

localupdate rpmfile1 [rpmfile2] [...]

注意:使用install也可以完成安装。

包组管理的相关命令:

grouplist [hidden] [groupwildcard] [...]        查看包组

groupinstall group1 [group2] [...]              安装包组

groupupdate group1 [group2] [...]               升级包组

groupremove group1 [group2] [...]               移除包组

groupinfo group1 [...]                          查看包组信息

例:

         ~]# yum groupinstall "Development Tools"

如何使用光盘当作本地yum仓库:

(1) 挂载光盘至某目录,例如/media/cdrom

    ~]# mount -r /dev/cdrom /media/cdrom

(2) 创建配置文件

[CentOS7]

name=

baseurl=file:///media/cdrom

gpgcheck=

yum的命令行选项:

--nogpgcheck:禁止进行gpg check;

-y:自动回答为“yes”;

-q:静默模式;

--disablerepo=repoidglob:临时禁用此处指定的repo;

--enablerepo=repoidglob:临时启用此处指定的repo;

--noplugins:禁用所有插件;

yum的repo配置文件中可用的变量:通过使用变量可是一个配置文件适用于多种场景。

$releasever: 当前OS的发行版的主版本号;

$arch: 平台;

$basearch:基础平台;

$YUM0-$YUM9

创建yum仓库:

createrepo [options] <directory>

四、程序包编译安装详解

testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装

源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行

源代码组织格式:多文件,文件中的代码之间可能存在跨文件依赖关系。

开源程序源代码的获取途径:

官方自建站点:apache.org (ASF)

mariadb.org

...

代码托管站点:SourceForge

Github.com

code.google.com

如何编译C源代码:

前提:提供开发工具及开发环境

开发工具:make, gcc等

开发环境:开发库,头文件

glibc:标准库

通过“包组”提供开发组件

CentOS 6的group: "Development Tools", "Server Platform Development",

第一步:configure脚本(通过autoconf结合一个配置文件生成configure脚本)

(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件(通过automake生成Makefile.in文件)生成makefile;

选项:指定安装位置、指定启用的特性

--help: 获取其支持使用的选项

选项分类:

安装路径设定:

--prefix=/PATH/TO/SOMEWHERE: 指定默认安装位置;默认为/usr/local/

--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;

Optional Features: 可选特性

--disable-FEATURE

--enable-FEATURE[=ARG]

Optional Packages: 可选包

--with-PACKAGE[=ARG]

--without-PACKAGE

(2) 检查所依赖到的外部环境;

第二步:make,根据makefile文件,构建应用程序;

第三步:make install

注:建议在安装前查看INSTALL,README文档。

安装后的配置:

(1) 导出二进制程序目录至PATH环境变量中;

编辑文件/etc/profile.d/NAME.sh,添加export PATH=/PATH/TO/BIN:$PATH

(2) 导出库文件路径

编辑/etc/ld.so.conf.d/NAME.conf, 添加新的库文件所在目录至此文件中;

让系统重新生成缓存:ldconfig [-v]

(3) 导出头文件

基于链接的方式实现:ln -sv

(4) 导出帮助手册

编辑/etc/man.config文件,添加一个MANPATH。

时间: 2024-12-28 22:48:26

CentOS程序包管理器rpm、yum以及程序包编译安装详解的相关文章

linux程序包管理之rpm程序包管理器与yum前端工具

这里主要讲以CentOS为例,rpm程序包管理器的相关内容: CentOS的程序包管理器:   1) 程序包的命名规则:        源代码包:            software_name-VERSION.tar.gz            VERSION:major.minor.release                major:主版本号,通常代表重大功能改进的版本分支:                minor:次版本号,通常代表在某个版本的分支中的某个功能发生变化:     

程序包管理:RPM YUM的总结

程序包管理:RPM YUM的总结 一.RPM的简介 RPM 是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux.S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,是公认的行业标准. 二.RPM程序包管理的用途 1.可以安装.删除.升级和管理软件:当然也支持在线安装和升级软件: 2.通过RPM包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪

程序包管理:rpm&yum命令

1.软件包管理简介 Windows中所有的软件包都不可以直接在linux系统中直接安装使用. linux系统中软件包分类: 源码包(脚本安装包) 源代码直接开放的包,绝大部分是C语言写的: 二进包(源码包编译之后的包.RPM包.系统默认包) 优点:安装快速,简化安装过程但不能看到源代码,例如qq等: redhad系列和ubanto系列最大的区别就是二进制软件包不同,rehad用的二进制包是.rpm包,debin系列用的是deb包,其余的部分两种发行版本基本一致. 源码包的优点: 开源,可以修改源

2015年9月10日课程作业【程序包管理:rpm, yum】_JY1506402-19+liuhui880818

<Linux系统管理> (1)磁盘和文件系统管理: (2)RAID, LVM; btrfs; (3)程序包管理:rpm, yum(dnf) (4)Linux的网络管理; (5)进程和作业管理:htop, glances, tsar: (6)sed和awk: (7)Linux系统的开机启动流程: (8)内核基础知识,内核定制编译: (9)系统安装:kickstart, pxe 一.作业(练习)内容: 1.总结rpm和yum实现程序包的管理功能. 要求:作业要图文并茂 二.完成时间: 2015年9

Linux程序管理之rpm,yum,编译安装详解

操作系统:CentOS 6.7 内核版本:2.6.32-573.el6.x86_64 程序编译概念 程序要在机器上运行,就需要编译,编译针对特定的OS平台和硬件平台,编译后的程序只能运行在特定的软硬平台上  交叉编译:        在测试机上针对其他平台进行程序编译 编译过程:        预编译 -> 编译 -> 汇编 -> 链接            链接:生成库调用的头文件            静态链接:程序文件本身集成所需调用的库文件            动态链接:调用标

包管理器--RPM

由来和简介 在linux的初期,那时候还没有包管理器的概念,每个linux用户都是自己手动编译源码包,进行安装,但是编译是个比较复杂的工作,不是每一个使用linux的人,都有这样的能力去编译和安装程序包. 对于程序包而言,它本身也有组成部分(二进制程序.库文件.配置文件.帮助文件等),它们都分别位于不同的目录,如果是用户自己手动安装,必然卸载的时候,要自己去追踪这些文件.当然,如果想对一个软件进行升级,那更是痛苦不堪的事情.于是,聪明的人类想开发一种软件,它来代替我们去追踪这些包的信息,可以手动

CentOS系统之程序包管理器-RPM

在早期我们使用源代码的方式来安装软件时,都需要先把源程序代码编译成可执行的二进制安装程序,然后进行安装.这就意味着每次安装软件都需要经过预处理-->编译-->汇编-->链接-->生成安装文件--> 安装,这个复杂而艰辛的过程.为简化安装步骤,便于广大用户的安装部署程序,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提供给大家下载,我们只需要根据自己的系统去下载相应的安装包进行安装即可,其类似 Windows 的安装方式,由程序开发者直接在已知的系统上面编译好

程序包管理之rpm/yum/编译

本次操作的环境依然还是在CentOS6.6上. 第一部分:rpm解释说明 1.对rpm包的一些简单的解释 在windows系统中,安装一个程序很简单.直接点击下一步一直安装下去即可.但是在linux系统下,却不是.如果玩转linux系统,却连软甲都不会装,确实有些说不过去.因此,今天写点关于linux程序包管理安装的东西. 1.先对linux软件程序需要的程序包进行一定的了解.所谓程序包,其实就是所需程序的安装包.在不同的linux系统上,程序包的格式以及管理工具也有些不同在redhat上以rp

LINUX 程序包管理:rpm/yum/编译

Linux怎样进行软件安装?  说到这个软件安装,习惯windows下安装软件的朋友肯定会说,so easy 不就是不停的下一步呗,但是在Linux系统当中安装软件可不是那么简单的事情,虽然linux也可以在图像界面下类似的向windows下点击下一步的方式安装,但这对你的逼格的提升可没有效果,下面就给大家介绍一下Linux的软件安装. Linux的软件包分为俩种: 源码包 二进制包 所谓的源码包就是指软件的开发者用文本处理器编写的程序代码,是写给人类看的程序语言,但机器并不认识所以无法执行.