程序包管理,rpm、yum的使用

日期: 2015年09月10日

程序包管理的相关概念:

<<===============================================================================================>>

软件包的组成部分:

1、二进制程序:可执行文件

通常安装在 /bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin, /usr/local/sbin 目录之下

2、库文件:

程序的运行依赖于库文件,Linux的核心库是glibc,某些软件也会将自己的核心文件封装成库文件,

以供其他程序调用或二次开发。

Linux下的库分为静态库和动态库,静态库通常以".a"结尾,动态库通常以".so"结尾。

通常安装在 /usr/lib, /usr/lib64, /var/lib, /usr/local/lib 目录下

★库文件也是可执行程序,但不能直接执行,因为库文件没有执行入口,只能被其他文件调用执行。

调用的两种方式:

开发调用:二进制格式的库

运行调用:文本格式的头文件

函数(参数)头文件  /usr/include, /usr/local/include

#inclue stdio.h

链接程序所要查找动态格式的共享对象库时的路径:

/etc/ld.so.conf

/etc/ld.so.conf.d/*.conf

ldd:用于查看程序或者库文件所依赖的共享库列表

ldd [OPTION]... FILE...

例如:

[[email protected] ~]# ldd /bin/cat

linux-vdso.so.1 =>  (0x00007fffa5ffe000)

libc.so.6 => /lib64/libc.so.6 (0x00007f013c418000)

/lib64/ld-linux-x86-64.so.2 (0x00007f013c7e2000)

3、配置文件:通常是纯文本文件,用来定义程序的特性。

通常存放在:/etc, /usr/etc, /usr/local/etc 或指定的路径下(配置文件一般无需额外配置)

4、帮助文档:man手册、info文件、README、INSTALL、ChangeLog

man COMMAND

到某路径下查找与命令同名的,通常以.gz结尾的压缩文件的名字

/usr/share/man/

man 的配置文件: /etc/man.config

★总结:如果是指定路径安装程序

例如:/usr/local/nginx

二进制程序:bin、sbin

库:lib

头文件:include

配置文件:etc、conf

帮助文件:man

软件包管理器的两个重要功能:

1、数据库:

软件名和版本

安装生成的各文件路径及校验码

各软件包之间的依赖关系

提供功能性说明

rpm -qi FILENAME

2、提供程序组成格式:

文件清单

安装或卸载时运行的脚本

常见的软件包管理器:

Debian系列:dpkg (DebianPackager) 管理 以.deb 结尾的软件包。

“Debian”的“Linux ”发行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix ”等。

RedHat系列: rpm ( RPM isPackage Manager ) 管理 以.rpm 结尾的软件包。

以前是RedHat Package Manager的缩写,现在包括OpenLinux、S.u.S.E.以及TurboLinux等

Linux的分发版本都有采用该包管理器,算是公认的行业标准了。

包管理器的基本功能:

制作程序包

安装程序包

查询程序包

升级程序包

卸载程序包

校验程序包

数据库管理

应用程序的安装方式

1、使用包管理器:便捷、易用

2、包管理器的前端工具:yum

3、简单打包的二进制格式:展开到特定路径下

4、使用源代码编译:

rpm包命名格式:

源程序:PackageName-version.tar.{gz|bz2|xz}

version:major.minor.release

通常版本号(Version)有三个:major.minor.release——主版本号.次版本号.发行号

主版本号:是程序的主要功能发生了巨大的改变时才使用;

次版本号:是在程序的部分功能有重大改变时使用;

发行号:是在修复了一些bug,调整了一些属性后进行的升级。

rpm包:name-version-release.arch.rpm

RPM包的Version号和源程序的版本号需要保持一致,这里的release号通常包含rpm的制作发行号,

和源程序本身没有关系,并且这个Release号可能会标明所适用的操作系统平台。

arch指的是安装在哪种主机平台上,常见的主机平台有:

i686、x86_64、amd64、ppc(powerPC)、noarch(不依赖平台)等。

如:bash-4.3.2-6.el6.x86_64.rpm

表明这是一个bash程序包;其源程序的主版本号为4,次版本号是3,发行号2;

它是第6次修正的RPM包;这个包用在RedHat6的Enterprise版上;适用于x86_64的主机平台。

有些没有指定arch的rpm包,可能是通用版本

如:nginx.1.4.16-5.rpm

rpm包的分包:

将程序的某些功能做成独立的包,让用户选择安装

一个程序可能会有许多功能,其中不少功能是用不上的,如某些程序提供了头文件,用来供程序员

进行二次开发,而普通用户根本不需要对该程序进行二次开发,所以只需要安装该程序的配置文件

和二进制文件就即可。

RPM包可以分为主包(核心包)和分包(支包),其中主包的包名遵循RPM包的基本命名规则。

如:主包:bash-4.3.2-2.el6.x86_64.rpm

支包:bash-hello-4.3.2-2.el6.x86_64.rpm

bash-world-4.3.2-2.el6.x86_64.rpm

DNS: bind, bind-devel, bind-libs, bind-utils

程序包来源合法性验证:

源程序:通过md5或sha1验证码验证

rpm包:发行商提供的合法性是可信的

验证包完整性:校验码

验证来源合法:公钥

获取rpm包的途径:

1、发行商的光盘或站点服务器

以CentOS为例:

http://mirrors.163.com

http://mirrors.sohu.com

2、fedora-EPEL

3、项目的官方站点

4、搜索引擎:

http://rpmfind.net

http://rpm.pbone.net

http://pkgs.org

rpm包管理器的使用:

<<======================================【rpm管理:安装】======================================>>

rpm包管理:安装

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

-v  verbose

-vv

-vvv

-h hash,以#的个数显示安装进度,一个#表示2%的进度;

--test: 仅测试,不真正执行安装过程

每个rpm包都提供一个或多个capability,安装一个程序包时可能需要依赖或被别的包所依赖

如果存在依赖:

解决依赖关系:

忽略依赖关系: --nodeps

重新安装: --replacepkgs

原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件

实例1:安装程序包

实例2:测试安装程序包

实例3:安装程序包时忽略依赖关系

实例4:重新安装已安装过的程序包

<<====================================【rpm管理:卸载】====================================>>

rpm包管理:卸载

rpm -e或--erase

rpm -e package_name

如果卸载被其他程序所依赖的包

1、把依赖者一同卸载;

2、忽略依赖关系;

--nodeps

--noscrips: 卸载时不运行脚本

3、不再卸载

实例:卸载已安装的程序包

实例:卸载时忽略依赖关系

<<======================================【rpm管理:查询】======================================>>

rpm包管理:查询

查询所有已安装的包:rpm -qa

查询某单个包是否安装: rpm -q package_name

查询包安装之后在当前系统生成的文件列表: rpm -ql package_name

查询某文件是哪个包安装生成的: rpm -qf /PATH/TO/SOMEFILE

查询包安装后生成的帮助文档: rpm -qd package_name

查询包安装后生成的配置文件: rpm -qc package_name

查询包的描述信息:rpm -qi package_name

查询包相关的脚本: rpm -q --scripts package_name

脚本有四类:

preinstall: 安装前脚本

postinstall: 安装后脚本

preuninstall: 卸载前脚本

postuninstall: 卸载后脚本

查询尚未安装的rpm包文件:rpm -qp

查询安装后会生成的文件列表:rpm -qpl /PATH/TO/package_file

查询其简单描述信息: rpm -qpi /PATH/TO/package_file

实例1:查询 lsof-4.82-5.el6.x86_64程序包安装后生成的文件列表

实例2:查询/usr/share/man/man8/lsof.8.gz文件是由哪个包安装所生成的

实例3:查询程序包安装后生成有哪些帮助文档

实例4:查询程序包安装后生成的配置文件

实例5:查询程序包安装完后生成的脚本

实例6:查询bash程序包的描述信息

Name:软件名称

Relocations:在安装时是否可指定安装路径(重定位)

Version:版本号

Vendor:提供商

Release:rpm的发行号

BuildDate:rpm包的制作日期

InstallDate:安装时间

Build Host:在哪个系统上制作的rpm包

Group:包组

SourceRPM:源码的rpm包

Size:包大小

License:许可证

Signature:数字签名(验证来源合法性和包完整性)

Packager:包的制作者

URL:获取源码的网址

Summary:简要说明

Description:略详细的说明

<<======================================【rpm管理:升级】======================================>>

rpm包管理:升级

rpm -U: 升级或安装,如果有旧版程序包,则升级,如果没有,则安装

rpm -F: 仅升级,如果有旧版程序包,则升级,如果没有,则不安装

rpm {-Uvh|-Fvh} /PATH/TO/package_file

--nodeps: 忽略依赖关系

--oldpackage: 降级

--force: 强行安装

注意: 不要对内核执行升级操作

多版本内核可并存,因此,要执行安装操作

实例1:升级程序包,升级过程中提示有依赖关系时忽略,继续更新

实例2:把刚升级的程序包降级为原来的版本

<<======================================【rpm管理:校验】======================================>>

rpm包管理:校验

检查包安装后生成的文件是否被修改过

rpm -V package_name

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

校验软件包来源合法性和完整性

包完整性:通过单向加加密机制(md5|sha1)

来源合法性:通过公钥加密机制(RSA)

导入制作者的公钥:CentOS发行版的公钥在iso文件中

导入命令:rpm --import /PATH/TO/gpg-key-file

检查: rpm -K /PATH/TO/package_file

rpm --checksig /PATH/TO/package_file

--nosignature: 不检查来源合法性

--nodigest:不检查完整性

实例1:分别对程序包安装后生成的文件进行改名和修改操作,然后验证

实例2:导入公钥验证软件包的来源合法性和完整性

<<================================【rpm管理:数据库重建】================================>>

rpm包管理:数据库重建

数据库:/var/lib/rpm/

重建:

rpm --initdb:初始化

如果事先不存在一个数据库,则新建

rpm --rebuilddb:重建

直接重建数据,会覆盖原有的库

程序包的依赖关系:

<<===============================================================================================>>

由于许多程序包之间存在这依赖关系,例如A依赖B,而B又依赖X、Y...

所以使用rpm管理器安装或卸载程序时会有诸多不便,很可能安装一个程序包之后由于所依赖的另外一个程序

包没有安装,造成安装失败,或是卸载程序把被其他程序包依赖的包卸载了,导致其他程序无法运行等……

因此为了解决这一问题,后来便有了程序包的前端管理器,它会自动处理程序包之间的依赖关系

前端管理器:

Debian:apt-get

RedHat:yum (Yellowdog Update Modifed)

dnf:下一代解决依赖关系的程序包前端管理器

文件服务器(共享rpm包):通过yum所支持的文件共享机制,将各rpm包通过文件服务共享

repository:仓库

1、各rpm包

2、依赖关系、程序包安装后所能生成文件列表等元数据文件

yum客户端:

1、配置文件:指定各可用的yum仓库

2、缓存元数据: yum会到各可用yum仓库获取元数据,并缓存至本地

3、分析元数据:根据具体操作请求完成元数据分析,可能包括检查依赖关系,文件列表等信息

4、执行具体操作

客户端配置文件指定对应服务器的访问方式

ftp  ftp://server/path/to/repo

http  http://server/path/to/repo

nfs nfs://server/nfs_path

file  file:///path/to/repository

yum程序的配置文件:

<<===============================================================================================>>

要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中

/etc/yum.conf

/etc/yum.repos.d/

配置文件格式:

由两段组成,类似windows的ini配置文件

[main]:主配置段

[repo]:仓库配置段

[[email protected] ~]# cat /etc/yum.conf

[main]

cachedir=/var/cache/yum/$basearch/$releasever   #缓存目录

keepcache=0   #删除缓存中已安装的rpm包

debuglevel=2   #调试级别

logfile=/var/log/yum.log  #日志文件

exactarch=1   #必须跟当前主机的版本完全精确匹配才安装

obsoletes=1   #过去的,废弃的

gpgcheck=1   #是否检验其来源合法性及数据包完整性

plugins=1   #是否支持插件

installonly_limit=5   #

bugtracker_url=   #追踪bug保存的位置

distroverpkg=centos-release

定义一个仓库指向(配置repo):

[repo_ID]

name=仓库描述信息

baseurl=仓库的访问路径

# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE

enabled={1|0}

gpgcheck={1|0}

gpgkey=公钥文件(可以在本地,也可以是服务器端路径)

cost=定义此仓库的开销,默认为1000

例:

repo文件:

[base]

name=CentOS-6 - Base - 163.com

baseurl=http://mirrors.163.com/centos/6/os/x86_64/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

yum配置文件中可用的四个宏:

$releasever: #程序的版本,对yum而言指的是redhat-release版本,只替换为主版本号,RedHat6.5,则替换为6

$arch:  #系统CPU架构

$basearch:   #系统基本架构,如i686,i586等的基本架构为i386

$YUM0-9:  #在系统中定义的环境变量,可以在yum中使用

★宏的作用是变量替换,如:想让不同系统架构都使用同一个repo(通用版本)。

[base]

name=CentOS-$releasever -Base - 163.com

baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

<<=========================================【yum命令】=========================================>>

yum命令

格式:

yum [options] [command] [package ...]

yum的各命令:

repolist [all|enabled|disabled]: 列出所有可用yumrepo

clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理缓存

makecache: 生成缓存

list [all|installed|available]: 列出rpm包

info package_name: 列出包的描述信息

install package_name ... : 安装指定的程序包

reinstall package_name ... : 重新安装指定的程序包

chek-update package_name: 检查可升级的程序包

downgrade package_name: 降级

update package_name: 升级指定的程序包

★直接update 程序包名,将会升级到最新的版本,

如果有多个版本,想升级到指定的版本号,要明确指定版本号

erase|remove package_name... :卸载时所依赖的包也将一并卸载

whatprovides|provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成

history: yum的历史

search KEYWORD:搜索程序包

★安装本地包:

install /PATH/TO/package_file

手动禁止检查来源及完整性: --nogpgcheck

如:

yum install /tmp/finger-0.17-40.el6.x86_64 --nogpgcheck

grouplist: 列出所有包组

groupinstall "group_name": 安装指定的包组

groupremove "group_name" : 卸载指定的包组

groupinfo "package_name": 显示包组相关信息

三个跟开发相关的包组:

Desktop Platform Development :有图形程序时需安装此组

Server Platform Development :服务器平台开发包组

Developmetn tools:开发包组

★提示:

如果系统为CentOS 5,常用的开发包组为"DevelopmentTools" 和 "Development Libraries"

如果系统为CentOS 6,常用的开发包组为"DevelopmentTools" 和 "Server Platfrom Development"

实例1:查看当前系统上所有可用的yum源

实例2:卸载指定的程序包

实例3:检测指定的程序包是否有更新,然后更新程序包

实例4:对指定的程序包进行降级处理

降级完后查看版本:

<<========================================【制作yum源】========================================>>

制作yum源

yum repositories

文件服务器

ftp://hostname/PATH/TO/REPO

http://hostname//PATH/TO/REPO

/PATH/TO/REPO

repodata/

repomd.xml

使用发行版光盘当本地yum仓库:

1、先禁用当前可用的yum仓库,(可把repo配置文件改名)然后执行 yum clean all 命令清空

2、创建一个 local-media-repo 配置文件

[CentOS 6.7 ISO]

name=CentOS 6.7 x86_64 release iso file

baseurl=file:///media/

enable=1

gpgcheck=1

gpgky=file:///RPM-GPG-KEY-CentOS-6

创建本地yum仓库

crepodata是一个目录,里面包含了yum仓库索引文件和rpm包的一些信息。

创建本地yum仓库时使用createropo命令,它会自动创建repodata目录及目录内的数据库文件

createrepo /PATH/DirName

实例:

使用发行版光盘当本地yum仓库

1、先禁用当前可用的yum仓库(修改当前yum仓库配置文件后缀名)

2、插入光盘-->挂载-->

3、在/etc/yum.repo.d/目录下创建repo配置文件local-media-repo,并编辑

4、使用yum repolist 验证,查看当前系统可用yum仓库

时间: 2024-09-29 17:05:52

程序包管理,rpm、yum的使用的相关文章

linux程序包管理 rpm yum 编译

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

linux程序包管理rpm,yum和编译安装以及冒泡排序练习

linux程序包管理: API:Application Programming Interface POSIX:Portable OS 程序源代码--> 预处理--> 编译--> 汇编--> 链接 静态编译: 共享编译:.so ABI:Application Binary Interface Windows与Linux不兼容 ELF(Executable and Linkable Format) PE(Portable Executable) 库级别的虚拟化: Linux: WIN

程序包管理rpm,yum用法解析及自动化部署apache server实战,让您轻松拥有apache网站!

程序包管理器rpm,yum用法及apache httpd服务的自动化部署 程序包管理? 通常来说在windows中将需要安装的程序,程序名.exe下载下来然后点击setup的安装程序或直接点击程序包,下一步下一步即可.而Linux中程序包不是exe,不同的主流发行版有着不同的程序包管理机制.比较主流的主要是rpm程序包管理器和deb程序包管理. 这里要区别: 包名(PACKAGEFILE): rpm包程序文件的全名程序名(PACKAGENAME): rpm包不带版本号的程序名,比如QQ而不是QQ

Linux 程序包管理 rpm yum dnf

Linux程序包管理: 包管理器功能:打包,包管理(安装,升级,卸载,查询,校验) 目前Linux中最常见有两种常用工具 deb:debian Linux使用 包括ubuntu rpm:Redhat Package Manager ,Centos等在使用 程序包的组成: 二进制程序:/bin,  /sbin,  /usr/bin, /usr/sbin 库文件: /lib64, /usr/64 配置文件:/etc 帮助文件:manual, info 包管理器: 打包:将源文件,一个一个单一的归档文

程序包管理rpm、yum与简单编译安装程序

Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个ls命令就是一个二进制程序. 库文件:程序的公用功能模块,比如A程序需要用一个打印机,B程序也需要一个打印机就可以公用这一个模块了.在window下库文件为.dll格式,linux下为/lib/*so格式的文件. 配置文件:通过设置配置文件来改变程序启动时的运行特征. 帮助手册:使用的帮助文档. ?

Linux程序包管理rpm与yum

Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个ls命令就是一个二进制程序. 库文件:程序的公用功能模块,比如A程序需要用一个打印机,B程序也需要一个打印机就可以公用这一个模块了.在window下库文件为.dll格式,linux下为/lib/*so格式的文件. 配置文件:通过设置配置文件来改变程序启动时的运行特征. 帮助手册:使用的帮助文档.  

程序包管理之yum的用法

程序包管理之yum的用法: yum(全称为 Yellow dog Update Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 工作机制: 基于RPM包管理,能够从配置文件中指定服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次性安装所有依赖的程序包,无须繁琐地一次次下载.安装. 当yum接收到用户的安装指令后,yum将会通过读取配置文件中的信息并从指定的远程服务器上下载该程序包,并会分析该程序包的依赖关系并同时下载改程序包所依赖的

详解程序包管理RPM

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

学习笔记之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

RPM程序包管理以及yum的应用

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