背景
有些时候在一些内网环境部署机器的时候,要用一个跳板机,再通过跳板机ssh
到目标机器,最后发现目标机器是不能访问外网的,目标机器居然还不能反向ping
跳板机或者ssh
到跳板机,通过iptables -nvL
和ip 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
最后把整个文件夹用scp
上传到跳板机,目标机器
目标机器操作
cd
到包含有rpm
包的文件夹位置执行如下命令,禁用软件源避免yum
请求网络的时候报错
$ yum localinstall *.rpm --disablerepo=*
如果遇上依赖错误,比如类似下面的输出
错误:软件包: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