RPM 软件包管理
软件包的分类
- 二进制包(binary code):无须编译,可以直接安装使用
- 源码包(source code):没有经过编译的包,需要借助 gcc、c++ 编译器编译后才能运行
软件包的区分
- 二进制包:软件包存在 bin 可执行文件
- 源码包:软件包的文件包含有.h、.c、.cpp等结尾的源码文件
RPM
CentOS 操作系统中一款默认软件管理的工具,红帽包管理工具(Red Hat PackageManager)
- 对软件包实现快速安装、管理及维护
- 适合的发行版:CentOS、RHEL、Fedora、SUSE
- 通常用来管理以“.rpm”后缀结尾的软件包
RPM 包的格式
大多数而言:
- name-version.rpm
- name-version-noarch.rpm
- name-version-arch.src.rpm
软件包格式说明:
- name:软件名称
- version:版本号,通用格式:“主.次.修正”“-n”表示发布版本号,第 n 次编译生成的
- arch:使用的硬件平台(i386、i586、i686、x86_64、sparc、alpha 等)
- .rpm:编译好的二进制包,直接使用
rpm
安装 - .src.rpm:源代码包,源码编译生成
- el*:软件包发行版本,el6表示适合6.x版本的发行版
- devel:开发包
- noarch:软件包可以在任何平台上安装
RPM 命令解析
命令/参数/选项 | 说明 |
---|---|
rpm -qa | 标准输出所有安装的软件包 |
rpm -q zip | 检查软件包是否安装,如果安装返回版本信息 |
rpm -qi zip | 标准输出软件包安装的版本信息 |
rpm -e zip | 卸载软件包 |
rpm -e –nodeps zip | 强制卸载 |
rpm -ivh ******.rpm | 安装软件 |
rpm -Uvh ******.rpm | 升级软件 |
rpm -ivh –nodeps ******.rpm | 不验证依赖包安装软件 |
rpm -qa –last | 按照安装时间显示所有安装的软件包(最新的在最上面) |
rpm –help | 帮助信息(查询更多使用方法) |
源码包管理
标准的以“.zip、.tar”结尾的源代码包不能使用 RPM 工具去操作
安装步骤
./configure
:预编译阶段,检测系统基础编译环境是否满足,生成 makefile 文件(通常一些软件的源码编译时候,还需要带一些参数选项进行一个编译过程,具软件的使用情况而定)make
:编译,基于第一步生成的 makefile 文件,进行源代码的编译make install
:安装,编译完毕之后将相关的可运行文件安装到系统中- 一些特殊源码可以只是其中一个或者两个步骤
示例
编译安装 nginx
从 nginx 官网下载最新的源码包
http://nginx.org/en/download.html
下载地址:http://nginx.org/download/nginx-1.22.0.tar.gz
解压源代码包
tar -xf nginx-1.22.0.tar.gz
进入解压后的文件夹,进行预编译阶段
处理报错信息
缺少 pcre-devel 编译环境,可以使用yum
安装即可(一般在进行源代码编译时候,会存在很多编译环境的问题,这个要按照实际情况来解决)
继续预编译
完成预编译阶段后,会返回一些软件预编译的一些结果
编译及编译安装
部分软件在编译安装时候,执行过程稍长
make && make install
安装成功
编译安装总结
- 预编译阶段可以对软件的安装目录、功能选择等参数进行配置,内容可以参考源代码根目录下的 README 或 INSTALL 等相关文件
- 编译步骤是将源代码编译成为可以被执行的文件,文件放置在当前的目录下,这个时候还没有被安装到预安装的目录下
- 编译安装步骤是进行最后的安装步骤,把之前所编译完成的数据安装到默认的目录下
YUM 软件包管理
YUM 简述
前端软件包管理器 YUM(Yellow dog Updater, Modified)
- 适用于 CentOS、Fedora、RedHat、SUSE 等发行版
- 用于管理 rpm 包
- 从指定的服务器自动下载 RPM 包并且安装,自动处理并安装依赖性关系
- rpm 包管理遇到有依赖的时候,需要逐个手动下载安装,yum 工具最大好处就是自动处理依赖,提升效率
YUM 工作原理
组成
- YUM 服务端:通过 HTTP 或者 FTP 服务发布
- YUM 客户端:客户端安装的所有 RPM 包都来自 YUM 服务端,使用
yum
安装软件或者搜索文件时,会查找/etc/yum.repos.d 下以.repo 结尾文件,CentOS 默认的文件是:CentOS-Base.repo,该文件配置了 YUM 服务端的镜像地址,每次安装、升级 RPM 包,YUM 客户端都会查找这些文件 - YUM 客户端如果没有外网,可以构建光盘或者内部的 YUM 源,客户端安装软件,默认会把 YUM 源地址、头部信息、软件包、数据库信息、缓存文件存储在/var/cache/yum中,每次使用 YUM 时候,优先通过 cache 查找相关软件包,cache 中不存在的时候,才会访问外网 YUM 源
[root@iZrgngz5lz7qzsZ ~]# ll /var/cache/yum/
total 4
drwxr-xr-x 3 root root 4096 Sep 5 19:32 x86_64
[root@iZrgngz5lz7qzsZ ~]#
yum 命令指南
企业常用命令
- -y:表示安装与卸载出现 yes 时,自动确认 yes
- -q:表示不显示安装过程
命令/参数/选项 | 说明 |
---|---|
yum install zip | 交互式安装软件 |
yum install zip -y | 自动确定安装软件 |
yum search zip | 搜索软件包 |
yum list zip | 显示指定软件包的安装情况 |
yum list | 显示所有已经安装及可被安装的软件 |
yum remove zip -y | 删除程序包 |
yum update | 内核升级(企业环境慎用) |
yum update zip | 更新软件 |
yum check-update | 检查可更新的软件 |
yum info zip | 显示安装包信息 |
yum provides “*/sz” | 列出该命令由什么包提供的 |
yum deplist zip | 查看该程序的依赖情况 |
yum clean packages | 清除缓存目录下的安装包 |
yum clean headers | 清除缓存目录下的头部信息 |
yum clean all | 清除缓存目录下的软件包以及旧的头部信息 |
yum install –downloadonly –downloaddir=/tmp zip | 只下载该软件的 rpm 包,并保存在指定目录下 |
YUM 源构建
基于 iso 镜像构建本地源
- 该方式只限于本机可以使用,部分软件也无法安装,因为里面的安装包并不完整
基于 iso 镜像构建本地源就是利用光盘里面的软件包实现 YUM 安装软件
CentOS-7-x86_64-Everything-2009:针对这个版本的镜像包,集成了很多软件,可以当作本地源
将镜像文件放在服务器
将镜像文件挂载到/mnt目录下
mount /home/CentOS-7-x86_64-Everything-2009.iso /mnt
临时改名/etc/yum.repos.d 下面的配置文件
这步目的是为了验证本地 YUM 源的使用
新建一个 .repo 文件
内容如下:
[yum]
name = CentOS7
baseurl = file:///mnt
enabled=1
gpgcheck=1
gpgkey=file://mnt/RPM-GRG-KEY-CentOS-7
- name:源名称
- baseurl:iso 镜像挂载目录
- gpgcheck:是否检查 GPG-KEY
- enabled:是否启用
- gpgkey:指定加载目录下的 GPG-KEY文件验证
测试结果(完毕)
yum clean all
yum makecache
yum install tcpdump -y
基于 HTTP 构建 YUM 源
构建基于内网的 HTTP 方式的 YUM 源,企业中更常见
- 服务端:192.168.204.110
- 客户端:192.168.204.109
先挂载镜像文件
安装一个 nginx,并可以实现访问
在 nginx 默认的 /目录下增加一个文件夹
mkdir centos
复制/mnt 下的相关文件到 centos 目录下
(复制时间稍微有点长)
cp -R /mnt/Packages/* /usr/share/nginx/html/centos/
进入目录下,使用 createrepo 生成本地源
cd /usr/share/nginx/html/
createrepo centos/
利用 HTTP 发布 YUM 源
配置一下,让可以访问到 centos 目录即可
在客户端(内网的另一个环境)配置一个测试的 .repo 文件
内容如下:http.repo
[base]
name = "CentOS7 HTTP YUM"
baseurl = http://192.168.204.110/centos/
enabled = 1
gpgcheck = 0
[updates]
name = "CentOS7 HTTP YUM"
baseurl = http://192.168.204.110/centos/
enabled = 1
gpgcheck = 0
客户端测试
yum clean all
yum makecache
yum install tcpdump -y
从服务端的 nginx 日志可以看出客户端访问的记录
如何扩展服务端的包呢?
尝试安装一下 ntfs-3g 软件包,但是发现没有这个包
我们需要从外网下载这个软件包,并放在服务端的 centos 目录下
cd /usr/share/nginx/html/centos/
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-libs-2022.5.17-1.el7.x86_64.rpm
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-devel-2022.5.17-1.el7.x86_64.rpm
更新软件包
cd /usr/share/nginx/html/
createrepo --update centos/
客户端验证一下:OK的
yum clean all
yum makecache
yum install -y ntfs-3g-devel.x86_64 ntfs-3g-libs.x86_64
同步外网的 YUM 源
针对上面的【基于 HTTP 的企业内部 YUM 源】,可以使用外网的 YUM 源,来同步到本地的,更加完善企业内部的 YUM 源的软件包
- 获取外网 YUM 源软件的方式推荐使用:reposync,可以同步几乎所有的 YUM 源
比如我在客户端想升级一下 NetworkManager
提示没有更新的包,就需要同步下外网的 YUM 软件了
在服务端操作:下载阿里云的 CentOS7 的 YUM 源文件
wget https://mirrors.aliyun.com/repo/Centos-7.repo
服务端配置一下
yum clean all
yum makecache
安装 reposync 命令
yum provides "*/reposync"
yum install -y yum-utils-1.1.31-54.el7_8.noarch
获取外网所有的 YUM 软件包
## -r 指定 repolist id;不加 -r 表示获取外网所有的包
## -p 指定下载软件的路径
## 这玩意有点多,1W多个软件包,需要一定的空间和时间
reposync -r base -p /usr/share/nginx/html/centos/
reposync -r updates -p /usr/share/nginx/html/centos/
更新服务端软件包
cd /usr/share/nginx/html/
createrepo --update centos/
客户端再次验证一下升级 NetworkManager :OK的
这个地方有点问题,折腾了很久,下面记录一下这个过程
通过上述升级服务端的软件包以后:发现搜索出来的包还是旧版本
服务端访问一下软件包目录:发现多了2个文件夹:考虑是不是因为升级的时候将升级的包放在了其他位置
然后对 updates 目录下重新做了操作:createrepo Packages/
改了一下客户端的 repo 文件
然后重新生效了一下源:
最后成功升级:OK
今天的文章linux软件包是什么_linux安装rpm软件包命令分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83941.html