相信很多人遇到过这样的问题:
你需要在公司的一台服务器上安装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上执行如下命令:
# 安装yum-plugin-downloadonly插件yum install -y yum-plugin-downloadonly# 把vsftpd换成你想要的包名yum install --downloadonly <vsftpd>
下载的软件在:
/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
本文首发
http://www.itmuch.com/work/install-software-without-network-in-linux/