一 软件管理员简介

1 RPM:最早由Redhat公司开发出来,是一种以数据库记录的方式来将你所需要的软件安装到你的Linux系统的一套管理机制。

优点:1 由于软件已经编译完成且打包完毕,所以软件传输与安装上很方便
2 由于软件的信息都已经记录在Linux主机的数据库上,很方便查询,升级与反安装
缺点:1 软件文件安装环境必须与打包是的环境相一致
2 需要满足软件的相依属性要求
3 反安装是需要小心,最底层的软件不可先移除,否则可能造成整个系统问题

如果真的需要安装其他distributions提供是的好用的RPM软件,可使用SRPM,SRPM(Source RPM),也就是说这个RPM文件里面含有原始码。SRPM所提供的的软件内容并没有经过编译。
通常SRPM的扩展名是以**.src.rpm这种形式来命名的,虽然是原始码名,但他仍然能够含有该软件所需要的相依性软件说明,以及所有RPM文件所提供的数据,它也提供了参数配置configure 与Makefile 。所以如果下载了SRPM,那么在安装该软件时,你就必须要:
1 先将该软件以RPM管理方式进行编译,此时SRPM被编译成为RPM文件
2 然后将编译完成的RPM 文件安装到Linux系统中

2 i386,i586,i686,noarch,x86_64区别与联系

zziplib -0.13.62 -5. el7.x86_64. rpm
软件名称 软件的版本信息 释出的次数 适合的硬件平台 扩展名

版本信息:主版本和次版本,以(“.”)点号隔开

释出版本次数:编译的次数,由于同一版本的软件中,可能由于有某些bug或安全上的顾虑,需要进行小幅度的编译,

操作硬件平台:
Linux下软件的安装_第1张图片

3 RPM相关属性的克服方式:yum在线升级

为了重复利用所有软件功能,因此很多软件都会以函式库的方式释放出部分功能,以方便其他软件的呼叫应用,目前的软件内容分为一般使用与开发使用两大类,因此才会有*-devel-x.x.rpm 之类的档名,而预设情况下,大部分的开发类软件都不会被安装,因为终端用户不会去开发软件。

RPM 软件内部会记录相依属性的数据,如果我讲这些相依属性的数据列表,然后再安装时找到这个列表,然后进行将其中没安装的一并安装起来,这样就解决了依赖性问题,这便是YUM机制的由来
Linux下软件的安装_第2张图片
流程
1 先将释放出来的软件放置到YUM服务器内
2 分析这些软件的相依性问题,将软件内的记录信息写下来(header),然后再将这些信息分析后记录成软件相关性的列表列成表,这些列表数据与软件所在的本机或网络位置可以称呼为容器或软件库,当客户端有软件安装的需求时,客户端主动向网络上面的yum服务器软件地址下载清单列表,然后通过列表列表的数据与本机RPM数据库已存在的软件数据相比较,就可以将软件全部安装了。

软件仓库内的列表会记载每个文件的相依属性关系,以及所有文件的网络位置(URL)。

当客户端有升级、安装的需求时,yum会向软件库要求清单的更新,等到清单更新到本机的/var/cache/yum 里面后,等一下更新时就会用这个本机清单与本机的RPM 数据库进行比较,这样就知道该下载什么软件,接下来yum会跑到软件库服务器下载所需的软件,然后再透过RPM 的机制进行安装。

二 RPM 软件管理程序

1 RPM 的默认安装路径:

RPM类型文件在安装时,会先去读取文件内记载的设定参数内容,然后将改数据用来比对Linux系统的环境,以找出是否有属性相依的软件尚未安装的问题,
若环境检查合格,则RPM文件就开始被安装到你的Linux系统上了,安装完毕后,该软件相关的信息就会被写入/var/lib/rpm目录下的数据库文件中了,此目录中保存着升级相关的比对数据,已安装的软件,数字签名等信息,因此,此目录很重要,不能被删除。

Linux下软件的安装_第3张图片

2 RPM 安装(install)

因为安装是root的身份才能操作的,因此必须是超级管理员才可以,

rpm 一般参数
-i : intsall 的意思
-v : 查看更细部的安装信息画面
-h:以安装信息列显示安装进度

也可以进行强制安装,但会有后遗症
Linux下软件的安装_第4张图片
Linux下软件的安装_第5张图片

3 RPM 升级与更新(upgrade/freshen)

可以使用-Uvh或-Fv会进行升级,其区别是:
Linux下软件的安装_第6张图片

建议:如果你想要大量设计系统旧版本的软件时,使用-Fvh 则是比较好的,因为其没有安装的软件不会被更新安装。

4 RPM查询(query)

RPM 在查询的时候,其实是在查询/var/lib/rpm这个目录下的数据库文件,这里是已安装的软件的信息。
参数:
rpm
-q 仅查询,后面接软件的名称是否有安装
[root@localhost ~]# rpm -q http
未安装软件包 http
[root@localhost ~]# rpm -q httpd
httpd-2.4.6-17.el7.x86_64
-qa 列出所有,已安装在本机Linux系统上的软件名称
-qi 列出该软件的详细信息(information),包含开发商、版本与说明等。
[root@localhost ~]# rpm -qi httpd
Name : httpd
Version : 2.4.6
Release : 17.el7
Architecture: x86_64
Install Date: 2017年12月27日 星期三 19时23分38秒
Group : System Environment/Daemons
Size : 3863865
License : ASL 2.0
Signature : RSA/SHA256, 2014年04月02日 星期三 01时54分28秒, Key ID 199e2f91fd431d51
Source RPM : httpd-2.4.6-17.el7.src.rpm
Build Date : 2014年03月20日 星期四 19时17分12秒
Build Host : x86-024.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager : Red Hat, Inc. ;
Vendor : Red Hat, Inc.
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
-ql 列出该软件所有的文件与目录所在完整文件名:(list)
[root@localhost ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
-qc 列出该文件所有配置文件(找出在/etc下的文档名)
[root@localhost ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
-qd 列出该软件的所有说明文件,(找出与man有关的文件而已)
-qR 列出该软件有关的相依软件所包含的文件(required)

-qf 有后面接的文件名,找出该文件说以那一个已安装的软件
[root@localhost ~]# rpm -qf /var/www/html/
httpd-2.4.6-17.el7.x86_64

-q --scripts :列出是否含有安装后需要执行的脚本档,可以以debug,查询某个RPM 文件内含有的信息。
-qp[icdlR]:注意-qp后面接的参数和上面一直,但用途尽在找出某个rpm文件内的信息,而非已安装的软件信息

查询主要分为两部分,一个是查询已安装到系统上面的软件信息,这部分信息由/var/lib/rpm 提供,另一个则是查某个rpm文件内容,等于是由RPM文件内找出一些要写入数据库内的信息,这部分就得使用-qp(p 是package的意思)

5 PRM 验证与数字签名(verify/signature)

验证(verify)的功能主要在于提供系统管理员有一个有用的管理机制,作用的方式是[使用/var/lib/rpm 地下的数据库内容来比对目前Linux系统的环境下所安装的软件]。
验证原本系统的方式:
RPM 参数
-V :后面加的是软件的名称,若该软件所包含的文件被更改过,才会出来
-Va:列出目前系统上面所有被更动过的文件
-Vb:后面加的是文件名,列出该软件内可能被更动过的文件
-Vf:列出某个文件是否被更动过
[root@localhost ~]# rpm -Vf /etc/crontab
[root@localhost ~]# vim /etc/crontab
[root@localhost ~]# rpm -Vf /etc/crontab
S.5....T. c /etc/crontab

其中c 表示的是configuration,就是配置文件的意思。

S:(file size differs )文件的容量大小是否被改变
M:(mode differs)文件的类型或文件的属性(rwx)是否被改变
5:(MD5 sum differs) MD5 这一种指纹码的内容已经不同
D:(device major/minjor number mis-match)装置的主/此代码已经改变。
L:(readlink(2)path mis-match)link 路径已经被改变
U:(user oenership differs) 文件所属人已经被改变
G:(Group ownership differ)文件所属群组已经被改变
T:(Mtime differs)文件建立的时间已经被改变
P:(capabilities differ)功能已经被改变
c:配置文件
d:文件数据文件
g:鬼文件
l:小写L,许可认证文件
r:自述文件

数字签名:
验证只能验证软件内的信息与/var/lib/rpm/里面的数据库信息而已,如果该软件文件所提供的数据本身就有问题,那你使用验证的手段也无法确定该软件的正确性。我们可以透过数字签名来检验软件的来源。
当你要安装一个rpm 文件时:
1 首先你必须要先安装原厂释放出的公钥文件。
2 世纪安装原厂的RPM软件时,rpm指令去读取RPM 文件的签章信息,与本系统内的签章信息比对。
3 若签章信息相同则予以安装,若找不到相关的签章信息时,则给予警告并停止安装。

我们centos使用的数字签名系统为GNU计划的GnuPG,GPG可以透过哈希运算,算出独一无二的专属秘钥系统或者是数字签名系统,

6 RPM 反安装与重建数据库(rease/rebuilddb)

反安装就是软件卸载,
可以使用-e 进行卸载,但其由于存在依赖关系,因此删除工作可能会导致错误,若强制删除则会导致错误。

可以使用--rebuilddb进行重建数据库

[root@localhost ~]# rpm --rebuilddb

三 YUM 在线升级机制

yum是透过分析RPM 的表头信息。根据各软件的相关性制作出属性相依时的方案,然后可以自动处理软件的相依性问题,已解决软件安装或移除与升级问题。

由于distribution 必须先释放出软件,然后讲软件放置于yum服务器上,已提供客户端来要求安装与升级之用。因此想要使用yum共鞥,必须先要找到合适的yum server才行。

centos在mirror site提供全世界的软件更新之用。

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

查询功能:yum [list|info|search|provides|whatprovides]参数
如果想要利用yum来查询原版系统所提供的软件,或已知某软件的名称,想知道该软件的功能,可以利用yum相关的参数为:
-y:当yum要等待用户输入时,这个选项可以自动提供yes的相应
--installroot=/some/path:将软件安装在/some/path而不是使用默认路径
[查询工作项目][相关参数]:这方面参数有:
search:搜寻某个软件名称或者是描述(description)的重要关键字
list:列出目前yum所管理所有的软件名称与版本,
[root@localhost ~]# yum list httpd
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
已安装的软件包
httpd.x86_64 2.4.6-17.el7 @anaconda/7.
info:同上
[root@localhost ~]# yum info httpd
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
已安装的软件包
名称 :httpd
架构 :x86_64
版本 :2.4.6
发布 :17.el7
大小 :3.7 M
源 :installed 软件库汇报已经安装
来自源:anaconda
简介 : Apache HTTP Server
网址 :http://httpd.apache.org/
协议 : ASL 2.0
描述 : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
provides:从文件去搜寻软件,类似于rpm - qf功能。

查看以pam开头的软件的名称:
[root@localhost ~]# yum list pam*
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
已安装的软件包
pam.x86_64 1.1.8-9.el7 @anaconda/7.0
pam_krb5.x86_64 2.4.8-4.el7 @anaconda/7.0
可安装的软件包
pam.i686 1.1.8-9.el7 bash
pam-devel.i686 1.1.8-9.el7 bash
pam-devel.x86_64 1.1.8-9.el7 bash
pam_krb5.i686 2.4.8-4.el7 bash
pam_pkcs11.i686 0.6.2-17.el7 bash
pam_pkcs11.x86_64 0.6.2-17.el7 bash

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

安装install
升级update

3 移除功能:yum[remove] 软件

移除 :remove

4 yum的配置文件

由于网络和映射站台过远的问题,可能获取速度非常慢,需要手动修改配置文件。
配置文件的参数说明:
[base]:代表软件库的名字,中括号一定要存在,里面的名称可以随意取,但不能有两个相同的软件库名称,否则yum会不晓得到哪里去找列表。
name: 说明软件库的意义。
mirrorlist=:列出这个软件库可以使用的映射站台,如果不想使用,可以批注。
baseurl=:这个最重要,因为后面是软件库实际的网址。
enable=1:如果是1,则表示这个软件库被启动,如果为0表示没有被启动
gpgcheck=1.RPM数字签名,查阅内部的数字签名
gpgkey=:就是数字签名的公钥文件所在位置,使用默认即可

修改软件库产生的问题与解决之道

yum clean [packages|headers|all]
参数:
packages:将已下载的软件文件删除
headers:将下载的软件文件头删除
all:将所有软件库数据都删除

[root@localhost ~]# yum clean all

5 yum 的软件群组功能

yum [群组功能] [软件群组]
选项与参数:
grouplist:列出所有可能使用的[软件群组组],
groupinfo:后面接group_name,则可了解该group内含的所有软件名
[root@localhost ~]# yum groupinfo "python"
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

组:Python
组编号:python-web
描述:基本 Python 网页应用程序支持。
必要的软件包:
=MySQL-python
freetype-devel
libcurl
=libcurl-devel
libjpeg-turbo
=libjpeg-turbo-devel
mod_wsgi
=numpy
=numpy-f2py
python
=python-magic
=python-psycopg2
=python-virtualenv
groupinstall 可以安装一整组软件群组,
[root@localhost ~]# yum groupinstall python
groupremove:移除某个群组:

6 EPEL/ELRepo 外挂软件以及自定义配置文件

Linux上有很多统计软件,这个软件名称为[R],在Fedora基金会中发展了一个外加软件计划(EPEL),这个计划主要是针对红帽发行的:
https://fedoraproject.org/wiki/EPEL
而centos 7 中的外挂软件仓库地址为:
https://dl.fedoraproject.org/pub/epel/7/x86_64/
PCI passthrough虚拟化而使用到的ELRepo软件仓库:针对centos
http://elrepo.org/tiki/tiki-index.php
http://elrepo.org/linux/elrepo/el7/x86_64/
http://elrepo.org/linux/kernel/el7/x86_64/
这些软件仓库大多提供的是数据与核心、核心模块与虚拟化相关的软件。

7 yum源的本地安装

[root@localhost ~]# mount /dev/cdrom /mnt/
vim /etc/yum.repos.d/yum.repo
[bash]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0

[root@localhost ~]# yum clean all 进行yum源的重载操作
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在清理软件源: InstallMedia bash
Cleaning up everything
[root@localhost ~]# yum repolist
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
bash | 4.1 kB 00:00:00
(1/2): bash/group_gz | 134 kB 00:00:00
(2/2): bash/primary_db | 3.4 MB 00:00:00
源标识 源名称 状态
bash server 4,305
repolist: 4,305
若有4305这个数字则表示可用
[root@localhost ~]# yum repolist
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
正在尝试其它镜像。
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
正在尝试其它镜像。
源标识 源名称 状态
bash server 0
repolist: 0
此时,则表示不可用

8 yum的网络安装

1 yum的httpd 安装
先通过本地安装的方式安装httpd服务
[root@localhost ~]# yum -y install httpd
启动服务:
[root@localhost ~]# systemctl start httpd
设置开机自启动
[root@localhost ~]# systemctl enable httpd
查看httpd服务的默认安装目录,/var/www/html
进行文件的创建
[root@localhost ~]# mkdir /var/www/html/iso
将镜像文件挂在到创建的文件上
[root@localhost ~]# umount /mnt/
[root@localhost ~]# mount /dev/cdrom /var/www/html/iso/
mount: /dev/sr0 写保护,将以只读方式挂载
进行yum源的配置
baseurl=http://ip地址/创建的文件夹
[root@localhost ~]# cat /etc/yum.repos.d/yum.repo
[bash]
name=server
baseurl=http://127.0.0.1/iso
enabled=1
gpgcheck=0
进行 yum clean all
[root@localhost ~]# yum clean all
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在清理软件源: InstallMedia bash
Cleaning up everything
查看
yum repolist
[root@localhost ~]# yum repolist
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
bash | 4.1 kB 00:00:00
(1/2): bash/group_gz | 134 kB 00:00:00
(2/2): bash/primary_db | 3.4 MB 00:00:00
源标识 源名称 状态
bash server 4,305
repolist: 4,305

2 通过FTP进行yum源:
安装vsftpd
[root@localhost ~]# yum -y install vsftpd
启动并设置开机自启动
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl enable vsftpd
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
创建文件:

[root@localhost ~]# mkdir /var/ftp/pub/iso
[root@localhost ~]# umount /var/www/html/iso/
[root@localhost ~]# umount /var/www/html/iso/
umount: /var/www/html/iso/:未挂载
[root@localhost ~]# mount /dev/cdrom /var/ftp/pub/iso/
mount: /dev/sr0 写保护,将以只读方式挂载
修改配置文件
[root@localhost ~]# cat /etc/yum.repos.d/yum.repo
[bash]
name=server
baseurl=ftp://127.0.0.1/pub/iso
enabled=1
gpgcheck=0
更新yum源:
[root@localhost ~]# yum clean all
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在清理软件源: InstallMedia bash
Cleaning up everything
查看是否配置成功:
[root@localhost ~]# yum repolist
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
bash | 4.1 kB 00:00:00
(1/2): bash/group_gz | 134 kB 00:00:00
(2/2): bash/primary_db | 3.4 MB 00:00:00
源标识 源名称 状态
bash server 4,305
repolist: 4,305

以上若要通过网络进行配置需关闭防火墙和SELinux,否则可能会出现未知错误。

9 第三方yum安装:

创建绝对路径:
[root@localhost ~]# mkdir /root/aaa
将软件复制到其路径上
[root@localhost ~]# cd /root/aaa/
[root@localhost aaa]# mv /root/wps-office_10.1.0.5672~a21_amd64.rpm ./
[root@localhost aaa]# ls
wps-office_10.1.0.5672~a21_amd64.rpm
必须使用编辑
[root@localhost ~]# createrepo -v /root/aaa/
配置yum源
[root@localhost ~]# cat /etc/yum.repos.d/yum.repo
[bash]
name=server
baseurl=ftp://127.0.0.1/pub/iso
enabled=1
gpgcheck=0
[wps]
name=wps
baseurl=file:///root/aaa
enabled=1
gpgcheck=0
清理yum源
[root@localhost ~]# yum clean all
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在清理软件源: bash wps
Cleaning up everything
查看yum源:
[root@localhost ~]# yum repolist
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
bash | 4.1 kB 00:00:00
wps | 2.9 kB 00:00:00
(1/3): wps/primary_db | 2.8 kB 00:00:00
(2/3): bash/group_gz | 134 kB 00:00:00
(3/3): bash/primary_db | 3.4 MB 00:00:00
源标识 源名称 状态
bash server 4,305
wps wps 1
repolist: 4,306

安装:
[root@localhost ~]# yum -y install wps-office.x86_64
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在解决依赖关系
--> 正在检查事务
---> 软件包 wps-office.x86_64.0.10.1.0.5672-1.a21 将被 安装
--> 解决依赖关系完成
依赖关系解决
Package 架构 版本 源 大小
正在安装:
wps-office x86_64 10.1.0.5672-1.a21 wps 78 M

事务概要
安装 1 软件包

总下载量:78 M
安装大小:345 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : wps-office-10.1.0.5672-1.a21.x86_64 1/1
验证中 : wps-office-10.1.0.5672-1.a21.x86_64 1/1

已安装:
wps-office.x86_64 0:10.1.0.5672-1.a21

9 全系统自动升级

我们可以选择自动对系统进行升级,使用yum - y update 可以完成。如果进行自动升级,则可以写入例行工作中

[root@localhost ~]# echo '10 1 root /usr/bin/yum -y --enablerepo=epel update'>/etc/cron.d/yumupdate
[root@localhost ~]# vim /etc/crontab
[root@localhost ~]# cat /etc/cron.d/yumupdate
10 1
root /usr/bin/yum -y --enablerepo=epel update