1、RPM(redhat package manager)是redhat的包管理器用于进行打包,包管理(安装、升级、卸载、查询及校验)等功能。

rpmbuild是rpm的打包工具

a)RPM包的命名机制:

RPM包的一般格式为:

name-version-arch.rpm

name-version-arch.src.rpm

name:软件包名称。

version:分为主、次和修订的软件包版本号。

arch:硬件平台。硬件平台包括了:i386、i486、i586、i686、x86_64、ppc、sparc、alpha

src.rpm:源代码包。

以“openssl-1.0.1c-1.fc18.i686.rpm”为例:

openssl:是软件名称。

1.0.1c-1:是软件版本。

i686:是适用的硬件平台。

其中还包含有特殊的名称:

1、fcXX,elXX:表示这个软件包的发行商版本,如fc18,说明这个软件包是在Fedora 18下使用的。el6表示这个软件包是在RHEL 6.x(Red Hat Enterprise Linux)/CentOS 6.x下使用。

2、devel:表示这个RPM包是软件的开发包,或者叫做支包,它与主包之间是有依赖关系的。例如mysql-devel-5.1.52-1.el6_0.1.i686.rpm。

3、noarch:说明这样的软件包可以在任何平台上安装,不需要特定的硬件平台。在任何硬件平台上都可以运行。

b)如何获取rpm包:

1、发行版提供的程序包,光盘或者ios,一般在/dev/cdrom下

mkdir /media/cdrom

mount -r /dev/cdrom /media/cdrom/

2、Fedora-EPEL,只收录维护的比较好或者使用率高的

3、项目的官方站点

4、搜索引擎,比较靠谱的几个

http://rpmfind.net

http://rpm.pbone.net

http://pkgs.org

通过cat /etc/centos-release 查找linux版本

c)基于rpm命令实现程序包管理:


安装:

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

-i:表示安装操作,指名安装option

-v:显示详细过程,-vv, -vvv显示更加详细的信息

-h:表示用#号显示安装进度

我们一般安装rpm包都使用: rpm -ivh 包名

--nodeps:忽略依赖关系安装,强制安装,不过不推荐,基本不可用

--replacepkgs:重新装一次

rpm -ivh 包名 --replacepkgs


升级:

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

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

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

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

--nodeps

--oldpackage:降级;

--force:


卸载:

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

一般使用如下命令进行删除:rpm -e 包名  

查询:

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

查询选项:

-qa: 查询本机已经安装的所有程序包;

-qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;

[root@localhost ~]# rpm -qf /etc/profile.d/vim.csh

vim-enhanced-7.4.160-1.el7.x86_64

-qc: 查询指定程序包安装生成的配置文件

[root@localhost ~]# rpm -qc vim-enhanced

/etc/profile.d/vim.csh

/etc/profile.d/vim.sh

-qd: 查询指定的程序包安装生成的文档

[root@localhost ~]# rpm -qd iptables

/usr/share/doc/iptables-1.4.21/COPYING

/usr/share/doc/iptables-1.4.21/INCOMPATIBILITIES

/usr/share/man/man1/iptables-xml.1.gz

/usr/share/man/man8/ip6tables-restore.8.gz

/usr/share/man/man8/ip6tables-save.8.gz

/usr/share/man/man8/ip6tables.8.gz

/usr/share/man/man8/iptables-extensions.8.gz

/usr/share/man/man8/iptables-restore.8.gz

/usr/share/man/man8/iptables-save.8.gz

/usr/share/man/man8/iptables.8.gz

-qi: 查询指定的程序包的相关信息;

[root@localhost ~]# rpm -qi iptables

Name        : iptables

Version     : 1.4.21

Release     : 13.el7

Architecture: x86_64

Install Date: 2015年08月31日 星期一 13时41分40秒

Group       : System Environment/Base

Size        : 1541839

License     : GPLv2

Signature   : RSA/SHA256, 2014年07月04日 星期五 10时08分31秒, Key ID 24c6a8a7f4a80eb5

Source RPM  : iptables-1.4.21-13.el7.src.rpm

Build Date  : 2014年06月10日 星期二 13时02分48秒

Build Host  : worker1.bsys.centos.org

Relocations : (not relocatable)

Packager    : CentOS BuildSystem <http://bugs.centos.org>

Vendor      : CentOS

URL         : http://www.netfilter.org/

Summary     : Tools for managing Linux kernel packet filtering capabilities

Description :

The iptables utility controls the network packet filtering code in the

Linux kernel. If you need to set up firewalls and/or IP masquerading,

you should install this package.

-ql: 查询程序包安装生成的所有文件的列表;

[root@localhost ~]# rpm -ql vim-enhanced

/etc/profile.d/vim.csh

/etc/profile.d/vim.sh

/usr/bin/rvim

/usr/bin/vim

/usr/bin/vimdiff

/usr/bin/vimtutor

-q --scripts:查询程序包相关的脚本:

[root@localhost ~]# rpm -q --scripts iptables

preinstall scriptlet (using /bin/sh):

for p in /etc/alternatives/iptables.*; do

    if [ -h "$p" ]; then

        ipt=$(readlink "$p")

        echo "Removing alternatives for ${p##*/} with path $ipt"

        /usr/sbin/alternatives --remove "${p##*/}" "$ipt"

    fi

done

for p in /etc/alternatives/ip6tables.*; do

    if [ -h "$p" ]; then

        ipt=$(readlink "$p")

        echo "Removing alternatives for ${p##*/} with path $ipt"

        /usr/sbin/alternatives --remove "${p##*/}" "$ipt"

        # create dummy alternatives entry to fix iptables-ipv6 package removal

        /usr/sbin/alternatives --install /sbin/ip6tables.dummy "${p##*/}" "$ipt" 90

    fi

done

postinstall program: /sbin/ldconfig

postuninstall program: /sbin/ldconfig

posttrans scriptlet (using /bin/sh):

# cleanup dummy alternatives to fix iptables-ipv6 package removal if still there

for p in /etc/alternatives/ip6tables.*; do

    if [ -h "$p" ]; then

        ipt=$(readlink "$p")

        /usr/sbin/alternatives --remove "${p##*/}" "$ipt" || :

    fi

done

脚本分为四类,分类如下:

preinstall: 安装前脚本

postinstall:安装后脚本

preuninstall: 卸载前脚本

postuninstall: 卸载后脚本

-p: 查询针对是未安装的程序包文件;


校验:主要检查安装的包是否被改动

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

S 表示文件大小被改动

M 权限被改变

5 校验码被改变

D 设备文件主设备号被改变

U 文件属主被改变

G 文件属组被改变

T 时间戳被改变

P caPabilities differ


包校验:

主要校验两个方面:

1.来源合法性验证:借助于非对称加密方式验证

2.完整性验证:借助于单向加密来实现

先要有对方的公钥,光盘有/etc/pki/rpm-gpg/下也有

导入密钥:rpm --import RPM-CPC-KEY-CentOS-7

然后校验:rpm -K RPM包

2、YUM(Yellowdog Updater Modified)RPM包的前端管理工具,能够自动解决RPM包的依赖关系。

YUM命令详解

yum check-update:列出所有可更新的软件清单

yum update:安装所有更新软件

yum install packagename:安装指定的软件

yum update packagename:更新指定的软件

yum list:列出所有可安裝的软件清单

yum list updates:列出所有可更新的软件包

yum list installed:列出所有已安装的软件包

yum remove packagename:删除指定的软件包及与之依赖的包

yum info packagename:用来获取包的用途

yum search packagename:查找包

yum provides filename:查询指定文件是哪个包生成的

yum reinstall packagename:重新安装

yum localinstall packagename:安装本地文件,这命令已经不用了,都用yum install

yum downgrade packagename:降级安装

yum makecache:生成缓存


清除YUM缓存

yum 会把下载的软件包和header存储在cache中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确 的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all全关掉

1.清除缓存目录(/var/cache/yum)下的软件包

命令:yum clean packages

2.清除缓存目录(/var/cache/yum)下的 headers

命令:yum clean headers

3.清除缓存目录(/var/cache/yum)下旧的 headers

命令:yum clean oldheaders

4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers

命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 

还有一系列的包组安装删除查看命令用法同上面,只是在命令前加上了group,用来管理一组包的操作:

grouplist

groupinfo "GRP_NAME"

groupinstall "GRP_NAME"

groupremove "GRP_NAME"

仓库命令:

repolist [all|enabled|disabled]:列出可用仓库

repoinfo [all|enabled|disabled]:查看仓库香港信息


yum repositories的访问方式有3种:

ftp://hostname/PATH/TO/REPO

http://hostname/PATH/TO/REPO

file:///PATH/TO/REPO

yum程序的配置文件:

/etc/yum.conf:定义全局配置:对所有仓库都适用的配置

/etc/yum.repos.d/*.repo:一个文件通常用于一个或一组功能相近或相关的仓库

定义一个仓库指向即repo文件:

[REPO_ID] #自己定义就好了

name=      #指名一个名字,这个可以自己定义

baseurl=   #指名可以使用的路径见上面的3种方法,可以指定多个,但是包内容必须一致

# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE这个可以去网上抄一个

enabled={1|0}  #表示是否启用

gpgcheck={1|0} #是否需要校验,1表示校验则必须填写gpgkey值通常是个文件,0表示不需要,则gpgkey可以不需要

gpgkey=         #用于检验的文件名

cost=          #开销是多少,越大开销越大,默认是1000

定义仓库指向可用变量:

写法如下:参考自己的设备状况及linux版本号选择相应值,不然会不可用

http://mirrors.magedu.com/CentOS/$releasever/os/$basearch

$releasver用来引用当前系统主版本号

$basearch用来引用当前系统的基本架构

使用发行版光盘创建本地仓库:

1.挂载光盘

2.建一个仓库

[Centos7]

name=Centos7

baseurl=file:///media/cdrom

grpcheck=0

enabled=1

cost=100

创建本地仓库:

yum install createrepo

createrepo /PATH/TO/RPMFILES/