跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    离线环境装包:downloadonly + 本地仓库(Rocky 9 实测)

    内网机器不能出网,但缺几个包(或要升级)。做法不是把 rpm 一个个 scp 过去手动装,而是:在有网机器上把包和依赖下载下来,做成一个本地仓库,让 dnf 像访问远程源一样从目录安装——依赖解析、版本检查都还在。

    Terminal window
    dnf -y install createrepo_c
    mkdir -p /srv/offline
    dnf -y install --downloadonly --destdir=/srv/offline tree
    ls /srv/offline
    tree-1.8.0-10.el9.aarch64.rpm

    顺序很重要:先装 createrepo_c,再 --downloadonly。反过来做,下一步安装任何包都会让 dnf 清理刚下载到 destdir 的文件(实测:/srv/offline 里只剩 repodata,rpm 消失)。

    Terminal window
    createrepo_c /srv/offline
    ls /srv/offline/repodata | head -3
    1cb61ea9...-primary.xml.gz
    84823fd3...-other.sqlite.bz2
    95a4415d...-filelists.xml.gz

    repodata/ 就是 dnf 读取的元数据;没有它,把 rpm 放进目录也不会被当成仓库。

    Terminal window
    printf '[local-offline]\nname=Local offline repo\nbaseurl=file:///srv/offline\nenabled=1\ngpgcheck=0\n' \
    | sudo tee /etc/yum.repos.d/local.repo
    sudo dnf clean all
    sudo dnf -y --disablerepo="*" --enablerepo=local-offline install tree
    Installed:
    tree-1.8.0-10.el9.aarch64
    Complete!

    --disablerepo="*" 是关键:离网机器上其他源不可达,只留本地源才不会卡在超时。

    Terminal window
    rpm -q tree
    dnf --disablerepo="*" --enablerepo=local-offline list available

    第一条应输出 tree-1.8.0-10.el9.aarch64;第二条应只列本地仓库里的包。

    • 先下载、后装别的包:destdir 里的 rpm 会被清掉(本文实测),顺序必须是「先装工具,再下载」;
    • 只复制 rpm 不建 repodata:dnf 认不出这个目录,会报 No match for argument;
    • gpgcheck=0:离线仓库常用,但等于放弃签名校验;正式环境把 Rocky 的 GPG key 一起带过去,保持 gpgcheck=1 并配 gpgkey=file:///...。

    前置:有网机器 A、离网机器 B(同为 Rocky 9 aarch64/x86_64)。

    Terminal window
    # A
    dnf -y install --downloadonly --destdir=/srv/offline nginx
    createrepo_c /srv/offline
    tar -C /srv -czf offline.tgz offline
    # B
    sudo tar -C /srv -xzf offline.tgz
    # local.repo 指向 /srv/offline,然后:
    sudo dnf --disablerepo="*" --enablerepo=local-offline install nginx

    检查:

    1. rpm -q nginx → 有版本号输出
    2. dnf --disablerepo="*" --enablerepo=local-offline repoquery --requires nginx | head → 依赖都已满足
    3. systemctl is-active nginx → active(需要真实 systemd,容器里不可用)