我需要在没有互联网连接的服务器上安装一些 rpm、python 和 R 包:我只能通过 ssh 连接到它。我可以下载这些包并将它们 scp 到服务器,然后使用rpm -i
诸如此类的命令手动安装它们。但管理依赖项和找到正确的 rpm 包很麻烦,而且每个软件都有特定的要求(这里指的是
yum deplist foo
+yumdownloader foo
+rpm -i foo.rpm
,- 一面镜子http://cran.r-project.org/src/contrib/+https://stackoverflow.com/questions/10807804/offline-install-of-r-package-and-dependencies,
pip install --download ~/bar/ foo
+pip install --no-index --find-links ~/bar/ foo
加上一些 R 和 pip 的依赖管理。)
因此,我正在考虑另一种适用于任何软件的途径:
- 在本地启动“手动代理”,作为交互式命令行工具
- 在新的控制台中,要求 yum/R/pip 使用该代理并安装一些包
- 每当 yum 从网络请求某个文件(如 PACKAGES 或 foo.tar.gz)时,手动代理都会打印 URL 并等待
- 我从另一台机器下载上述 URL 并将其 scp 到服务器
- 我告诉手动代理该文件在那里,然后它会回答 yum 的请求。
有没有工具可以实现手动代理?mitmproxy 似乎可以做到这一点,有了解这个工具的人可以确认一下吗?
我看到了这些潜在的挑战:
- 我可能需要增加 yum 的超时时间。
- 如果包管理器 yum、pip 或 R 使用 SSL,我需要安装 mitmproxy 的证书
- 安装 mitmproxy 及其依赖项(在缺乏互联网的服务器上)可能比我试图解决的问题更麻烦。
任何其他可以实现此目的的工具也欢迎。也许一个小的 Python 脚本就足够了。
编辑:回答 TessellatingHeckler 的第二条评论:
- SSH 从服务器退出?可能,但网络管理员可能不高兴(另外,设置并不简单,因为我的电脑也位于代理后面,所以我需要双跳 + ssh -R)。
- github.com/inaz2/proxy2?看起来不错。
yum localinstall
?它确实比 更好rpm -i
,但我的目标是(获得一些经验)并为任何启用代理的包管理器提供通用解决方案。包管理器在列出依赖项和从本地存储库安装的方式上有所不同,并且这些功能的文档通常比告诉它们使用代理更少。