Yum缓存包

简单介绍

使用系统版本:

bash 复制代码
[root@localhost ~]# uname -a
Linux localhost 5.14.0-427.13.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed May 1 19:11:28 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.4 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.4"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.4 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.4"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.4"

在rocky中,包缓存目录和元数据目录都在 **/var/cache/dnf/**这个目录中。

元数据

  • 元数据文件(如 .solvx.solv 文件)包含有关软件包的信息,例如包名、版本、描述、依赖关系等。这些文件用于 dnf 在安装或更新软件包时解析和处理仓库中的信息。

软件包

  • 软件包的缓存通常存储在以仓库 ID 命名的目录下,这些目录中的文件是实际下载的软件包文件。这些缓存可以在安装或更新时重复使用,以避免重新从网络下载。

进入到某个软件包目录中,会看到这样两个目录

  • packages 目录是用于存储实际的 .rpm 软件包文件。如果该目录为空,可能是因为没有缓存的包。
  • repodata 目录包含仓库的元数据文件,帮助 dnf 处理和解析仓库中的软件包信息。

开启缓存参数

检查和配置 /etc/yum.conf 文件

打开 /etc/yum.conf 文件,检查并配置以下参数:

keepcache
  • 功能keepcache 控制是否保留缓存文件。

  • 配置文件 :设置在 /etc/yum.conf/etc/dnf/dnf.conf 中。

  • 取值

    • keepcache=1:保留缓存,即使软件包安装或更新后缓存不会被删除。这样可以在以后重新安装或更新时使用缓存文件,减少网络流量和下载时间。
    • keepcache=0:不保留缓存,安装或更新完成后缓存文件会被删除。
bash 复制代码
[main]
keepcache=1

注意:这个文件有系统默认的参数,加缓存配置时,直接在最后加入即可,其他参数不用修改删除。

自定义缓存包

假如遇到这样的工作场景,需要下载的包多,依赖包关系复杂,如何将下载的这些包和依赖都指定到我定义的一个目录中,方便迁移在网络不好的环境使用?

使 用yum download --destdir <保存目录> --resolve <包名>

--resolve 选项使 dnf 解析并下载所有依赖项。

示例代码:

bash 复制代码
yum download --destdir /data --resolve httpd

但是对于一些复杂的关键包,依赖复杂的并不一定完全都缓存下来,可能仍需手动缓存个别包

bash 复制代码
#!/bin/bash

# 提示用户输入保存的目录
read -p "请输入保存的目录(例如 /data): " DEST_DIR

# 创建保存目录(如果不存在)
mkdir -p "$DEST_DIR"

# 提示用户输入要下载的包
read -p "请输入要下载的包(用空格分隔): " -a PACKAGES

# 遍历用户输入的包
for pkg in "${PACKAGES[@]}"; do
    echo "获取 $pkg 的依赖包..."
    
    # 使用 repoquery 获取依赖
    DEPS=$(repoquery --requires --resolve --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}' "$pkg")

    # 包含自身的包名
    DEPS="$pkg $DEPS"
    
    # 遍历依赖包并下载
    for dep in $DEPS; do
        echo "下载包及其依赖: $dep"
        yumdownloader --destdir="$DEST_DIR" --resolve "$dep"
    done
done

echo "所有包及其依赖已下载到目录 $DEST_DIR"
相关推荐
草履虫建模5 小时前
Redis:高性能内存数据库与缓存利器
java·数据库·spring boot·redis·分布式·mysql·缓存
程序猿ZhangSir7 小时前
Redis 缓存进阶篇,缓存真实数据和缓存文件指针最佳实现?如何选择?
数据库·redis·缓存
段帅龙呀16 小时前
Redis构建缓存服务器
服务器·redis·缓存
夜斗小神社1 天前
【黑马点评】(二)缓存
缓存
Hello.Reader2 天前
Redis 延迟监控深度指南
数据库·redis·缓存
Hello.Reader2 天前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
在肯德基吃麻辣烫2 天前
《Redis》缓存与分布式锁
redis·分布式·缓存
先睡3 天前
Redis的缓存击穿和缓存雪崩
redis·spring·缓存
CodeWithMe3 天前
【Note】《深入理解Linux内核》 Chapter 15 :深入理解 Linux 页缓存
linux·spring·缓存
大春儿的试验田3 天前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存