背景
企业客户服务器一般都是在内网,并且会限制服务器访问外网,保证服务器的安全,但这样造成了很多不便,比如yum之类的包安装工具就无法使用,做得好的企业会搭建一个私有仓库,仓库可以代理到中央仓库,但根据经验,大部分企业都做不好私有仓库,很多程序用yum一行命令就可以安装好,如果离线安装,需要安装好所有的依赖,还不一定能安装好,那么如何在离线情况下也能借助yum安装程序呢,本文就来探讨这个问题。
实现
其实yum最方便的是可以帮我们解决依赖关系,并且自动安装好所有的依赖,假设yum可以把所有的依赖都下载下来,那么其实就解决了最麻烦的问题,我们拿到这些依赖一个个安装好就行。幸运的是,yum不仅提供下载依赖的功能,而且可以一次性安装好所有下载好的依赖。我们以安装 openssl为例。
下载
首先你需要找一台跟内网服务器操作系统版本一致的服务器用来下载依赖包,以Centos为例,查看操作系统版本号
# more /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
你可以在本地用虚拟机创建同版本的操作系统,也可以到阿里云创建一个同版本的抢占式实例,总之你得找一台能访问外网的同版本服务器,正常我们安装openssl需要执行以下命令
yum install openssl
将命令换成以下可以只下载不安装
# yumdownloader --assumeyes --destdir=/u01/software/openssl --resolve openssl
已加载插件:langpacks
--> 正在检查事务
---> 软件包 openssl.x86_64.1.1.0.2k-21.0.3.el7_9 将被 安装
--> 正在处理依赖关系 openssl-libs(x86-64) = 1:1.0.2k-21.0.3.el7_9,它被软件包 1:openssl-1.0.2k-21.0.3.el7_9.x86_64 需要
--> 正在检查事务
---> 软件包 openssl-libs.x86_64.1.1.0.2k-16.0.1.el7 将被 升级
--> 正在处理依赖关系 openssl-libs(x86-64) = 1:1.0.2k-16.0.1.el7,它被软件包 1:openssl-1.0.2k-16.0.1.el7.x86_64 需要
---> 软件包 openssl-libs.x86_64.1.1.0.2k-21.0.3.el7_9 将被 更新
--> 正在检查事务
---> 软件包 openssl.x86_64.1.1.0.2k-16.0.1.el7 将被 升级
--> 解决依赖关系完成
No Presto metadata available for ol7_latest
(1/2): openssl-1.0.2k-21.0.3.el7_9.x86_64.rpm | 493 kB 00:00:02
(2/2): openssl-libs-1.0.2k-21.0.3.el7_9.x86_64.rpm | 1.2 MB 00:00:03
# ll /u01/software/openssl
总用量 1732
-rw-r--r--. 1 root jomoo 505244 5月 14 05:01 openssl-1.0.2k-21.0.3.el7_9.x86_64.rpm
-rw-r--r--. 1 root jomoo 1254768 5月 14 05:01 openssl-libs-1.0.2k-21.0.3.el7_9.x86_64.rpm
如果没有yumdownloader可以执行 yum install yum-utils -y 进行安装
安装
将下载的rpm包打包上传到内网服务器,放到指定目录,比如/u01/software/openssl
,执行以下命令即可安装
yum install -y --cacheonly --disablerepo=* /u01/software/openssl/*.rpm
也可以创建本地仓库
vi /etc/yum.repos.d/local.repo
[local]
name=ansible
baseurl=file:///u01/software/openssl
gpgcheck=0
enabled=1
cd /u01/software/
createrepo openssl
结论
很久以前听一个老前辈讲过,在没有yum的时候,他们在服务器上装svn,一个人搞了一天,现在只要一行命令,yum确实极大方便了程序的安装,本文介绍的方法虽然简单,但能解决离线使用yum的问题,是非常有用的方法
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。