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"
相关推荐
芊言芊语3 小时前
分布式缓存服务Redis版解析与配置方式
redis·分布式·缓存
攻城狮的梦4 小时前
redis集群模式连接
数据库·redis·缓存
无休居士8 小时前
【实践】应用访问Redis突然超时怎么处理?
数据库·redis·缓存
.Net Core 爱好者8 小时前
Redis实践之缓存:设置缓存过期策略
java·redis·缓存·c#·.net
M-bao8 小时前
缓存数据和数据库数据一致性问题
数据库·缓存
AntDreamer9 小时前
在实际开发中,如何根据项目需求调整 RecyclerView 的缓存策略?
android·java·缓存·面试·性能优化·kotlin
微刻时光12 小时前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
丁总学Java13 小时前
如何使用 maxwell 同步到 redis?
数据库·redis·缓存
小菜yh14 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
问道飞鱼14 小时前
分布式中间件-Pika一个高效的分布式缓存组件
分布式·缓存·中间件