2

背景

有些时候在一些内网环境部署机器的时候,要用一个跳板机,再通过跳板机ssh到目标机器,最后发现目标机器是不能访问外网的,目标机器居然还不能反向ping跳板机或者ssh到跳板机,通过iptables -nvLip route以及arp -n综合分析之后,决定老实点通过scp上传rpm方式解决

前提

首先需要参看目标机器的系统信息,发现目标机器是centos 7版本

$ cat /etc/os-release

准备一个全新的对应目标机器系统版本的机器,这一点非常重要

我试过从跳板机以及从centos docker镜像容器获取对应软件的安装包,最后复制到目标机器的时候执行,发现经常缺失各种依赖

最靠谱的还是去找个centos7-minimal版本的镜像,装在虚拟机上面,进行如下操作

本地机器具体操作

获取一个系统镜像,下载地址,选择minimal版本,这样确保获取软件rpm包的时候获取更多的依赖数据

页面地址如下

http://mirrors.ustc.edu.cn/centos/7.9.2009/isos/x86_64/

下载地址

http://iso.mirrors.ustc.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso

系统安装完成之后执行如下命令,更换默认软件源

$ sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-Base.repo

清除旧缓存,创建新缓存

$ yum clean all
$ yum makecache

安装依赖包

$ yum install yum-utils -y

只获取包而不安装软件,--downloadonly表示只下载,--downloaddir指定软件包的位置,最后是软件名称,

$ yum install --downloadonly --downloaddir=/tmp/soft <package-name>

最后把整个文件夹用scp上传到跳板机,目标机器

目标机器操作

cd到包含有rpm包的文件夹位置执行如下命令,禁用软件源避免yum请求网络的时候报错

$ yum localinstall *.rpm --disablerepo=*

如果遇到依赖版本不匹配冲突错误,比如已经安装有某个版本的软件,修改安装命令如下

$ rpm -ivh --force --nodeps *.rpm

如果遇上依赖缺失错误,比如类似下面的输出

错误:软件包:python-dmidecode-3.12.2-4.el7.x86_64 (/python-dmidecode-3.12.2-4.el7.x86_64)
          需要:libxml2mod.so()(64bit)
错误:软件包:1:containers-common-0.1.40-11.el7_8.x86_64 (/containers-common-0.1.40-11.el7_8.x86_64)
          需要:fuse-overlayfs

则需要重新回到本地centos新机器那边执行,具体软件包名称一般复制粘贴下来就行,有些特殊的找不到的自行搜索,如此循环反复,最终才能安装好

$ yum install --downloadonly --downloaddir=/tmp/soft libxml2mod.so fuse-overlayfs

参考阅读

中科大镜像源


龚正阳
16 声望5 粉丝

粗犷型程序员


引用和评论

0 条评论