时间:2015.09.20

                                                                      linux-软件包管理

程序包管理介绍

  在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本。软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询。

程序包的组成

程序包是由以下部分组成

            二进制程序:程序包最核心的组成部分,通常放在/bin, /sbin,/ /usr/bin, /usr/sbin,
            库文件:其主要是实现二进制文件和代码共享 通常存放在/lib64, /usr/lib64
            配置文件:/etc
            帮助文件:其形式有manual, info

这里我们主要来介绍一下RPM包;其主要操作有:

打包:一个单一的归档文件中;

安装:把包放到其相应的文件中去
卸载:就是手机程序包的信息统一到一起,然后删除

升级:就是新版本应用替换老的程序
查询:实现查看一个程序安装的有什么功能和程序的路径位置

校验:是检查程序包安装完以后其文件是否被篡改了

程序分包机制

分为:核心包和支包

其命名机制

核心包 testapp-version

支包testapp-devel-version

version:major.minor.release

          主版本号.次版本号.release号

例:base-4.2.4.tar.gz

rpm的命名机制

    包名-版本-release.arce.rpm

例:bash-4.2.4-1.el7.x86_64.rpm

分解:

bash 包名

4 主版本号

2 次版本号

4 release号

1.el7 release号 是rpm的发行号

x86_64 平台架构

包和包之间:有可能存在依赖关系

如何获取rpm包:
            1、发行版提供的程序包;
            2、Fedora-EPEL
            3、项目的官方站点
            4、搜索引擎
                http://rpmfind.net
                http://rpm.pbone.net
                
http://pkgs.org

             5、光盘

下面我们来看一下rpm是如何安装的

首先我们这里先挂载自己的光盘,如下图

wKioL1X9cgqhkWScAAHObOBfJz4572.jpg

命令格式

rpm [option] 包名

rpm  –i[v|h]  [--excludedocs |prefix |test |replace[pkgs |files] |nodeps]  sudo

[解析]  i为安装,v为显示详细信息,h为hash是进度信息

如图:

wKiom1X9cRbjlrOzAAEkFPlSmP0397.jpg

前面我们说过rpm包会有依赖关系的,我们以下图为例,下图中我们安装的rpm包就会有它的先决条件包,而我们要想安装这个rpm包除了先把其的先决条件包安装完的方法外,我们还有如下选项 --nodeps 忽略依赖关系,这是这样安装完之后程序可能无法运行,例:

wKiom1X9dBKi7WioAAImIwfKPYA349.jpg

有的时候我们安装完的程序包,我们还可以重新安装,其命令就是--replacepkgs 重装程序包

wKioL1X9d2vjw0TcAAKbgnYhB8g079.jpg

查看程序包是否安装,我们使用rpm -q 报名或者rpm -ql 报名显示此包的安装位置,如下图:

wKiom1X9dgmhEKpwAACM3d66eqE365.jpg

rpm的升级

常用选项

rpm -Uvh package.rpm

rpm -Fvh  package.rpm

-Uvh: 如果有旧版程序包,则升级之;如果没有,则安装之;
-Fvh: 如果有旧版程序包,则升级之;如果没有,则不安装;

这里找不到升级包了就不做升级了

rpm 的卸载

格式:rpm -ev package

如下图:

wKiom1X9gFnxh0ReAAISWeqmqaM887.jpg

rpm的查询

格式:rpm -qa package 查询已安装的包

如下图:

wKiom1X9f3-BEiqRAACWhfz8FBA016.jpg


rpm -qc package 查询已安装软件生成了哪些配置文件

wKiom1X9gY3wTgQsAACn7_JZpGc876.jpg

rpm -qd package 查询已安装软件生成了哪些文档

wKioL1X9hCmBaXf3AAQIrEOYa-Q362.jpg


rpm -ql package 显示软件包中的文件列表

显示太多就不截图了

rpm -qi  package 显示软件包信息

wKiom1X9g1KheGJ8AARBBReG4PI561.jpg

rpm -qf  /path/ 查询此路径所属的软件包

wKioL1X9hhCR8VS4AACKRutsUBc922.jpg

rpm 的校验

rpm  -V  package

S 为文件大小是否改变

5 为文件的md5校验值

L 链接文件

T 文件创建时间时间戳是否改变

D 设备文件是否改变或者是否匹配

U 文件的用户是否改变

G 文件的用户组是否改变

M 文件的权限是否改变

包校验:
        来源合法性验正:非对称加密
        完整性验正:单向加密
导入密钥:rpm --import /PATH/TO/KEY_FILE

校验:rpm -K /PATH/TO/RPM_FILE

=====================包管理的yum=======================
yum百科

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

yum源的配置

CentOS 默认已经安装了yum,不需要另外安装

yum 的配置文件分为两部分:main 和repository

main 部分定义了全局配置选项,整个yum 配置文件应该只有一个main。常位于/etc/yum.conf 中。

repository 部分定义了每个源/服务器的具体配置,可以有一到多个。常位于/etc/yum.repo.d 目录下的各文件中;如下图:

wKiom1X_cEry9itXAADxIdwmuO8398.jpg

yum.conf 文件一般位于/etc目录下,一般其中只包含main部分的配置选项,我们使用vim打开主配置文件,vim /etc/yum.conf ;如下图:

wKiom1X_dMTwyC0OAAWRyU7PfLw576.jpg

主配置文件,我们大部分不需要做操作,在这里我们就不需要多说了。

下面我们主要来看一下/etc/yum.repos.d/*.repo文件是如何定义的吧,我们首先来看如下截图:

wKioL1X_enSjAo1EAATBR-Fqcmg766.jpg

上图,中我们是把内网中的一台服务器当做yum服务器了,而他则每天晚上去外网同步更新安装包,由于资源有限,我们就不再做操作了,我们在文章最后来配置一下光盘当做yum源文件吧!

上图,详解:

解释两个变量

$releasever 引用当前系统的主版本号,也就是Centos6.7的主版本号就是6

$basearch   当前系统的基本架构 比如:x86_64

选项
功能描述
[]
[]中填写的yum源中唯一的ID,可以为任意字符
name
指定yum源名称,可以为任意字符,一般我们都按照自己的习惯来。
baseurl指定yum源的URL地址(可以是 http、ftp、或者是本地路径)
mirrorlist
指定镜像站点目录
enabled
是否激活yum源(0代表禁用,1代表激活,默认为激活状态)
gpgcheck
安装软件时是否检查签名(0代表禁用,1代表激活),如果此项设置检查,gpgkey就需设置key路径
gpgkey
检查签名的秘钥文件

provides
查看包是由哪个软件包生成的
reinstall
重新安装软件包


当我们创建好yum源仓库了,我们可以使用如下命令来使用yum

YUM命令格式

用法:yum [选项] [指令] [软件包]

其中我们常用的选项-y, 是执行非交互式安装,假定安装过程中出现的所有提示回答为YES

指令

用法
描述
install package1 ...package10
使用yum安装软件包
update  package1 ...package10
使用yum源升级安装包
check-update
使用yum源检查所有可升级的安装包
remove | erase package1 ...package10卸载软件包
list
列出系统中已安装的以及yum源中所有可用的软件包
info
查看软件包信息
clean all
清空所有的缓存信息
groupinstall group1.....
使用yum安装组包
grouplist
列出系统中已安装或者yum源可用的安装包
groupremove group1.....
卸载组包
search string1.....
根据关键字查找软件
localinstall rpmfile1...
通过本地的rpm文件安装软件
history
查看历史记录

provides  package1查看包是由哪个软件包生成的
reinstall   package1重新安装软件包

实例:

yum install httpd 安装

wKiom1YAAKHCPQ86AAL84SnchfM740.jpg

wKiom1YAAY-znsZEAAOb_WbGJU0288.jpg

yum -y remove httpd卸载

wKiom1YAAgPTcpCjAAVoQj32lhs766.jpg

yum check-update 检查需要升级的软件包

wKioL1YABaCDovwXAALx4aOnMGY657.jpg


我们使用yum update 加报名对指定的包升级,如果不加将全部升级

wKioL1YABsPRsN3fAAMTCFsAWPs506.jpg

yum list 后面加包名就单列出此包

wKioL1YACNaCO4inAADsfuIgxzE456.jpg

yum info 软件包名 查看软件包的基本信息

wKiom1YABtXgfP6EAALd5ySom_M448.jpg

yum clean all 如下图:

wKioL1YACXzi-wPIAADbkxAyS1U730.jpg

yum grouplist

wKioL1YAClOiCuW_AAGlBr0RuZs720.jpg

yum groupinstall 组名

wKioL1YACnTTtLrFAAKQUE090ns514.jpg

wKioL1YACqjDF_lcAAEstgYou3U479.jpg

yum groupremove 卸载组这里就不截图了

我们使用yum search string1通过关键字来查找软件

wKioL1YADfqhk1VZAAHcxIWqgqI552.jpg

yum history

wKiom1YADSTBGT0eAAPNXo6Q0ZA561.jpg

yum provides zsh

wKiom1YAFrTyyC2uAAEFW2M7Ob0280.jpg

yum reinstall zsh*

wKiom1YAF06hYqobAANiJO16FxA622.jpg

yum的基本操作我们讲解完毕,下面我们来使用光盘来当做yum源文件,配置个yum源服务器;我们做此操作我们需要先把光盘挂载到本地,在这里我们就不一一写命令了,看图说话

下图:光盘挂载至本地

wKiom1YAEO7SBrThAAIc3i5eLVk865.jpg

然后我们创建yum源文件

wKiom1YAEYXTAuBQAAEp3WKJR1E988.jpg

编辑.repo文件,如下图: 备注,cost是定义使用优先级的。

wKiom1YAIIDiVhHLAAB-zijmkyI801.jpg

我们使用yum repolist 查看,如下图:

wKioL1YAI8bBRjGDAAGCFR--4uA638.jpg

其实我们也可以创建本地的yum源,我们使用yum install createrepo,然后creatrepo /path/path 路径,然后在修改baseurl的路径为创建的路径即可。

wKioL1YAKniDfWgTAAEu6nrtAx8338.jpg

然后创建本地yum源目录,此目录首先自己要用mkdir创建好

wKiom1YAKGeyRTqpAABUBYA5bkg046.jpg

wKioL1YAKrbgMqJZAACJNa-u7aQ606.jpg

修改repo文件,并验证

wKioL1YAKviDLk93AAB2wgeQl_s812.jpg

wKiom1YAKLqy-9B1AAFWydtQHcc048.jpg

好了,这样我们我软件包管理结束了,我们一共说了两种软件包管理方法希望能帮助大家。