Linux yum和rpm

Linux 软件管理

在大多数Linux系统中,要对软件进行管理,通常由三种方式,分别是编译安装、包管理工具安装和通过仓库进行安装;

  • 编译安装:需要手动解决依赖问题,不适合新手操作;

  • 包管理工具安装:安装简单、不自动解决依赖问题,主要是处理单个软件包;

  • 通过仓库管理:安装简单、能自动解决依赖问题,处理从仓库中获取和安装软件及其依赖的整个流程;

在Red Hat系列的Linux发行版中,例如redhat、centos、Fedora等使用的包管理工具是RPM,RPM是redhat package manager的缩写,通过RPM这个工具,可以轻松实现对单个软件包的管理。

rpm

RPM这个工具提供了很多使用选项,常用的就是一下几种

  • 安装:-i

  • 升级:-U

  • 卸载:-e

  • 查询:-q

安装升级

# 正常安装一个软件包
rpm -ivh xxx.rpm

# 升级一个软件包,如果原本不存在就直接安装
rpm -U xxx.rpm

# 强制安装一个软件包
rpm -i --force xxx.rpm

# 不检查依赖安装一个软件包
rpm -i --nodeps xxx.rpm

卸载操作

# 正常卸载
rpm -e xxx.rpm

查询操作

# 查看某个已安装的软件包
rpm -q

# 查询已安装的包的所有文件
rpm -ql xxx.rpm

# 查询所有已安装的包
rpm -qa

# 查看某个包是否被安装
rpm -q xxx.rpm

# 查询某个文件属于哪个软件包
rpm -qf file_name

yum

yum是Yellowdog Update Modifier的缩写,是基于rpm开发而来,yum提供了命令行界面,用户通过输入相关命令来实现软件包的管理。

要使用yum来进行软件管理,首先就需要yum仓库,yum仓库里面存放两类数据,第一类就是软件包,第二类就是元数据信息。

例如centos,如果不是最小化安装,镜像包里面就带了个离线的yum仓库,除了这种离线的yum仓库外,网络上还有很多现成的。

  • Packages:存放的是rpm软件包

  • repodata:存放的是软件包之间元数据信息和以来关系

yum工作原理

yum是一个C/S架构的基于RPM包管理的前端工具,yum服务端存放软件包相关数据,客户端就是我们的Linux主机。

  1. 首先客户端通过配置文件里面的配置连接到yum服务端

  2. 从yum服务端下载repodata文件,并从中检索对应信息,例如要安装mysql这个服务,就会检索安装mysql需要使用的软件包已经相关的依赖包

  3. 检索到对应的软件包后,会下载到Linux主机上,安装完成后会将这些下载的软件包删除,但是repodata文件会保存下来,后面再检索的时候可以直接通过本地的这个文件检索了。

yum客户端配置

像redhat系列的Linux发行版,出场就装了yum的,我们需要做的就是更改yum的配置文件,这样才能根据配置文件的信息连接到对应的服务端。

yum有两个配置文件,但是主配置文件我们一般不用改,只需要在/etc/yum.repos.d/下加入.repo结尾的配置文件就行了。

每个配置文件一般最少需要四个部分组成;

  • [ XXXX ] 仓库的唯一标识

  • name= XXX 仓库的描述信息

  • baseurl= XXXXX 仓库的地址

  • enabled=1|0 是否启动改仓库,不配置默认启用

  • gpgcheck=0|1 是否开启gpg校验

说明:

  • 不指定enabled=1,默认enabled=1,标识启用这个仓库

  • 一般情况下不用开启gpg校验,如果要开启,还需要gpgurl=xxx来指定GPG公钥的位置

  • 通过baseurl来指定仓库地址的时候,需要在这个路径下存在repodata

  • baseurl支持四种路径(file:// http:// https:// ftp://),如果本地就存在yum仓库,使用file://来进行挂载。

例如:CentOS7 使用本地yum仓库配置yum配置文件

1、挂载本地光盘

[root@centos7 ~]# mkdir /mnt/misc
[root@centos7 ~]# mount /dev/sr0 /mnt/misc

2、写入/etc/fstab持久生效

[root@centos7 ~]# vim /etc/fstab
/dev/cdrom /mnt/misc/ iso9660 defaults 0 0

3、编辑yum的配置文件

vim /etc/yum.repos.d/local.repo
[local]
name=local_repo
baseurl=file:///mnt/misc
enabled=1
gpgcheck=0

4、清除yum缓存,就是删除本地已经存在的repodata文件等,因为旧的仓库元数据缓存可能就与新的仓库配置不匹配了,防止出现找不到软件包或依赖性解析失败。

yum clean all

5、确认仓库是否正常添加并列出

yum repolist

6、安装软件

yum install zip 

yum服务端

除了本地镜像中带有一个yum仓库,还可以自建搭建一个yum仓库。最简单的就是用别人的,互连网上有很多在线yum源可以使用,直接将本地配置文件的baseurl指向对应地址即可。但是使用这种方法需要本地Linux主机能访问互连网。

国内常见的在线yum源:

#阿里云
https://mirrors.aliyun.com

#腾讯云
https://mirrors.cloud.tencent.com

#华为云
https://repo.huaweicloud.com/centos

#清华大学
https://mirrors.tuna.tsinghua.edu.cn

以为阿里云为例,为centos7配置yum客户端:

1、访问这个网址,选择操作系统为centos

https://mirrors.aliyun.com

2、根据centos版本选择指定的仓库,这儿有现成的repo文件,直接执行命令下载下来用就行了

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

3、测试是否可以正常使用
这些都是提供的yum源仓库,

4、此时便可进行软件下载了

yum install wget

yum的自带的变量

打开阿里云提供的配置文件,里面存在很多变量,这些变量都是yum自带的变量,会根据系统的信息来确定相关的值。

$releasever: 当前系统的发行版本。指的是OS的主版本号,如:8,7,6

$arch: CPU架构,变量的值通过 uname 命令得出,如:aarch64, i586, i686,x86_64等

$basearch:CPU的架构,系统基础平台;i386, x86_64

$contentdir:表示目录,比如:centos-8,centos-7

$YUM0-$YUM9:自定义变量

例如:
本地Linux主机是Centos7系统,所以这里的为7,$basearch为x86_64

[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

说明:

  • basrurl可以一次性指定多个url地址的,换行写

  • 在一个 .repo 文件中配置多个仓库,每个仓库的配置都以其唯一的 [repo-id] 开始。

私有yum仓库搭建

可以自己搭建一个yum仓库,只需要将相关的软件包拷贝到服务器上,然后通过createrepo 命令来生成repodata这个元数据信息文件。

createrepo命令格式:

createrepo 存放软件包的目录

例如:
1、先安装apache服务,centos上对应的软件包名叫作httpd
2、去一个在线的yum仓库或者本地光盘中将rpm包拷贝到http根目录的指定目录下
3、使用createrepo 来生成repodata元数据文件
4、给需要使用这个yum源的Linux主机配置yum的.repo 配置文件
5、测试是否正常使用

yum客户端的命令

yum clean all   # 清除本地下载的rpm包缓存和repodata文件

yum makecache   # 构建仓库的缓存,会下载yum仓库的repodata文件到本地

yum install packeg_name       # 下载指定的软件包

yum localinstall packeg_name  # 安装本地的rpm包,会自动下载相关依赖

# 只下载 不安装 不指定不指定 --downloaddir 选项,默认存放在/var/cache下
yum install package_name --downloadonly --downloaddir=/path/to/directory

# 使用特定仓库来下载软件包
yum install package_name --enablerepo=repository_name

yum remove package_name       # 移除指定的软件包

yum list package              # 查看指定的包是否存在yum源中

yum repolist                  # 查询本地配置了多少个yum源的信息

posted on 2022-06-20 18:40  背对背依靠  阅读(124)  评论(0编辑  收藏  举报