实用技巧:教你如何在没有网络的Linux机器上快速安装软件

相信很多人遇到过这样的问题:

  • 你需要在公司的一台服务器上安装xxx软件,例如vsftpd;
  • 该服务器无法连接公网;
  • 这台服务器很可能是一个最简安装的Linux(意味着该机器可能有很多常见的软件依赖缺失),你也搞不清楚究竟是不是最简安装的,只能用 uname -a 或者 /etc/redhat-release 看到发行版本;

于是,你应该怎么安装想要的软件?

下面以带有浓重的感情色彩,总结三种方案。

TIPS:本文以CentOS 7为例,探讨几种安装方式。其他发行版,可参见拓展阅读给出的方案。

最土但最极客的方法

一些人可能会下载源码,然后上传到服务器上编译安装。编译有问题会报错,一般要么是缺包(比较多),要么是冲突(相对较少)。那就分析日志,缺包就找包,冲突就换包;找到包后再上传到服务器上搞,周而复始,直到完成。

个人对这种做法非常不喜欢——

  • 效率太差;
  • 操作复杂繁琐,中间可能会中断若干次。环节越多,出现失误的可能性越大;
  • 对于服务器,没有十足的把握谁敢这么操作……
  • 对于不同版本的CentOS / RedHat,很多依赖的包名都变了……有的包还挺难找的……

我14年前后,在一台无网络的机器上编译安装过MySQL(公司的测试环境,可以随便玩),花了小半天……感受是:这种方式只有脾气好、并且富有极客精神、不怕苦不怕累,还无敌有信心不弄坏公司服务器,并且还得还闲的蛋疼的大神才能hold住,对于我等凡人,恐怕是不大适用的。

PS. 可能有人说高手不都应该编译安装吗?我个人觉得这种顶多也就算个伪高手——真正的高手看重的是解决方法是否有效,才不care你是一行命令自动安装,还是用18页命令编译安装……

不那么土也不那么极客的方法

这种方案应该是一半以上童鞋都会选择的——RPM包安装方式。先找到相关的RPM包,然后用 rpm -ivh rpm包名 安装。

RPM可在 http://rpmfind.net/ 上找到,我是说大部分。

一般来讲,该方案问可以很好的解决问题,但极端场景下也会跪。原因依然是缺包……

RPM并不一定包含软件所有的依赖,有时候可能一个软件依赖了若干个RPM,你得通通找到,然后一起安装……

个人最喜欢也最简单的方法

借助 yum-plugin-downloadonly 。这是个人最喜欢的方法,简单粗暴高效。

下面附带完整的安装步骤:

  • 准备1台和服务器 最简安装同版本Linux的机器,记为机器B, 机器B需要能联网

    TIPS:可以是实体机、虚拟机或者Docker容器,看你的喜好。

    个人建议用Docker准备,一分钟就可以准备好了。Docker相关课程可在我的公众号,或者博客搜索一下,有全套系列。

  • 远程上机器B。

  • 在机器B上执行如下命令:

           
            
            
            
            
    1
    2
    3
    4
           
            
            
            
            
    # 安装yum-plugin-downloadonly插件
    yum install -y yum-plugin-downloadonly
    # 把vsftpd换成你想要的包名
    yum install --downloadonly
  • 下载的软件在:

           
            
            
            
            
    1
           
            
            
            
            
    /var/cache/yum/x86_64/7/base/packages/

    该目录里会存放你想安装的软件所需要的所有RPM包。

  • 将所有RPM包拷贝到服务器上安装既可。如果安装过程中提示xxx已安装是否需要覆盖,全部选否。

是不是非常简单?应该也有很多童鞋知道这种方法的,本身也不是什么秘密。但就我的感知,很可能更多的人不知道,好几个人问我了,所以分享一下。

其他方法

Yumdownloader ,用法和 yum-plugin-downloadonly 大同小异。用本行高亮的部分作为关键词自行搜索吧。

拓展阅读

  • 怎样在 CentOS 里下载 RPM 包及其所有依赖包: https://blog.csdn.net/linuxnews/article/details/53244315

  • Ubuntu其实也有类似的命令 apt-get install -d --reinstall 包名 ,这样既可只下载包,而不安装包了,然后拷贝到无网络的机器上安装既可。

  • apt一键下载所有依赖的包: https://blog.csdn.net/junbujianwpl/article/details/52811153

你可能感兴趣的:(工作,Linux,生产技巧)