闲言碎语 · 2024年2月29日 0

利用Yumdownloader为内网机器下载包和所需依赖(docker)

使用docker生成与目标操作系统环境一致的环境

首先,确保你已经安装了 Docker。如果没有,请先安装 Docker。假如想在内网的centos7.9.2009的系统上通过储存库安装node,首先在centos Tags | Docker Hub找到所需的镜像,例如下图:

docker pull centos:7.9.2009
Bash

使用命令拉取 CentOS 7.9.2009 镜像:

docker run -it --name my_centos -v ~/home/down:/data centos:7.9.2009
Bash

然后,运行容器并将主机的 home/down 目录映射到容器中的某个目录。例如,你可以将主机的 home/down 目录映射到容器的 /data 目录,这将在后台运行一个名为 my_centos 的容器,并将主机的 home/down 目录映射到容器的/data 目录。你可以在容器中访问和修改 home/down 目录中的文件。

在容器中下载包以及其依赖

docker exec -it my_centos /bin/bash
sudo yum install yum-utils -y
Bash

执行上述命令进入容器并安装 yum-utils 工具:

# yumdownloader 语法
yumdownloader [options] package1 [package2] [package..]
Bash
参数说明
-q静默执行
-v显示执行细节
-y所有的选择都答yes
–downloadonly不更新,只下载
–destdir保存路径,默认为当前路径
–resolve解析依赖关系并下载所需的包
yumdownloader 语法格式
sudo yumdownloader --resolve --destdir=/data node
Bash

使用以上命令从外网机器的容器内下载 node 软件包及其依赖项:

复制下载的rpm文件到内网机器

执行完1 2步骤后在外网的宿主机/home/down目录能看到下载的内容,复制内网机器中安装即可,命令如下:

rpm -Uvh --force --nodeps *.rpm
Bash

你实际上在执行以下操作:

-Uvh:这部分指定了 RPM 包的安装选项:

-U 表示升级(或安装)软件包。

-v 表示显示详细的安装进度。

-h 表示以哈希符号(#)显示进度。

–force:这个选项强制安装软件包,即使已经安装了相同版本的软件包。这可能会覆盖现有的文件或配置。

–nodeps:这个选项告诉 RPM 忽略依赖关系检查。通常,RPM 包的安装会检查是否满足了所有依赖关系,如果没有,安装将失败。使用 –nodeps 可以跳过这一步,但要小心,因为这可能导致软件包之间的依赖关系问题。

*.rpm:这部分表示通配符,用于匹配当前目录中的所有 RPM 文件。这意味着你正在安装当前目录中的所有 RPM 软件包。

请注意,使用 –force 和 –nodeps 选项需要谨慎,因为它们可能导致不稳定的系统状态。只有在你确信知道自己在做什么的情况下才应该使用这些选项。

来自GPT-4的解释