您的位置:首页 > 运维架构 > Linux

Linux 学习笔记 -- 第五部分 Linux 系统管理员 -- 第23章 软件安装:RPM、SRPM 与 YUM 功能

2014-07-07 10:09 1016 查看
软件安装:RPM、SRPM 与 YUM 功能

软件管理器简介

厂商先在他们的系统上面编译好了我们用户所需要的软件,然后将这个编译好的可执行的软件直接发布给

用户来安装。

Linux 界的两个主流:RPM 与 DPKG

Linux 开发商先在固定的硬件平台与操作系统平台上面讲需要安装或升级的软件编译好,然后将这个软件

的所有相关文件打包成为一个特殊格式的文件,在这个软件文件内还包含了预先检测系统与依赖软件脚本,

并提供记载该软件提供的所有文件信息等,最终将这个软件文件发布。客户端取得这个文件后,只要通过

特定的命令来安装,那么该软件文件就会按照内部的脚本来检测相关的前去软件是否存在,若安装的环境

符合需求,那就会开始安装,安装完成后还会将该软件的信息写入软件管理机制中,已完成未来可以进行

升级、删除等操作。

dpkg

Debian Linux 社区开发出来

RPM

Red Hat 这家公司开发

什么是RPM与SRPM

RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。

优点是:

1.由于已经编译完成并且打包完毕,所以软件传输与安装上很方便(不需要再重新编译)

2.由于软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与反安装

该软件文件几乎只能安装在原本默认的硬件与操作系统版本中。

通常不同的 distribution 所发布的 RPM 文件并不能用在其他的 distributions 上。

1.软件安装的环境必须与打包时的环境需求一致或相当;

2.需要满足软件的依赖属性需求;

3.反安装时需要特别小心,最底层的软件不可先删除,否则可能造成整个系统的问题!

SRPM 是 Source RPM 的意思,也就是这个 RPM 文件里面含有源代码。通常的扩展名为:***.src.rpm

如果我们下载的是 SRPM,那么要安装该软件时,就需要:

1.先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件;

2.然后将编译完成的 RPM 文件安装到 Linux 系统当中

可以通过修改 SRPM 内的参数设置文件,然后重新编译生成能适合我们 Linux 环境的 RPM 文件。

什么是 i386、i586、i686、noarch、x86_64

例如:rp-pppoe-3.1-5.i386.rpm

re-pppoe
- 3.1 -
5 -
i386 .rpm

软件名称 软件版本信息 发布的次数
适合的硬件平台 扩展名

i386 i586 i686 x86_64

noarch(就是没有任何硬件等级上的限值。一般来说,这种类型的 RPM 文件里面应该没有二进制程序存在,

较常出现的就是属于 shell script 方面的软件)

最低等级的 i386 软件可以安装在所有的 x86 硬件平台上面,不论是 32 位还是 64 位,但是反过来说就

不行了。

RPM 的优点

1.RPM 内含已经编译过的程序与设置文件等数据,可以让用户免除重新编译的困扰

2.RPM 再被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装

3.RPM 文件本身提供软件版本信息、依赖属性软件名称、软件用途说明、软件所含文件等信息、便于

了解软件

4.RPM 管理的方式使用数据库记录 RPM 文件的相关参数,便于升级、删除、查询与验证

RPM 属性依赖的解决方式:YUM 在线升级

当客户端有升级、安装的需求时,yum 会向容器要求清单的更新,等到清单更新到本机的 /var/cache/yum

里面后,等一下更新时就会用这个本机清单与本机的 RPM 数据库进行比较,这样就知道该下载什么软件。

接下来 yum 会跑到容器服务器 (yum server) 下载所需要的软件,然后再通过 RPM 的机制开始安装软件。

RPM 软件管理程序:rpm

RPM 默认安装的路径

/var/lib/rpm RPM 的数据库目录

RPM 安装 (install)

rpm -ivh package_name

-i install 的意思

-v 查看更详细的安装信息画面

-h 已安装信息栏显示安装进度

rpm -ivh rp-pppoe-3.5-32.1.i386.rpm

rpm -ivh a.i386.rpm b.i386.rpm *.rpm (一下安装多个 rpm)

rpm -ivh http://website.name/path/pkgname.rpm (直接由网络上面的某个文件安装)

RPM 升级与更新 (upgrade/freshen)

rpm -Uvh xxx.rpm 没有安装予以直接安装

rpm -Fvh xxx.rpm 没有安装不予以安装

对整个操作系统的旧版软件修补时:

1.到各个厂商的 errata 网站或者是国内的 FTP 镜像站点下载最新的 RPM 文件;

2.使用 -Fvh 来将你的系统内曾安装过的软件进行修补与升级

RPM 查询 (query)

rpm -qa

rpm -q[licdR] 已安装的软件名称

rpm -qf 存在于系统上面的某个文件名

rpm -qp[licdR] 未安装的某个文件名称

查询已安装软件信息:

-q 仅查询,后面接的软件名称是否有安装

-qa 列出所有的已经安装在本机 Linux 系统上面的所有软件名称

-qi 列出该软件的详细信息 (information),包含开发商,版本与说明等

-ql 列出该软件所有的文件与目录所在完整文件名 (list)

-qc 列出该软件的所有设置文件 (找出在 /etc/ 下面的文件名而已

-qd 列出该软件的所有帮助文件 (找出与 man 有关的文件而已)

-qR 列出与该软件有关的依赖软件所含的文件 (Required 的意思)

-qf 由后面接的文件名称找出该文件属于哪一个已安装的文件

查询某个 RPM 文件内含有的信息:

-qp[icdlR] 注意 -qp 后面接的
ece4
所有参数以上面的说明一致,但用途仅在于

找出某个 RPM 文件内的信息,而非已安装的软件信息

rpm -q logrotate (找出 Linux 是否有安装 logrotate 这个软件)

logrotate-3.7.4-8

rpm -q logrotating

package logrotating is not installed

rpm -ql logrotate (列出属于该软件所提供的所有目录与文件)

rpm -qi logrotate (列出该软件的相关说明数据)

rpm -qc logrotate (找出 logrotate 的设置文件)

rpm -qd logrotate (找出 logrotate 的帮助文件)

rpm -qR logrotate (找出 logrotate 所依赖的软件)

rpm -qf /bin/sh (找出 /bin/sh 是哪个软件提供的)

rpm -qpR filename.i386.rpm (找出文件的需求文件)

RPM 验证与数字证书 (VerifySinature)

使用 /var/lib/rpm 下面的数据库内容来比较目前 Linux 系统的环境下的所有文件。

rpm -Va

rpm -V 已安装的软件名称

rpm -Vp 某个 RPM 文件的文件名

rpm -Vf 在系统上面的某个文件

-V 后面加得是软件名称,若该软件所含的文件被改动过,才会列出来

-Va 列出目前系统上面所有可能被改动过的文件

-Vp 后面加的是文件名称,列出该软件内可能被改动过的文件

-Vf 列出某个文件是否被改动过

rpm -V logrotate (查询 Linux 内的 logrotate 这个软件是否被改动过)

rpm -Vf /etc/crontab (查询 /etc/crontab 是否有被改动过)

rpm -ql logrotate

rpm -V logrotate

数字证书

1.首先你必须要先安装原厂发布的公钥文件;

2.实际安装原厂的 RPM 软件时,rpm 命令会去读取 RPM 文件的证书信息,与本机

系统内的证书信息比较

ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

locate GPG-KEY

find /etc -name '*GPG-KEY'

rpm -qa | grep pubkey

rpm -qi gpg-pubkey-e8562897-459f07a4

卸载 RPM 与重建数据库

rpm -qa | grep pam (找出与 pam 有关的软件名称,并且尝试删除 pam 这个软件)

rpm -e pam (报错:依赖性问题)

rpm -e pam-devel (不会出现任何信息)

rpm -q pam-devel

package pam-devel is not installed

rpm --rebuilddb (重建数据库 /var/lib/rpm)

SRPM 的使用:rpmbuild

新版的 rpm 已经将 RPM 与 SRPM 的命令分开了,SRPM 使用的是 rpmbuild 这个命令,而不是 rpm。

利用默认值安装 SRPM 文件 ( --rebuid/--recomplie )

--rebuild 这个选项将后面的 SRPM 进行编译与打包的操作,最后会生成 RPM 的文件,但是产生的

RPM 文件并没有安装到系统上。当你使用 --rebuild 的时候,最后通常会发现一行字体:

Wrote:/usr/src/redhat/RPMS/i386/pkgname.i386.rpm

这个就是编译完成的 RPM 文件。这个文件就可以用来安装。安装的时候请加绝对路径来

安装即可

--recompile 这个动作会直接编译、打包并且安装。请注意,rebuild 仅编译并打包而已,而

recompile 不但进行编译跟打包,还同时进行安装

SRPM 使用的路径与需要的软件

/usr/src/redhat/SPECS 存放信息参数、设置文件

/usr/src/redhat/SOURCES 源文件 (*.tar.gz文件)以及 config 这个设置文件

/usr/src/redhat/BUILD 编译过程的暂存文件

/usr/src/redhat/RPMS 经过编译之后,并且顺利编译成功之后,将打包完成的文件放置在这个目录

当中

/usr/src/redhat/SRPMS SRPM 封装的文件

设置文件的主要内容 (*.spec)

rpm -i rp-pppoe-3.5-32.1.src.rpm

# 过程不会显示任何东西,它只会将 SRPM 的文件解开后放置到 /usr/src/redhat/ 下

find /usr/src/redhat/ -type -f

# 主要含有源代码与一个重要的设置文件 rp-pppoe.spec

cd /usr/src/redhat/SPECS

vi rp-pppoe.spec

SRPM 的编译命令 (-ba/-bb)

rembuild -ba rp-pppoe.spec (编译并同时生成 RPM 与 SRPM)

rembuild -bb rp-pppoe.spec (仅编译成 RPM 文件)

cd /usr/src/redhat/SPECS

rpmbuild -ba rp-pppoe.spec

find /usr/src/redhat -name 'rp-pppoe*rpm'

一个打包自己软件的范例

制作源代码文件 tarball 生成

mkdir /usr/local/src/main-0.1

tar -zxvf main.tgz -C /usr/local/src/main-0.1

cd /usr/local/src/main-0.1

vim Makefile

LIBS = -lm

OBJS = main.o haha.o sin_value.o cos_value.o

main: ${OBJS}

gcc -o main ${OBJS} ${LIBS}

clean:

rm -f main ${OBJS}

install:

install -m 755 main $(RPM_INSTALL_ROOT)/user/local/bin/main

cd ..

tar -zcvf main-0.1.tar.gz main-0.1

cp main-0.1.tar.gz /usr/src/redhat/SOURCES

新建 *.spec 的设置文件

cd /usr/src/redhat/SPECS

vim main.spec

编译成为 RPM 与 SRPM

rpmbuild -bm main.spec

安装/测试/实际查询

rpm -ivh /usr/src/redhat/RPMS/i386/main-0.1-1.i386.rpm

rpm -ql main

rpm -qi main

YUM 在线升级机制

利用 yum 进行查询、安装、升级与删除功能

查询功能:yum [list|info|search|provides|whatprovides]参数

yum [option] [查询工作项目] [相关参数]

[option] 主要的参数,包括有:

-y 当 yum 要等待用户输入时,这个选项可以自动提供 yes 的相应

--installroot=/some/path 将该软件安装在 /some/path 中而不使用

默认路径

[查询工作项目] [相关参数] 这方面的参数有:

search 搜索某个软件名称或者是描述 (description) 的重要关键字

list 列出目前 yum 所管理的所有的软件名称与版本,有点类似于 rpm -qa

info 同上,不过有点类似于 rpm -qai 的运行结果

provides 从文件去搜索软件!类似于 rpm -qf 的功能

yum search raid (搜索磁盘阵列相关的软件有哪些)

yum info mdadm (找出 mdadm 这个软件的功能为何)

yum list (列出 yum 服务器上面提供的所有软件名称)

yum list updates (列出目前服务器上可供本机进行升级的软件有哪些)

yum provides passwd (列出提供 passwd 这个文件的软件有哪些)

安装/升级功能:yum [install|update] 软件

install 后面接要安装的软件

update 后面接要升级的软件,若要整个系统都升级,就直接 update 即可

yum install pam-devel

删除功能:yum [remove] 软件

yum remove pam-devel

yum 的设置文件

vim /etc/yum.repos.d/CentOS-Base.repo

yum repolist all

修改容器产生的问题与解决之道

yum clean [packages|headers|all]

packages 将已下载的软件文件删除

headers 将下载的软件文件头删除

all 将所有容器数据都删除

yum clean all

yum 的软件组功能

yum [组功能] [软件组]

grouplist 列出所有可使用的组列表,例如 Development Tools 之类的

groupinfo 后面接 group name, 则可了解该 group 内含的所有组名称

groupinstall 这个好用!可以安装一整组的软件,相当不错

groupremove 删除某个组

yum grouplist (查看目前容器与本机上面的可用与安装过的软件组有哪些)

yum groupinfo XFCE-4.4

全系统自动升级

vim /etc/crontab

0 3 * * * root /usr/bin/yum -y update

管理的抉择:RPM 还是 Tarball

1.优先选择原厂的 RPM 功能

2.选择软件官方网站发布的 RPM 或者是提供的容器网址

3.利用 Tarball 安装特殊软件

4.用 Tarball 测试新版本软件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux