RPM软件包管理工具
一、RPM概述
RPM软件包管理器:Red-Hat package Manager
-
由Red Hat公司提出, 被众多Linux发行版所采用
-
建立统一的文件数据库
-
详细记录软件包安装、卸载、升级等变化信息
-
自动分析软件包依赖关系
RPM软件包获取途径:
-
RPM软件包软件素材参考:nginx.org
-
RPM软件包一般命名格式:bash-4.1.2.-28.el6.x86_64.rpm
二、查询已安装的RPM软件信息
rpm -ivh 软件名(安装软件)
- -i 安装
- -v 过程
- -h #进度条
rpm 卸载
rpm -e 软件名(卸载安装包)
RPM软件包管理工具
查询通式:rpm -q 软件名
| 选项 | 功能 |
|---|---|
| rpm -qa(all) | 显示所有以rpm方式安装的软件列表 |
| rpm -q 软件名 | 查询指定软件是否安装 |
| rpm -qi 软件名 | 查看软件的详情信息 |
| rpm -ql 软件名 | 显示所有关于该软件的文档 |
| rpm -qc 软件名 | 显示当前文件的配置文件,一般一个配置一个文件 |
示例:
1.查询某个软件是否安装:rpm -q 软件名
[root@localhost data]# rpm -q tree//查询tree是否已安装,发现已安装
tree-1.6.0-10.el7.x86_64
[root@localhost data]# rpm -q httpd//查询httpd是否已安装,发现未安装
未安装软件包 httpd
2.查看显示某个文件的所有文档:rpm -ql 软件名
[root@localhost data]# rpm -ql tree//查看显示所有关于tree的文档
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
3.查看某个软件的详细信息:rpm -qi 软件名
[root@localhost data]# rpm -qi tree//查看tree的版本、许可协议等详细信息
Name : tree
Version : 1.6.0
Release : 10.el7
Architecture: x86_64
Install Date: 2024年03月28日 星期四 16时04分36秒
Group : Applications/File
Size : 89505
License : GPLv2+
Signature : RSA/SHA256, 2014年07月04日 星期五 13时36分46秒, Key ID 24c6a8a7f4a80eb5
Source RPM : tree-1.6.0-10.el7.src.rpm
Build Date : 2014年06月10日 星期二 03时28分53秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://mama.indstate.edu/users/ice/tree/
Summary : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format. Tree is basically a UNIX port of the DOS tree
utility.
三、安装、升级、卸载RPM软件包
- 安装
安装命令:rpm -ivh RPM包文件
示例:
1.一开始通过直接安装RPM软件包,但因此RPM产生错误:依赖检测失败
[root@localhost ~]# mount /dev/sr0 /mnt//将光驱里面的内容复制到mnt目录
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
/dev/sr0 已经挂载到 /mnt 上
[root@localhost ~]# cd /mnt/Packages
[root@localhost Packages]# ls|grep httpd
httpd-2.4.6-67.el7.centos.x86_64.rpm
httpd-devel-2.4.6-67.el7.centos.x86_64.rpm
httpd-manual-2.4.6-67.el7.centos.noarch.rpm
httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
libmicrohttpd-0.9.33-2.el7.x86_64.rpm
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-67.el7.centos.x86_64.rpm//安装httpd,需根据提示先安装依赖软件。
警告:httpd-tools-2.4.6-67.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-tools-2.4.6-67.el7.centos.x86_64 已经安装
[root@localhost Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm
警告:httpd-2.4.6-67.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-67.el7.centos.x86_64 需要
2.依赖检测失败:/etc/mime.types 被 httpd-2.4.6-67.el7.centos.x86_64 需要,故可以尝试安装 mailcap 包,因为 /etc/mime.types 文件通常属于 mailcap 软件包的一部分。你可以使用 yum 命令来安装它们。
[root@localhost ~]# yum install mailcap
已加载插件:fastestmirror, langpacks
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 mailcap.noarch.0.2.1.41-2.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
=======================================================================================================
Package 架构 版本 源 大小
=======================================================================================================
正在安装:
mailcap noarch 2.1.41-2.el7 base 31 k
事务概要
=======================================================================================================
安装 1 软件包
总下载量:31 k
安装大小:62 k
Is this ok [y/d/N]: y
Downloading packages:
警告:/var/cache/yum/x86_64/7/base/packages/mailcap-2.1.41-2.el7.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
mailcap-2.1.41-2.el7.noarch.rpm 的公钥尚未安装
mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:05
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥
导入 GPG key 0xF4A80EB5:
用户ID : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
指纹 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
软件包 : centos-release-7-4.1708.el7.centos.x86_64 (@anaconda)
来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
是否继续?[y/N]:y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告:RPM 数据库已被非 yum 程序修改。
正在安装 : mailcap-2.1.41-2.el7.noarch 1/1
验证中 : mailcap-2.1.41-2.el7.noarch 1/1
已安装:
mailcap.noarch 0:2.1.41-2.el7
完毕!
3.最后安装成功。
[root@localhost ~]# mount /dev/sr0 /mnt//将光驱里面的内容复制到mnt目录
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
/dev/sr0 已经挂载到 /mnt 上
[root@localhost ~]# cd /mnt/Packages
[root@localhost Packages]# ls|grep httpd
httpd-2.4.6-67.el7.centos.x86_64.rpm
httpd-devel-2.4.6-67.el7.centos.x86_64.rpm
httpd-manual-2.4.6-67.el7.centos.noarch.rpm
httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
libmicrohttpd-0.9.33-2.el7.x86_64.rpm
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
准备中... ################################# [100%]
软件包 httpd-tools-2.4.6-67.el7.centos.x86_64 已经安装
[root@localhost Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-67.el7.centos ################################# [100%]
注意:
因rpm不会自动解决依赖关系,实际项目中一般使用yum安装或源代码编译安装。
- 升级
升级命令:rpm -U|-F RPM包文件
-
#-U:升级某个软件包,若未安装则进行安装
-
#-F:升级某个软件包,若未安装则直接结束
- 卸载
卸载命令:rpm -e 软件名
示例:
[root@localhost Packages]# rpm -evh httpd-2.4.6-67.el7.centos.x86_64.rpm //卸载httpd
辅助选项:
| 选项 | 说明 |
|---|---|
| -h | 在安装或升级软件包的过程中,以“#”号显示安装进度。 |
| -v | 显示软件安装过程中的详细信息。 |
| --force | 强制安装某个软件包,比如要安装版本更旧的软件包。 |
| --nodeps | 在安装或升级、卸载一个软件包时,不检查与其他软件包的依赖关系,强制安装。 |
。
四、维护RPM数据库
当RPM 数据库发生损坏,可通过重建RPM数据库修复。操作步骤:
1)重建RPM数据库
rmp --rebuilddb 或 rmp --initdb
2)导入验证公钥
rpm --import /mnt/RPM-GPG-KEY-CentOS-7
五、解决软件包依赖关系的方法
1)安装有依赖关系的多个软件时:
-
被依赖的软件包需要先安装
-
可同时指定多个.rpm包文件进行安装
2)卸载有依赖关系的多个软件时:
-
依赖其他程序的软件包需要先卸载
-
可同时指定多个软件名进行卸载
3)忽略依赖关系:
- 结合“--nodeps”选项,但可能导致软件异常
YUM
一、YUM概述
Yum(全称为 Yellow dog Updater, Modified) 是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
客户端配置文件:
1.必须在/ec/yum.repos.d/这个目录下
2.配置文件必须以*.repo结尾
服务端配置文件:
1.安装包
2.元信息(数据库)
-
安装包的位置
-
安装包的依赖关系
二、YUM的优缺点
yum的优点:
-
简单
-
自动解决依赖关系
yum的缺点:
-
软件的功能不全
-
软件的版本过旧
三、YUM命令
| 命令 | 含义 |
|---|---|
| yum list 软件名 | 显示所有可用包 |
| yum info 软件名 | 显示所有可用包的信息 |
| yum history | 查看当前yum操作历史 |
| yum provides 关键词 | 精确查找 |
| yum install 软件名 | 安装软件包 |
四、YUM仓库的组成
-
元数据:里面有包文件路径,软件的依赖关系,目录
-
rpm包:安装包,在Packages内
五、YUM的搭建原理
六、搭建YUM仓库
1.挂载提供安装包和元信息
[root@localhost ~]# mount /dev/sr0 /mnt //挂载提供安装包和元信息
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
/dev/sr0 已经挂载到 /mnt 上
2.切换到指定目录,建立子文件夹,并移走网络源
[root@localhost ~]# cd /etc/yum.repos.d //切换到指定目录
[root@localhost yum.repos.d]# mkdir bak //建立bak子文件夹
[root@localhost yum.repos.d]# ls //显示指定目录内容
bak CentOS-Debuginfo.repo CentOS-Sources.repo
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo //移走网络源到bak
[root@localhost yum.repos.d]# mv *.repo bak
[root@localhost yum.repos.d]# ls //显示指定目录内容
bak
3.建立本地配置文件
[root@localhost yum.repos.d]# vim local.repo //建立本地配置文件
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
:wq
4.清除缓存,下载元信息
[root@localhost yum.repos.d]# yum clean all //清除缓存
已加载插件:fastestmirror, langpacks
正在清理软件源: local
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
[root@localhost yum.repos.d]# yum makecache //下载元信息
已加载插件:fastestmirror, langpacks
local | 3.6 kB 00:00:00
(1/4): local/group_gz | 156 kB 00:00:00
(2/4): local/filelists_db | 3.1 MB 00:00:00
(3/4): local/primary_db | 3.1 MB 00:00:00
(4/4): local/other_db | 1.2 MB 00:00:00
Determining fastest mirrors
元数据缓存已建立
5.安装tree软件
[root@localhost yum.repos.d]# yum install tree -y //安装tree软件
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 tree.x86_64.0.1.6.0-10.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
===============================================================================================================
Package 架构 版本 源 大小
===============================================================================================================
正在安装:
tree x86_64 1.6.0-10.el7 local 46 k
事务概要
===============================================================================================================
安装 1 软件包
总下载量:46 k
安装大小:87 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告:RPM 数据库已被非 yum 程序修改。
正在安装 : tree-1.6.0-10.el7.x86_64 1/1
验证中 : tree-1.6.0-10.el7.x86_64 1/1
已安装:
tree.x86_64 0:1.6.0-10.el7
完毕!
6.查看树状图
[root@localhost yum.repos.d]# tree //查看树状图
.
├── bak
│ ├── CentOS-Base.repo
│ ├── CentOS-CR.repo
│ ├── CentOS-Debuginfo.repo
│ ├── CentOS-fasttrack.repo
│ ├── CentOS-Media.repo
│ ├── CentOS-Sources.repo
│ └── CentOS-Vault.repo
└── local.repo
1 directory, 8 files
源代码编译安装
一、使用源代码编译安装软件的优点
-
获得最新的软件版本,及时修复bug;
-
根据用户需要,自由选择模块安装,灵活定制软件功能;
-
可以将文件放在同一目录下,便于管理。
二、编译安装过程
1. 建立新目录,切换到新目录,再tar解压包
用途:
将下载的软件包解压并释放源代码包到指定的目录。
操作:
-
使用tar命令将软件包解压到指定目录,一般选择/usr/src/目录(也可自建目录)。
-
解包后的源代码文件位置:/usr/src/软件名-版本号或自建目录。
示例:
[root@localhost ~]# mkdir /data //建立新目录
[root@localhost ~]# cd /data //切换到新目录
[root@localhost data]# wget http://nginx.org/download/nginx-1.18.0.tar.gz //下载源代码包
--2024-04-03 17:13:01-- http://nginx.org/download/nginx-1.18.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2601::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1039530 (1015K) [application/octet-stream]
正在保存至: “nginx-1.18.0.tar.gz”
100%[=====================================================================>] 1,039,530 182KB/s 用时 5.6s
2024-04-03 17:13:08 (182 KB/s) - 已保存 “nginx-1.18.0.tar.gz” [1039530/1039530])
[root@localhost data]# ls//显示目录
nginx-1.18.0.tar.gz
[root@localhost data]# tar xf nginx-1.18.0.tar.gz//解压源代码包,并指定释放目录
[root@localhost data]# ls//显示目录
nginx-1.18.0 nginx-1.18.0.tar.gz
[root@localhost data]# cd nginx-1.18.0 //切换到nginx-1.18.0
2. 安装依赖环境
[root@localhost nginx-1.18.0]# yum -y install make gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
已加载插件:fastestmirror, langpacks
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/2): extras/7/x86_64/primary_db | 253 kB 00:00:00
(2/2): updates/7/x86_64/primary_db | 26 MB 00:00:18
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 gcc.x86_64.0.4.8.5-16.el7 将被 升级
--> 正在处理依赖关系 gcc = 4.8.5-16.el7,它被软件包 gcc-gfortran-4.8.5-16.el7.x86_64 需要
--> 正在处理依赖关系 gcc = 4.8.5-16.el7,它被软件包 gcc-c++-4.8.5-16.el7.x86_64 需要
3. ./configure配置
用途:
设置安装目录、安装模块等选项。
操作:
使用源码目录中的configure脚本,执行 “./configure --help” 可查看帮助。
配置选项:
--prefix=软件安装目录
示例:
[root@localhost nginx-1.18.0]# ./configure --prefix=/apps/nginx
checking for OS //检测环境, 指定安装目录
+ Linux 3.10.0-693.el7.x86_64 x86_64
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
注意:
-
1)--prefix选项是指定安装目录 ,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,比较凌乱。
-
2)运行configure脚本后会检测make工具是否安装,若未安装会直接报错。
4. make编译与安装
用途:
- 生成可执行的二进制文件。
- 复制二进制的文件到系统,配置应用环境。
操作步骤:
- 编译:执行make命令。
- 安装:执行make install命令。
示例:
[root@localhost nginx-1.18.0]# make -j2 //编译 -j2,2个核心编译
make -f objs/Makefile
make[1]: 进入目录“/data/nginx-1.18.0”
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_log.o \
src/core/ngx_log.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_palloc.o \
src/core/ngx_palloc.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_array.o \
src/core/ngx_array.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_list.o \
[root@localhost nginx-1.18.0]# make install //将软件复制到 前面规定的路径
make -f objs/Makefile install
make[1]: 进入目录“/data/nginx-1.18.0”
test -d '/apps/nginx' || mkdir -p '/apps/nginx'
test -d '/apps/nginx/sbin' \
|| mkdir -p '/apps/nginx/sbin'
test ! -f '/apps/nginx/sbin/nginx' \
|| mv '/apps/nginx/sbin/nginx' \
'/apps/nginx/sbin/nginx.old'
cp objs/nginx '/apps/nginx/sbin/nginx'
test -d '/apps/nginx/conf' \
|| mkdir -p '/apps/nginx/conf'
cp conf/koi-win '/apps/nginx/conf'
cp conf/koi-utf '/apps/nginx/conf'
cp conf/win-utf '/apps/nginx/conf'
test -f '/apps/nginx/conf/mime.types' \
|| cp conf/mime.types '/apps/nginx/conf'
cp conf/mime.types '/apps/nginx/conf/mime.types.default'
test -f '/apps/nginx/conf/fastcgi_params' \
|| cp conf/fastcgi_params '/apps/nginx/conf'
cp conf/fastcgi_params \
'/apps/nginx/conf/fastcgi_params.default'
5.补全命令,关闭防火墙,登录成功
[root@localhost nginx-1.18.0]# ln -s /apps/nginx/sbin/nginx /usr/local/sbin //可以补全
[root@localhost nginx-1.18.0]# systemctl stop firewalld//关闭防火墙
[root@localhost nginx-1.18.0]# setenforce 0
[root@localhost nginx-1.18.0]# nginx