乐于分享
好东西不私藏

Linux下使用DNF命令下载安装包到指定目录

Linux下使用DNF命令下载安装包到指定目录
需求:内网服务器没有yum源,要离线安装依赖包。
解决方法:部署一台相同版本可以联网的服务器,使用DNF命令下载依赖包,上传到内网服务器离线安装。
具体操作:
我们以RHEL 8/9系列操作系统为例
1、安装dnf-utils工具包
默认的 dnf 命令只能做基础的安装、卸载和更新。我们需要安装增强工具包 dnf-utils 才能制作离线安装包dnf install -y dnf-utils  #安装工具包
2、创建目录
#创建临时目录,作为虚拟系统根目录,用来计算依赖关系,不会影响真实的系统mkdir -p /tmp/fake #创建存储目录,下载好的所有 .rpm 文件都保持在这里mkdir -p /tmp/yum-rpm-full-x86
3、下载安装包到指定目录
dnf install --installroot=/tmp/fake --downloadonly --downloaddir=/tmp/yum-rpm-full-x86 \wget telnet nmap traceroute ntp  rsync lrzsz OpenIPMI ipmitool freeipmi screen ncurses-devel bind-utils libffi-devel libnfnetlink-devel libnl3-devel popt-devel tcpdump wireshark \libtool *unixODBC* tar make gcc gcc-c++ perl pcre2-devel zlib-devel glibc-devel  \dejavu-fonts fontawesome-fonts  fontconfig fonts-filesystem ttmkfdir fontconfig-devel  \-y
执行完成之后,所有的包都在/tmp/yum-rpm-full-x86目录,把这个目录打包yum-rpm-full-x86.tar.gz拷贝到需要安装的服务器上
4、离线安装依赖包
#解压tar -zxvf  yum-rpm-full-x86.tar.gzcd yum-rpm-full-x86#只安装本地没有的包(跳过冲突),临时禁用所有已配置的远程仓库,只从本地目录安装yum localinstall ./*.rpm -y --nogpgcheck --disablerepo="*" --skip-broken
原理:
命令详解(为什么这样能解决依赖问题?)
--installroot=/tmp/fake:
这是关键!它告诉 dnf:“假装 /tmp/fake 是一台刚装好的、空空如也的新电脑”。
dnf 不会参考您当前机器上已经安装的包。
因此,它会认为连最基础的 glibc、bash、zlib 都没有,从而把所有层级的依赖包(从底层库到上层应用)全部列出来。
--downloadonly --downloaddir=/tmp/yum-rpm-full-x86:
只下载 RPM 文件到指定目录,不真的去修改那个假目录。
至此,Linux下使用DNF命令下载安装包到指定目录完成。