活动公告

系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

AlmaLinux软件仓库更新方法完全指南 从基础DNF命令使用到配置第三方源和镜像源全方位提升系统软件管理效率和安全更新

SunJu_FaceMall

3万

主题

2720

科技点

3万

积分

执行版主

碾压王

积分
32881

塔罗立华奏

执行版主 发表于 2025-8-31 15:50:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 引言

AlmaLinux是一个社区支持的、免费的、企业级的Linux发行版,它是CentOS停止维护后的理想替代品,与RHEL(Red Hat Enterprise Linux)二进制兼容。作为一个企业级操作系统,保持系统软件的及时更新对于安全性、稳定性和功能完善性至关重要。

软件仓库(Repository)是存储软件包及其元数据的服务器,通过DNF(Dandified YUM)包管理器,用户可以方便地从这些仓库安装、更新和管理软件。本文将全面介绍AlmaLinux软件仓库的更新方法,从基础的DNF命令使用到高级的仓库配置技巧,帮助您全方位提升系统软件管理效率和安全更新能力。

2. DNF基础命令使用

DNF简介

DNF(Dandified YUM)是新一代的RPM包管理器,取代了传统的YUM(Yellowdog Updater Modified)。作为AlmaLinux的默认包管理器,DNF提供了更快的性能、更好的依赖解析能力和更友好的用户体验。DNF使用libsolv库进行依赖解析,提高了效率和准确性。

基本软件包管理命令

使用dnf install命令可以安装软件包。例如,安装常用的文本编辑器vim:
  1. sudo dnf install vim
复制代码

如果要安装多个软件包,可以一次性列出:
  1. sudo dnf install vim git curl wget
复制代码

DNF会自动解析并安装所需的依赖包。

更新系统中所有已安装的软件包:
  1. sudo dnf update
复制代码

或者使用upgrade命令,效果相同:
  1. sudo dnf upgrade
复制代码

如果只想更新特定的软件包,可以指定包名:
  1. sudo dnf update vim
复制代码

使用dnf remove命令可以删除软件包:
  1. sudo dnf remove vim
复制代码

如果希望同时删除不再需要的依赖包,可以使用autoremove:
  1. sudo dnf autoremove
复制代码

查询和搜索功能

使用search命令可以搜索软件包:
  1. dnf search web-server
复制代码

这将搜索与”web-server”相关的软件包。

使用info命令可以查看软件包的详细信息:
  1. dnf info vim
复制代码

列出所有可用的软件包:
  1. dnf list available
复制代码

列出所有已安装的软件包:
  1. dnf list installed
复制代码

列出所有可更新的软件包:
  1. dnf list updates
复制代码

使用provides命令可以查看某个文件或功能是由哪个软件包提供的:
  1. dnf provides /etc/passwd
复制代码

缓存管理

DNF会在本地缓存仓库的元数据和软件包。管理这些缓存对于节省磁盘空间和解决某些问题很有帮助。

清除所有缓存:
  1. sudo dnf clean all
复制代码

仅清除元数据缓存:
  1. sudo dnf clean metadata
复制代码

仅清除软件包缓存:
  1. sudo dnf clean packages
复制代码

强制DNF生成新的缓存:
  1. sudo dnf makecache
复制代码

3. 理解AlmaLinux软件仓库

官方仓库结构

AlmaLinux的官方软件仓库分为几个主要部分,每个部分都有其特定的用途:

1. baseos: 提供核心功能,是操作系统的基础组件。
2. appstream: 提供额外的应用程序和运行时环境。
3. extras: 提供额外的软件包,这些软件包不包含在baseos或appstream中。
4. epel: Extra Packages for Enterprise Linux,提供大量额外的软件包。
5. powertools: 提供开发工具和库。
6. plus: 提供一些额外的软件包,如MariaDB、PostgreSQL等。

这些仓库在AlmaLinux安装时默认配置好,位于/etc/yum.repos.d/目录下。

使用以下命令可以查看系统中已配置的所有仓库:
  1. dnf repolist
复制代码

要查看所有仓库(包括禁用的仓库):
  1. dnf repolist all
复制代码

仓库配置文件详解

AlmaLinux的仓库配置文件位于/etc/yum.repos.d/目录下,以.repo为扩展名。每个仓库配置文件包含一个或多个仓库的配置。

以下是一个典型的仓库配置文件示例(/etc/yum.repos.d/almalinux.repo):
  1. [baseos]
  2. name=AlmaLinux $releasever - BaseOS
  3. mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/baseos
  4. # baseurl=https://repo.almalinux.org/almalinux/$releasever/BaseOS/$basearch/os/
  5. enabled=1
  6. gpgcheck=1
  7. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-$releasever
  8. priority=1
  9. [appstream]
  10. name=AlmaLinux $releasever - AppStream
  11. mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/appstream
  12. # baseurl=https://repo.almalinux.org/almalinux/$releasever/AppStream/$basearch/os/
  13. enabled=1
  14. gpgcheck=1
  15. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-$releasever
  16. priority=1
  17. [extras]
  18. name=AlmaLinux $releasever - Extras
  19. mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/extras
  20. # baseurl=https://repo.almalinux.org/almalinux/$releasever/extras/$basearch/os/
  21. enabled=1
  22. gpgcheck=1
  23. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-$releasever
  24. priority=1
复制代码

配置文件中的主要参数说明:

• [section]: 仓库的ID,必须是唯一的。
• name: 仓库的描述性名称。
• mirrorlist: 包含镜像服务器列表的URL。
• baseurl: 仓库的基础URL,如果未指定mirrorlist,则使用此URL。
• enabled: 是否启用此仓库,1为启用,0为禁用。
• gpgcheck: 是否检查GPG签名,1为检查,0为不检查。
• gpgkey: GPG密钥的位置。
• priority: 仓库的优先级,数字越小优先级越高(1为最高优先级)。

4. 配置和管理软件源

启用/禁用仓库

有时需要临时或永久地启用或禁用某些仓库。

在执行DNF命令时,可以使用--enablerepo或--disablerepo选项临时启用或禁用仓库:
  1. # 临时启用extras仓库
  2. sudo dnf update --enablerepo=extras
  3. # 临时禁用appstream仓库
  4. sudo dnf update --disablerepo=appstream
复制代码

要永久启用或禁用仓库,需要编辑仓库配置文件,修改enabled参数:
  1. sudo nano /etc/yum.repos.d/almalinux.repo
复制代码

找到要修改的仓库,将enabled=1改为enabled=0以禁用仓库,或反之以启用仓库。

添加第三方仓库

除了官方仓库外,还可以添加第三方仓库以获取更多软件包。

EPEL(Extra Packages for Enterprise Linux)是一个由Fedora特别兴趣组维护的高质量软件包集合,适用于企业级Linux发行版,包括AlmaLinux。

安装EPEL仓库:
  1. sudo dnf install epel-release
复制代码

安装后,EPEL仓库会自动添加到系统中,可以使用dnf repolist查看。

REMI仓库提供了最新版本的PHP、MySQL和其他相关软件。

添加REMI仓库:
  1. sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
复制代码

添加后,需要导入GPG密钥:
  1. sudo rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi
复制代码

可以手动创建仓库配置文件来添加第三方仓库。例如,添加Docker CE仓库:
  1. sudo nano /etc/yum.repos.d/docker-ce.repo
复制代码

添加以下内容:
  1. [docker-ce-stable]
  2. name=Docker CE Stable - $basearch
  3. baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
  4. enabled=1
  5. gpgcheck=1
  6. gpgkey=https://download.docker.com/linux/centos/gpg
复制代码

保存文件后,使用以下命令更新缓存:
  1. sudo dnf makecache
复制代码

创建本地仓库

在某些情况下,可能需要创建本地仓库,例如在没有互联网连接的环境中,或者为了节省带宽。

首先,安装createrepo工具:
  1. sudo dnf install createrepo
复制代码

创建一个目录来存储软件包:
  1. sudo mkdir -p /var/local-repo
复制代码

将RPM包复制到该目录,然后运行createrepo:
  1. sudo createrepo /var/local-repo
复制代码

创建仓库配置文件:
  1. sudo nano /etc/yum.repos.d/local.repo
复制代码

添加以下内容:
  1. [local-repo]
  2. name=Local Repository
  3. baseurl=file:///var/local-repo
  4. enabled=1
  5. gpgcheck=0
复制代码

保存文件后,更新缓存:
  1. sudo dnf makecache
复制代码

如果有AlmaLinux的ISO镜像,可以将其用作本地仓库:
  1. # 创建挂载点
  2. sudo mkdir /mnt/iso
  3. # 挂载ISO镜像
  4. sudo mount -o loop /path/to/almalinux.iso /mnt/iso
  5. # 创建仓库配置文件
  6. sudo nano /etc/yum.repos.d/iso.repo
复制代码

添加以下内容:
  1. [iso-baseos]
  2. name=AlmaLinux ISO - BaseOS
  3. baseurl=file:///mnt/iso/BaseOS
  4. enabled=1
  5. gpgcheck=0
  6. [iso-appstream]
  7. name=AlmaLinux ISO - AppStream
  8. baseurl=file:///mnt/iso/AppStream
  9. enabled=1
  10. gpgcheck=0
复制代码

保存文件后,更新缓存:
  1. sudo dnf makecache
复制代码

5. 配置镜像源

选择合适的镜像源

使用合适的镜像源可以显著提高软件包下载速度。AlmaLinux提供了全球多个镜像源,用户可以根据自己的地理位置选择最近的镜像。

使用以下命令可以查看当前使用的镜像源:
  1. dnf repolist -v
复制代码

在输出中,可以找到每个仓库的Repo-baseurl,这显示了实际使用的镜像源URL。

编辑仓库配置文件,注释掉mirrorlist行,取消注释baseurl行,并将其修改为所需的镜像源URL:
  1. sudo nano /etc/yum.repos.d/almalinux.repo
复制代码

例如,将baseos仓库的镜像源修改为清华大学的镜像:
  1. [baseos]
  2. name=AlmaLinux $releasever - BaseOS
  3. # mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/baseos
  4. baseurl=https://mirrors.tuna.tsinghua.edu.cn/almalinux/$releasever/BaseOS/$basearch/os/
  5. enabled=1
  6. gpgcheck=1
  7. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-$releasever
  8. priority=1
复制代码

配置镜像源加速

安装dnf-plugins-core包以获取额外的DNF插件:
  1. sudo dnf install dnf-plugins-core
复制代码

使用fastestmirror插件自动选择最佳镜像:
  1. sudo dnf update --disablerepo="*" --enablerepo="fastestmirror"
复制代码

编辑/etc/dnf/dnf.conf文件,添加以下内容:
  1. [main]
  2. fastestmirror=true
复制代码

这样,DNF会自动选择最快的镜像源。

自动选择最佳镜像

安装yum-utils包:
  1. sudo dnf install yum-utils
复制代码

使用yum-fastestmirror插件:
  1. sudo yum-config-manager --enable fastestmirror
复制代码

创建一个简单的脚本来自动选择最佳镜像:
  1. #!/bin/bash
  2. # 获取所有可用的镜像
  3. mirrors=$(curl -s https://mirrors.almalinux.org/mirrorlist/8/baseos | grep -E "^http" | sed 's/^#//')
  4. # 测试每个镜像的速度
  5. fastest_mirror=""
  6. min_time=999999
  7. for mirror in $mirrors; do
  8.     # 测试连接时间
  9.     time=$(curl -o /dev/null -s -w '%{time_total}' --connect-timeout 5 "$mirror/repodata/repomd.xml")
  10.    
  11.     # 转换为毫秒
  12.     time_ms=$(echo "$time * 1000" | bc | cut -d'.' -f1)
  13.    
  14.     if [ "$time_ms" -lt "$min_time" ]; then
  15.         min_time=$time_ms
  16.         fastest_mirror=$mirror
  17.     fi
  18. done
  19. echo "Fastest mirror: $fastest_mirror"
复制代码

将此脚本保存为find_fastest_mirror.sh,并赋予执行权限:
  1. chmod +x find_fastest_mirror.sh
复制代码

运行脚本:
  1. ./find_fastest_mirror.sh
复制代码

6. 提升软件管理效率的高级技巧

DNF插件使用

DNF提供了许多有用的插件,可以扩展其功能。
  1. sudo dnf install dnf-plugins-core
复制代码

安装versionlock插件:
  1. sudo dnf install python3-dnf-plugin-versionlock
复制代码

锁定特定软件包的版本:
  1. sudo dnf versionlock add vim
复制代码

查看已锁定的软件包:
  1. sudo dnf versionlock list
复制代码

解锁软件包:
  1. sudo dnf versionlock delete vim
复制代码

DNF默认会记录所有操作的历史。查看历史记录:
  1. dnf history list
复制代码

查看特定操作的详细信息:
  1. dnf history info <ID>
复制代码

撤销特定操作:
  1. dnf history undo <ID>
复制代码

重做特定操作:
  1. dnf history redo <ID>
复制代码

批量操作

创建一个包含要安装的软件包列表的文件,例如packages.txt:
  1. vim
  2. git
  3. curl
  4. wget
  5. htop
复制代码

然后使用以下命令批量安装:
  1. sudo dnf install $(cat packages.txt)
复制代码

使用yum-utils包中的yum-update-once工具:
  1. sudo dnf install yum-utils
  2. sudo yum-update-once security
复制代码

这将只更新与安全相关的软件包。

历史记录和回滚
  1. dnf history list all
复制代码
  1. dnf history rollback <ID>
复制代码

这将撤销指定ID之后的所有操作。

使用dnf-plugin-txnmgr插件创建事务快照:
  1. sudo dnf install python3-dnf-plugin-txnmgr
复制代码

创建快照:
  1. sudo dnf txn-manager create
复制代码

列出快照:
  1. sudo dnf txn-manager list
复制代码

恢复到特定快照:
  1. sudo dnf txn-manager restore <ID>
复制代码

7. 系统安全更新策略

安全补丁管理
  1. sudo dnf update --security
复制代码
  1. sudo dnf updateinfo list security
复制代码

查看特定安全公告的详细信息:
  1. sudo dnf updateinfo info <ID>
复制代码

自动更新配置
  1. sudo dnf install dnf-automatic
复制代码

编辑/etc/dnf/automatic.conf文件:
  1. sudo nano /etc/dnf/automatic.conf
复制代码

修改以下参数:
  1. [commands]
  2. # 下载并应用更新
  3. upgrade_type = default
  4. # 发送电子邮件通知
  5. emit_via = email
  6. # 电子邮件地址
  7. email_from = root@localhost
  8. email_to = admin@example.com
  9. # 发送电子邮件的SMTP服务器
  10. email_host = localhost
  11. [emitters]
  12. # 启用系统日志
  13. system_name = AlmaLinux
  14. # 启用电子邮件通知
  15. emit_via = email
  16. [command]
  17. # 定义何时应用更新
  18. apply_updates = yes
  19. [base]
  20. # 定义检查更新的频率
  21. random_sleep = 300
  22. # 每天检查一次
  23. run_timer = yes
复制代码
  1. sudo systemctl enable --now dnf-automatic.timer
复制代码

查看定时器状态:
  1. systemctl list-timers *dnf-automatic*
复制代码

内核更新管理
  1. rpm -qa kernel
复制代码
  1. uname -r
复制代码

默认情况下,DNF会保留至少两个旧内核版本。可以通过修改/etc/dnf/dnf.conf文件来更改此行为:
  1. [main]
  2. installonly_limit=3
复制代码

这将保留最新的三个内核版本。
  1. sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)
复制代码

8. 常见问题与故障排除

DNF命令执行缓慢
  1. sudo dnf clean all
  2. sudo dnf makecache
复制代码

编辑仓库配置文件,将不需要的仓库设置为enabled=0:
  1. sudo nano /etc/yum.repos.d/almalinux.repo
复制代码

如前所述,配置fastestmirror插件:
  1. [main]
  2. fastestmirror=true
复制代码

依赖关系问题
  1. sudo dnf update --skip-broken
复制代码
  1. sudo dnf clean all
  2. sudo dnf makecache
复制代码
  1. sudo dnf distro-sync
复制代码

GPG密钥问题
  1. sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-8
复制代码
  1. sudo dnf update --nogpgcheck
复制代码

注意:这只是一个临时解决方案,长期禁用GPG检查会带来安全风险。

仓库配置问题
  1. sudo dnf repolist -v
复制代码
  1. curl -I https://repo.almalinux.org/almalinux/8/BaseOS/x86_64/os/repodata/repomd.xml
复制代码
  1. ping repo.almalinux.org
  2. nslookup repo.almalinux.org
复制代码

9. 总结与最佳实践

最佳实践总结

1. 定期更新系统:保持系统和软件包的最新状态,以获得安全补丁和新功能。sudo dnf update
2. 使用安全更新:在生产环境中,考虑仅应用安全更新,以减少意外中断的风险。sudo dnf update --security
3. 配置自动更新:对于关键系统,配置自动安全更新,但确保有适当的监控和回滚计划。sudo systemctl enable --now dnf-automatic.timer
4. 使用版本锁定:对于需要保持特定版本的软件包,使用versionlock插件。sudo dnf versionlock add critical-package
5. 定期清理缓存:定期清理DNF缓存以释放磁盘空间。sudo dnf clean all
6.
  1. 使用最快的镜像:配置fastestmirror插件以提高下载速度。[main]
  2. fastestmirror=true
复制代码
7. 备份重要配置:在进行重大更新前,备份重要配置文件。sudo cp /etc/dnf/dnf.conf /etc/dnf/dnf.conf.bak
8. 监控更新日志:定期检查更新日志,了解已应用的更新。sudo cat /var/log/dnf.log
9. 测试更新:在生产环境应用更新前,先在测试环境中验证。
10. 保持内核更新:定期更新内核以获取安全补丁和性能改进,但保留旧内核以防回滚需要。

定期更新系统:保持系统和软件包的最新状态,以获得安全补丁和新功能。
  1. sudo dnf update
复制代码

使用安全更新:在生产环境中,考虑仅应用安全更新,以减少意外中断的风险。
  1. sudo dnf update --security
复制代码

配置自动更新:对于关键系统,配置自动安全更新,但确保有适当的监控和回滚计划。
  1. sudo systemctl enable --now dnf-automatic.timer
复制代码

使用版本锁定:对于需要保持特定版本的软件包,使用versionlock插件。
  1. sudo dnf versionlock add critical-package
复制代码

定期清理缓存:定期清理DNF缓存以释放磁盘空间。
  1. sudo dnf clean all
复制代码

使用最快的镜像:配置fastestmirror插件以提高下载速度。
  1. [main]
  2. fastestmirror=true
复制代码

备份重要配置:在进行重大更新前,备份重要配置文件。
  1. sudo cp /etc/dnf/dnf.conf /etc/dnf/dnf.conf.bak
复制代码

监控更新日志:定期检查更新日志,了解已应用的更新。
  1. sudo cat /var/log/dnf.log
复制代码

测试更新:在生产环境应用更新前,先在测试环境中验证。

保持内核更新:定期更新内核以获取安全补丁和性能改进,但保留旧内核以防回滚需要。

高级技巧

1. 使用DNF历史记录进行回滚:如果更新导致问题,可以使用DNF历史记录回滚到之前的状态。sudo dnf history undo <ID>
2. 创建本地仓库:在没有互联网连接的环境中,创建本地仓库以便于软件包管理。sudo createrepo /var/local-repo
3. 使用事务快照:在进行重大更新前创建事务快照,以便在需要时快速恢复。sudo dnf txn-manager create
4. 批量管理软件包:使用脚本或工具批量管理软件包,提高效率。sudo dnf install $(cat packages.txt)
5.
  1. 配置仓库优先级:当有多个仓库提供同一软件包时,配置仓库优先级以确保从首选仓库安装。[preferred-repo]
  2. priority=1
复制代码

使用DNF历史记录进行回滚:如果更新导致问题,可以使用DNF历史记录回滚到之前的状态。
  1. sudo dnf history undo <ID>
复制代码

创建本地仓库:在没有互联网连接的环境中,创建本地仓库以便于软件包管理。
  1. sudo createrepo /var/local-repo
复制代码

使用事务快照:在进行重大更新前创建事务快照,以便在需要时快速恢复。
  1. sudo dnf txn-manager create
复制代码

批量管理软件包:使用脚本或工具批量管理软件包,提高效率。
  1. sudo dnf install $(cat packages.txt)
复制代码

配置仓库优先级:当有多个仓库提供同一软件包时,配置仓库优先级以确保从首选仓库安装。
  1. [preferred-repo]
  2. priority=1
复制代码

通过遵循这些最佳实践和技巧,您可以有效地管理AlmaLinux系统的软件仓库,确保系统的安全性、稳定性和高效性。无论是基础的DNF命令使用,还是高级的仓库配置,这些方法都将帮助您更好地控制系统的软件更新过程。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则