1. 红帽/fedora系
1.1. 软件安装方式
1.1.1. RPM 包安装
- 优点:
- 使用方便,只需使用单一命令就可以管理(例如安装、删除、更新等)软件包。
- 包管理器会处理全部的依赖关系,不需要手动下载和解决依赖问题。
- 可以很轻易地从系统中移除软件包,包括它的所有配置文件。
- 缺点:
- 软件包可能不包含所有你需要的选项或版本。
- 不是所有的 Linux 发行版都使用 RPM,这意味着在非 RPM 系统(例如基于 Debian 的系统)上安装可能会遇到困难。
1.1.2. 源码包安装
- 优点:
- 可以在安装时定制软件,包括添加或删除特性。
- 你可以查看和修改源代码。
- 不依赖于特定的包管理系统,可以在所有的 Linux 发行版中安装。
- 缺点:
- 编译和安装过程可能会遇到困难,特别是对于初学者。
- 你需要手动处理所有的依赖关系。
- 更新和管理安装的软件更为复杂。
1.1.3. 二进制包安装
- 优点:
- 只需要下载并运行即可,无需关心编译和依赖问题。
- 不依赖于特定的包管理系统,可以在所有的 Linux 发行版中安装。
- 缺点:
- 无法定制软件安装。
- 可能会存在一些难以预测的问题,因为这些预编译的二进制文件可能并不完全符合你的系统环境。
- 更新和管理软件也需要手动进行,相对复杂。
1.2. RPM 包管理
1.2.1. 定义
RPM 是Red-Hat Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,通常软件的稳定版会被官方做成rpm,所以软件版本偏低。
1.2.2. RPM 软件包格式
例:mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm
- mysql-connector-odbc:这是软件包名称。
- 5.2.5:这是主要软件的版本号。
- 8:这是这个 RPM 包的版本,8 表示这是对基本软件版本进行打包的第 8 个修订版。
- el7:这是 RPM 软件包的目标平台,这个包设计的目标运行环境是 Enterprise Linux 7,包括 CentOS 7、RHEL 7 等。
- x86_64:这是这个 RPM 软件包的硬件架构,说明这个包是设计给64位的 x86 处理器用的。
- .rpm:这是文件格式,表示这个文件是一个 RPM 包。RPM 是 RedHat Package Manager 的缩写,这是 Red Hat 设计的软件包格式
1.2.3. RPM 软件包获取方式
- 本地的ISO镜像(软件包可能存在版本偏低情况) :
# 挂载镜像
mount -o loop /xxx.iso /opt
# 查看光盘里的rpm包
ls /opt/Packages/ # centos7
ls /opt/minimal/Packages/ # rockylinux9.3
Bash- 官方仓库:对于 CentOS、RHEL 和 Fedora 等使用 RPM 系统的 Linux 发行版,系统自带的官方软件仓库包含了很多已经打包好的 RPM 包。你可以通过如 yum 或 dnf 等包管理器来从这些仓库直接安装软件。
- 第三方仓库:比如 EPEL (Extra Packages for Enterprise Linux),RPMFusion 等,这些都是一些提供额外 RPM 包的知名第三方仓库。你可以配置你的系统来添加这些仓库,然后就可以像使用官方仓库一样使用它们了。
- 软件的官方网站:有时,一些第三方的应用(如 Oracle Database,Microsoft SQL Server 等)会在其官网提供 RPM 包下载。
- 自行编译:如果你需要的软件或者版本在以上渠道无法找到,你还可以自行从源代码编译并打包成 RPM。你可以使用如 rpmbuild 这样的工具,但这通常需要一定的技巧和经验。
1.2.4. RPM 命令
# 安装一个RPM包
# i(install 的缩写)指示 rpm 进行安装操作
# v(verbose 的缩写)是一个调试选项,会输出详细的信息
# h(hash 的缩写)会在安装过程中以哈希符号 (#) 形式展示安装进度。
rpm -ivh <RPM包名全称>
# rpm包在本地
mount /dev/sr0 /opt
rpm -ivh /opt/minimal/Packages/dos2unix-7.4.2-4.el9.x86_64.rpm
# rpm来自于网络,如果安装过程中报错:curl: (60) Peer's Certificate has expired,请先将系统时间修改正确,然后再安装即可
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
# 卸载一个RPM包
rpm -e <RPM包名>
# 更新一个RPM包
rpm -Uvh <RPM包名>
# 检查一个RPM包
rpm -V <RPM包名>
# 查询系统中安装的所有RPM软件包
rpm -qa
# 检索系统中已经安装有关php的软件包
rpm -qa | grep php
# 查询指定软件包是否已安装
rpm -q <RPM包名>
rpm -q zip
# 查询系统中已安装包的描述信息
rpm -qi <RPM包名>
# 查看尚未安装的rpm包信息
rpm -qp <RPM包名>
# 查询系统中已安装包里所包含的文件
rpm -ql <RPM包名>
# 查询指定软件包的所有配置文件
rpm -qc <RPM包名>
rpm -qc mariadb
# 查询某个包安装的帮助文档
rpm -qd <RPM包名>
# 查询系统中指定文件所属的软件包
rpm -qf <路径+文件>
rpm -qf /usr/sbin/ifconfig
# 额外选项
--nomd5 # 不检验软件包的签名
--nodeps # 忽略依赖性安装软件,安装后软件有可能无法使用,最好是解决依赖性后再安装
rpm -e dos2unix --nodeps # 忽略依赖关系
--force # 强制安装软件包,只有安装和升级可以强制执行
Bash
注:当你使用 rpm -i (或者-install) 命令来安装一个 .rpm 结尾的包时,这个命令会执行以下步骤:
- 解包:首先,开始解压 .rpm 包。这个包包含预编译的二进制程序或者库,还有元数据和脚本。
- 检查:然后检查新包,比如看看这个包有没有已经安装过,看看是否还有其他的包需要安装或者升级才能使这个包正常工作。如果有将结束安装并返回一个错误信息。
- 文件分布:如果条件满足,rpm将把包中的文件复制到计算机中的适当的位置。怎么分布取决于包的定义。
- 脚本:此时,可以按照需要运行一些脚本,比如初始化配置,启动服务等。
这种安装方式,只安装单个RPM包,而不会自动解决依赖问题。如果安装的软件包有依赖关系,那么在安装过程中可能会遇到问题。这也是为什么 yum 和 dnf 等高级包管理器更为常用,因为它们可以自动解决它们的依赖关系。
1.2.5. yum管理rpm包
Yum(全称 Yellowdog Updater, Modified)是一个在 Fedora、CentOS 及 RHEL 等基于 RPM 的系统上使用的包管理器。 它用于自动下载并安装 RPM 包,同时处理和解决软件包之间的依赖关系。
注:在rockyLinux9.3中,yum命令链接到了dnf上,即在rockyLinux9.3中使用的是dnf。
1. yum配置文件配置
# 配置文件路径:/etc/yum.conf -> dnf/dnf.conf
[main]
# 指定 YUM 的缓存目录,用于存储已下载的软件包和元数据。$basearch 和 $releasever 是变量,分别表示系统的架构和版本。
cachedir=/var/cache/yum/$basearch/$releasever
# 指定是否保留 YUM 缓存中的软件包。当设置为 0 时,YUM 会在每次操作后自动清理缓存,以释放磁盘空间。设置为 1 时保存。
keepcache=0
metadata_expire=1800 # 过期时间,单位秒
# 指定 YUM 的调试级别。当设置为 2 时,YUM 会输出详细的调试信息,用于故障排除和问题诊断。
debuglevel=2
# 指定 YUM 的日志文件路径。YUM 的操作日志将被记录在该文件中。
logfile=/var/log/yum.log
# 指定是否要求软件包的架构与系统的架构完全匹配。当设置为 1 时,YUM 只会安装与系统架构完全匹配的软件包。
exactarch=1
# 指定是否启用软件包的过时(obsolete)检查。当设置为 1 时,YUM 会检查并自动删除已被新版本软件包替代的过时软件包。
obsoletes=1
# 指定是否启用 GPG 校验。当设置为 1 时,YUM 在安装软件包时会验证软件包的数字签名以确保其完整性和真实性。
gpgcheck=1
# 指定是否启用 YUM 插件。YUM 插件可以提供额外的功能和扩展,如增强的软件包搜索、下载速度优化等。
plugins=1
# 指定保留的旧内核和软件包的数量。当新版本的内核或软件包安装时,旧版本的数量将被限制为指定的数量。这可以防止旧版本占用过多的磁盘空间。
installonly_limit=5
# 指定 YUM 的 bug 追踪器 URL,用于报告和跟踪 YUM 相关的问题。
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
# 指定用于确定系统版本的软件包名称。在 CentOS 系统中,centos-release 软件包用于标识 CentOS 的版本。
distroverpkg=centos-release
Bash2. yum常用命令选项
# 仓库
yum repolist # 查询可用仓库
yum repolist all # 查看包括已启用或禁用的所有仓库状态
# (centos7.9)关闭与启用仓库:本质:都是在修改repo文件中的enable的值 0 不启用 1 启用
yum-config-manager --disable epel #关闭仓库epel
yum-config-manager --enable epel #启用仓库epel
# 查看
yum list # 列出可用仓库中所有的软件包
yum list | less
yum grouplist # 列出可用仓库中的软件组
yum provides /usr/sbin/ifconfig # 查询命令所属的软件包,可以不加路径,只写命令名字
# 与rpm -qf的区别在于yum provides后可以只跟命名名
# 安装
yum install httpd httpd-tools -y # 加上-y选项可以变成非交互
yum groupinstall "开发工具" -y # 安装软件组,一个软件组中包含了多个软件包
yum groups install "开发工具" -y # 同上
# 卸载
yum remove httpd httpd-tools http* # 卸载软件包
yum groupremove "开发工具" -y. # 卸载软件组
yum groups remove "开发工具" -y # 同上
# 重装
yum reinstall httpd # 不小心删除了配置文件的时,可以reinstall一下
# 更新
yum check-update # 检查可以更新的软件包
yum update -y # 更新所有软件包,包括内核,通常只在刚装完系统时执行
yum update httpd -y # 更新某个软件包
# 在 CentOS 7 中,yum update 和 yum upgrade
# 1、相同点:都会更新所有包(包括软件与内核)
# 2、不同点:
# yum update更新的时候会保留过时的包,这对依赖老包的应用很友好
# yum upgrade更新的时候会删除过时的包,如果你系统中所有的应用全都为rpm
# 包,那upgrade倒是不会对你有影响,因为都会一起跟着更新。但是如果你
# 安装的包里有自己编译安装的,而编译安装的包会依赖某个特定版本的rpm包
# 那upgrade升级之后,很有可能会造成你编译安装包的不可用
# 综上,如果是刚装系统,那就用upgrade,否则还是用update靠谱些
# 在rockylinux中,yum命令都链接到了dnf-3上
# 而在 DNF 中,在dnf-3中,dnf update 与 dnf upgrade 是没有区别的。
# 具体而言,两者都是用于更新系统上已经安装的软件包到最新可用版本
# 缓存
yum makecache # 制作元数据缓存,并不会下载包
yum clean all # 清理缓存,你如果在yum.conf配置的keepcache,之前缓存的包都会清空
vim /etc/yum.conf # 默认软件包下载安装后会自动删除
# 设置keepcache=1 即开启了软件包缓存
# 存目录为配置文件中指定的cachedir
# 历史记录
yum history # 查看执行过的yum命令历史记录
yum history info ID号 # 查看具体某一条yum命令的详细信息
yum history undo ID号 # 撤销执行过的历史命令
# 关于安装需要注意:
# 无论yum安装的软件来自何方,yum时刻以自己仓库中的repodata存储的依赖关系为准,如果有多个仓库,就依次检索
# 1、yum直接安装公网的rpm包, 会自动查找当前系统上已有的仓库解决依赖关系
yum install https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/samba-4.10.16-5.el7.x86_64.rpm
# 2、Yum直接安装本地的rpm包,会自动查找当前系统上已有的仓库解决依赖关系
yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
Bash3. 使用镜像文件作为yum源(本地源)
# 挂载镜像
mount -o loop /xxx.iso /opt
# 编辑repo文件
cd /etc/yum.repos.d/
vim local.repo # 文件名自定义,必须以.repo结尾
[local] # 仓库的实际名字,任意
name=local # 仓库的描述,任意
# 仓库位置,可以是 http:// https:// ftp:// file://
# 注意:baseurl指定的目标路径下必须有用一个repodata目录,
# 里面存放着包间的依赖性关系,是yum解决依赖性问题的关键。
baseurl=file:///opt
enabled=1 # 启用仓库,默认就是启用的
gpgcheck=0 # 检查安装的rpm是否是合法的,0表示不检验
Bash4. 使用开源yum源(网络源)
# 下载阿里云的Base源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 下载网易的Base源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
# 下载红帽的epel扩展源
# 可以直接下载
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 也可以安装一个软件包来生成
yum install epel-release -y
# EPEL的全称叫 Extra Packages for Enterprise Linux。
# EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。
# 装上了 EPEL之后,就相当于添加了一个第三方源。
# RHEL以及他的衍生发行版如CentOS、Scientific Linux为了稳定,官方的rpm repository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安全稳定是重点,官方的rpm repository提供的rpm包也不够丰富,很多时候需要自己编译那太辛苦了,而EPEL恰恰可以解决这两方面的问题。
Bash5. 自己制作本地yum源
# 先下载好rpm源和相关依赖包,将所有rpm包都放在一个文件夹内
# 安装工具createrepo
yum install createrepo -y
# 制作repodata
createrepo /路径/
# 配置本地repo文件,指向rpm包所在的文件夹
vim /etc/yum.repos.d/soft.repo
[soft]
name=soft
baseurl=file:///路径
enabled=1
gpgcheck=0
Bash基于软件包缓存,可以做成自己的yum源,以此来控制各个服务的版本,通常的做法为:
# 1、在测试环境中,在每个节点上都开启软件包缓存
# 2、在测试环境中,安装相同版本的操作系统,安装完毕后统一执行
yum update -y
# 3、在测试环境中,部署完你的架构,测试完毕
# 4、把测试环境中每台机器上缓存好的软件包安装包采集到一个文件下
find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {} mv {} /soft/
# 5、然后用createrepo命令制作好依赖关系,即repodata数据库
# 6、然后在线上环境部署时,就用该本地源就好,不要轻易升级,不要滥用yum源,这样可以严格控制好各个服务的版本
Bash将制作的本地yum源共享给别人步骤:
# ==================在服务端上执行如下操作==================
# 1、环境准备
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
# 2、安装ftp服务
yum install vsftpd -y
systemctl start vsftpd
systemctl status vsftpd # 查看状态,确保开启,默认共享路径/var/ftp下的目录
systemctl enable vsftpd
# 3、采集软件包放到一个目录下
# 可以基于3.3的方式,也可以偷个懒直接用镜像里现成的,毕竟是实验嘛,但无论何种方式,都一定要解决好依赖关系才能用来做yum源,本例就用现成的吧
mkdir /var/ftp/centos7
mount /dev/sr0 /var/ftp/centos7
# 或者拷贝
mount /dev/sr0 /opt
mkdir /var/ftp/centos7
find /opt/Packages/ -type f -name "*.rpm" |xargs -I {} cp -rp {} /var/ftp/centos7/
# ==================在客户端上执行如下操作==================
# 1、环境准备
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
ping -c 2 192.168.12.42 # ping一下服务端的ip地址,保证网络畅通
# 2、在客户端配置网络yum源
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak/
cat >> ftp.repo << EOF
> [ftp_repo]
> name = This is Ftp Share Repo
> baseurl = ftp://192.168.12.42/centos7
> enabled = 1
> gpgcheck = 0
> EOF
# 注意:客户端baseurl指向的文件夹无论是什么,在该文件夹的子目录一级必须有一个repodata数据库
Bash