程序包管理:rpm和yum

rpm命令                              软件包管理

程序包管理

一、概述

(一)API:Application Program Interface  应用编程接口

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

Unix-line  使用ELF

API可以相同,不同架构的ABI不同

(二)库级别的虚拟化

在linux上可以运行WinE ,在Windows上可以运行Cywin来实现库的跨平台运行

(三)系统级开发

C/C++:httpd,vsftpd,nginx等应用一般对系统要求较高的,使用C/C++来编辑核心程序

(四)应用级开放

java/Python/perl/ruby/php

java:jvm库

Python:pvm

perl:perl解释器

ruby:ruby解释器

php:php解释器

(五)系统级程序格式:例如c/c++

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

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

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

(六)应用级编程工具程序格式,例如java,python

源代码:编译成能够在其虚拟机上运行的格式

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

二进制

项目构建工具:

c/c++:make

java:maven

二、程序包管理器:

1、源代码–>目标二进制格式–>组织成为一个或者有限几个"包"文件

安装,升级,卸载,查询,校验

2、程序包管理器:

debian: dpt工具,dpkg,".deb"后缀

REHL:redhat: redhat package manager–>rpm,".rpm"; rpm is package manager;

SUSE: rpm, ".rpm"

Gentoo: 使用poets机制

ArchLinux: 

3、源代码: 命名格式 name-VERSION.tar.gz

VERSION包含: major.minor.release

4、rpm包命名格式: 

name-VERSION-release.arch.rpm

VERSION: major.minor.release

release.arch: rpm包的发行号

release.os

archetecture:架构  i386  x64(amd64),ppc  noarch

拆包:主包和子包

主包: name-VERSION-release.acch.rpm

子包: name-function-VERSION-release.arch.rpm

光盘挂载:mount -r /dec/cdrom /media.cdrom

5、依赖关系: 子包依赖于主包,不能独立存在使用

前端工具: 自动解决依赖关系

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

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

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

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

前端管理工具能解决后端管理工具的许多不便之处

三、程序包管理器: rpm

功能: 将编译好的应用程序的各个组成文件打包成一个或者几个程序包文件,从而更方便的实现程序包的安装,升级,卸载,和查询等管理操作

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

文件清单

安装或者卸载时运行的脚本

(2) 数据库(公共)

存储程序包的名称和版本

依赖关系

功能说明

安装生成的各个文件的路径和校验码信息

等等

ls /var/lib/rpm 查看rpm的数据库

包括:group  name  sigmd5(校验码)  triggername发器名称

四、获取程序包的途径

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

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

2 、项目的官方站点

例如: www.zabbix.com

3、第三方组织

(a)EPEL

(b)搜索引擎查找,使用专门的rpm包搜索引擎

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

4、自己制作rpm包

建议: 从网站下载完成后, 检查其合法性

来源合法性

程序包的完整性

五、Centos系统上rpm命令管理程序包

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

1、rpm命令:rpm [OPTION] [PAVKAGE_FILE]

安装: -i, –install

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

卸载: -e, –erase

查询: -q, –query

校验: -V, –verify

数据库维护: –builddb,–initdb

2、安装: 

rpm {-i|–install} {install-options} PACKAGE_FILE…

rpm -ivh PACKAGE_FILE…

例如:

安装zsh

安装完成之后可以查看

cat /etc/shellls

如果要使用zsh,直接在命令行界面输入zsh就可以切换到zsh使用,退出使用exit即可

GENERAL OPTION:

-v: berbose,详细信息

-vv;更详细的信息

install-options:

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

–test: 测试安装,检查并报告依赖关系及冲突信息等

–nodeps: 忽略依赖关系;不建议使用

–replacepkgs: 重新安装,但是修改配置文件之后,不会更新配置文件,需要将配置文件删除后安装

–replacefiles

–noscripts

注意: rpm包可以带脚本

四类:

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

postinstall: 安装过程完成之后运行的脚本,%post, –nopost

preuninstall:卸载过程真正开始之前运行的脚本,%preun, –nopreun

postuninstall:卸载过程完成之后运行的脚本,%postun, –nopostun

–nosignature: 不检查包签名信息,不检查来源合法性

–nodigest: 不检查包完整性信息

3、升级:

rpm {-U|–update} {install-options} PACKAGE_FILE…

rpm {-F|–freshen} {install-options} PACKAGE_FILE…

-U: 升级或安装

-F: 升级

rpm -Uvh PACKAGE_FILE

rpm -Fvh PACKAGE_FILE

–oldpackage: 降级

–force: 强制升级

注意:(1)不要对内核做升级操作,升级内核会重启系统.Linux支持多内核版本并存,因此,直接安装新内核

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

4、卸载:

-e,–erase

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

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

–notrigger: 不触发任何操作

–nodeps: 忽略依赖关系

–test: dry run模式,测试卸载

rpm -e 包名

5、查询:

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


[select-options]

package_name:查询执行的程序包是否已经安装,及其版本

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

rpm -qa | grep ""

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

-g,–group GROUP: 查询指定包组中包含了哪些包

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

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

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

[query-options]

–changelog: 查询rpm包的changelog(历史改进)

rpm -q –changelog zsh | less

-l,–list: 列出程序包安装生成的所有程序列表

rpm -ql bash

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

rpm -qi bash

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

rpm -qc bash

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

rpm -qd bash

—provides: 列出指定的程序包提供的所有CAPALIBITY

rpm -q –provides bash

rpm -q –whatprovides 'config(bash)'

rpm -q –whatrequires 'config(bash)'

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

rpm -q -R bash

–scripts: 查询程序包自带的脚本片段

rpm -q –scripts bash

用法:

-qi PACKAGE, 

-qf FILE,

-qc PACKAGE,

-qd PACKAGE

-ql PACKAGE_NAME,

-qpi PACKAGE_FILE

-qpl PACKAGE_FILE

-qpc FILE

-qpd 

6、校验:

rpm {-V|verify} [select-options] [verify-options]

V–requires,–verify

rpm -V zsh

man page查询校验信息的意义

六、包来源合法性和完整性验证:

1、来源合法性验证:

数字签名: 用自己的私钥加密对应文件的特征码

2、完整性验证

导入ios文件的秘钥包:rpm –import /…/../RPM-GPG-KEY-CentOS-7

手动校验: rpm -K PACKAGE_FILE

3、获取并导入信任的包制作者的秘钥:镜像文件中存在

在/etc/pki/rpm-gpg 中同样存在RPM-GPG-KEY-CentOS-7 文件存在

对于centos发行版来说: 使用rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7即可

4、验证:

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

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

七、数据库重建:

rpm的数据库位置: /var/lib/rpm

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

获取帮助:

CentOS6: man rpm

CentOS7: man rpmdb

rpm{–initdb|rebuilddb} –dbpath

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

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

回顾:

rpm命令实现程序管理

安装: -ivh ,–nodeps –replacepkgs

卸载: -e. –nodeps

升级: -Uvh  -Fvh .–nodeps  ,–oldpackage 降级

查询: -q ,-qa,-qf,-qi,-qd,-qc,–scripts,-q –changelog,

-q –provides ,-q –requires

校验: -V

导入GPG密钥文件: –import,-K(直接检测,不用安装),–nodigest(不检查完整性) ,–nosignature(不检测来源合法性)

数据库重建: –initdb ,–rebuilddb

yum命令                         程序包管理

一、解决依赖关系:

CentOS: yum,dnf

URL:统一资源定位符

yum repository: rpm repo

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

1、文件服务器格式

baseurl=

ftp://

http://

nfs://

file:///

2、yum客户端

配置文件

rpm -q yum 查看yum文件

rpm -qc yum  配置文件  

/etc/yum.conf:为所有仓库提供公共配置,或者不属于仓库的配置

/etc/yum.repos.d/*.repo: 为每一个仓库的指向提供配置

获取配置文件的帮助信息: man yum.conf

仓库指向的定义:(含有选项的,前边数值为默认数值)

[repositoryID]

name=some name for this repository

baseurl=url://path/to/repository(可以指定多个URl)

mirrorlist=(镜像文件,一般不会和URL同时使用)

enabled={1|0}(是否启用)

gpgcheck={1|0}(是否检查来源合法性)

repo_gpgcheck={1|0}(是否检查元数据的来源合法性)

gpgkey=URL(gpg的密钥文件的访问路径)

enablegroup={1|0}(是否使用组来批量管理程序包)

failovermethod={roundrobin(轮询)|priority(优先级)}(故障转移方法)(指定多个baseurl时发生故障如何查询)

keepalive={1|0}

username

passwd

cost=1000(默认)

自己配置yum源

vim   *.conf

[base]

name=

baseurl=

gpgcheck=0

[epel]

name=

baseurl=

gpgcheck=0

二、yum命令的使用

yum [options] [command] [package …]

command is one of :

repolist [all|enabled(默认启用)|diaabled(禁用)]  显示仓库列表

list 显示程序包

list optionss

# yum list [通配符]

# yum list available [通配符](可用)

# yum list updates [通配符](可升级)

# yum list installed [通配符](可安装)

安装

install package1 package2 …  

重新安装

reinstall package1 package2 … 

降级

downgrade package1 [package2] […] 

升级制定程序包

update   

yum update [package1] [package2] …

检查可用升级

check-update 

  

卸载程序包

remove | erase package1 [package2] … 

  

查询包的简要信息

info        

info […]

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

provides | whatprovides feature1 [feature2] […]  

清理本地缓存

clean [ packages(程序包) | metadata(元数据) | expir-cache(过期缓存) | rpmdb | plugins(插件) | all ]

构建缓存

makecache   

搜索:以指定的关键字搜索程序包名及summary信息

search [string1] [string2] […]  

查看指定包所依赖的capabilities

deplist package1 […]  

      

查询yum事务历史

history [ info | summary(概要) | packages-list | packages-info | addon-info | redo | undo …]   

安装及升级本地程序包

localinstall 

包组管理的相关命令

groupinstall  group1  […]

groupupdate

grouplist

groupremove

groupinfo

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

(1)挂载光盘到某目录

# mount -r -t 

(2)创建配置文件

[CentOS7]

name=

baseurl=

gpgcheck=

enabled=

五、yum的命令行选项

–nogpgcheck: 禁止进行 gpg check

-y: 自动回答为"yes"

-q, –quiet静默模式

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

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

–noplugins: 禁用所有插件

六、yum的repo配置文件中可用的变量:

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

$arch: 平台

$basearch: 基础平台

$YUM0-YUM9

http://mirrors.站点.com/centos/$releasever/$arch/$basearch/OS

1、创建yum仓库

安装:yum install createrepo

使用createrepo命令创建:

get到目标目录下

createrepo [options] <directory>

createrepo ./  查看当前目录的rpm包,并进行创建yum源

编写配置文件

2、程序包的编译安装:

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

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

源代码的组织格式:

多文件:文件中代码之间,和可能存在跨文件依赖关系

项目管理工具

c/c++: make(configure –> Makefile.in –> makefile)

java: maven

C代码编译安装三步骤:

(1)./configure: 

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

    <2> 检查各指定启用特性所依赖的外部环境

(2)make

根据makefile文件,构建应用程序

(3)make install

开发工具:

autoconf: 生成configure脚本

automake: 生成Makefile.in文件

建议: 安装前查看INSTALL, README

3、开源程序源代码的获取:

官方自建站点:

apache.org(ASF)

mariadb.org

代码托管:

SourceForge

Github.com

code.google.com

4、c/c++: gcc编译器 (GNU C Complier)

编译C源代码:

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

开发工具: make, gcc等

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

glibc: 标准库

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

CentOS 6: "Development Tools", "Server Platform 

Development",

第一步: configure脚本

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

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

mget、scp命令如何使用

选项分类:

安装路径设定

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

–sysconfdir=/PATH/TO/SOMEWHERE:指定配置路径

System types: 目标系统平台结构

Optional Features: 可选特性的启用

–disable-FEATURE: 禁用特性

–enable-FEATURE: 启用特性

Optional Packages: 可选程序包(依赖到的程序包)

–with-PACKAGE

–without-PACKAGE

例如:~]# yum groupinstall Server Platform Development -y

   ~]# ./configure –prefix=/usr/local/apache2 –sysconfdir=/etc/http2

第二部: make

cd http-2.2.29

make install

netstat -tan

第三部: make install

安装后的配置:

(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

将目标文件下的include文件路径输出到/usr/include目录下

(4) 导出帮助手册

编辑/etc/man.config文件

添加一个MANPATH参数,并指明新路径即可

例如: 在/etc/man.config中添加

原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/37408

(0)
black_fishblack_fish
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • 第三周作业

    博客具体内容请移步博客园: http://www.cnblogs.com/ITOps/p/6204549.html

    Linux干货 2016-12-20
  • > 输出重定向

    重定向输出 > >> 追加 目 录 1、 >正确定向等同于1> 2、 2> 错误定向 3. &> 把错误导成正确的{洗钱} 4. 正确的变成错误的 5. > 覆盖 6. 举一反三 最近学的命令中学到了一些很有意思的命令,分享一下 > 重定向输出 最…

    Linux干货 2017-08-13
  • 第七周练习

    1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;   ~]# mke2fs -t ext4 -b 2048 -m 2 -L…

    Linux干货 2016-12-10
  • Linux基础知识(二)

     本文的主要内容是:  1.Linux上的基本文件管理命令  2bash的特性及其命令状态返回值  3.bash的花括号展开机制  4.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息  5如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?  &nb…

    Linux干货 2016-09-25
  • Nginx及其相关配置详解(二)

    与套接字相关的配置: 1、server { … }  #配置一个虚拟主机;         Default:—         Context:http server { # 配…

    2017-07-14
  • tomcat之-从AT到Cluster

    本文导航 一、    LAMT搭建以及部署应用        1、LAMT部署                   (1)、安装Apache     …

    2017-02-13

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-21 22:52

    文章对rpm包管理相关知识总结的很详细,其中rpm包管理工具中查询语句和yum源配置是基本能力,需要多加练习,熟练掌握。