使用Julia语言时不需要连接互联网(镜像)

8

问题: 我希望在我们公司的内部网络中为开发人员提供Julia,但由于敏感数据的原因,这个网络没有任何互联网访问权限(没有代理)。

据我所知,Julia是设计用于使用GitHub的。例如,julia> Pkg.init() 试图访问: git://github.com/JuliaLang/METADATA.jl

示例: 我通过创建本地CRAN存储库(rsync)并设置本地Web服务器来解决了R的此问题。我也通过创建本地PyPi存储库(bandersnatch)+ Web服务器来解决了Python的同样问题。

问题: 有没有办法为Julia创建本地存储库以存放元数据和软件包?

非常感谢。 Roman

3个回答

8
使用Julia软件包管理器的好处之一是,您应该能够分叉METADATA并将其托管在任何地方(并保留一个分支,在此分支上您可以检查新软件包,然后再允许客户更新)。您可能是第一个设置这样系统的人,所以请预期您需要提交一些问题(或更好的是;拉请求)以使所有内容顺利运行。
请参见Pkg.init() 的附加参数,其中指定了METADATA存储库的URL。
如果您想要一个更简单的解决方案来进行管理,我还会考虑使用两层设置,其中您在一个系统上安装软件包(连接到互联网),然后将生成的 ~/.julia 目录复制到受限制的系统。如果您使用的软件包具有二进制依赖关系,则如果两侧没有类似的系统或某些依赖项全局安装,可能会遇到问题,但Pkg.build("Pkgname") 可能会有帮助。

感谢您的回复。据我所知,使用~/.julia目录,我可以通过使用Pkg.add("Packagename")在第一层(互联网)上安装软件包。将其移动到第二层(无互联网),设置JULIA_PKGDIR环境变量指向.julia。我必须测试它。关于您的第一个选项,我克隆了METADATA到本地目录。我可以使用JULIA_PKGDIR指向它。但是,那只是软件包元数据,当我实际添加软件包时,仍然必须从github下载所有内容。最理想的情况是,如果我可以创建一个包括所有内容的存储库,就像CRAN 100GB镜像一样。 - Roman

2
这是我目前的解决方法,采用了ivarne的第二个建议。 我使用了双层设置,两个网络,一个连接互联网(办公网络),一个与外界隔离(开发网络)。
系统信息:openSuSE-13.1(两个网络),julia-0.3.5(两个网络)
第一层(办公网络)
- 在NFS共享上安装了julia,/sharename/local/julia。 - 将/sharename/local/bin/julia软链接到/sharename/local/julia/bin/julia - 使用/etc/profile.d/scriptname.sh中的脚本将/sharename/local/bin/附加到$PATH中 - 在所有办公网络机器上创建了/etc/gitconfig:[url "https://"] insteadOf = git://(解决github代理服务器问题) - 现在办公网络上的每个用户都可以简单地运行# julia。 - 然后使用Pkg.add("PackageName")安装各种包。
两个网络定期连接(具有某些安全措施ssh、防火墙、路由)以进行自动化数据交换,时间很短。
第二层(开发网络)
- 在与第一层相等的NFS共享上安装了julia。 - 当网络连接时,我使用带有rsync -avz --delete的shell脚本将第一层的.julia目录与第二层的每个用户同步。
结论(到目前为止):
它似乎工作得相当好。 如ivarne所建议,如果在第一层安装了一个软件包并且执行了比仅仅复制文件更多的操作(编译?),则该软件包将无法在第二层运行。 但是可以使用Pkg.build("Pkgname")解决此问题。

嗨,你写这篇文章已经四年了。上述工作流程对你仍然有效吗?还是你推荐其他方法? - user3120868
我已经有大约3年没有使用它了,所以我无法确认它是否仍然有效。如果Julia软件包管理没有发生重大变化,那么仍然应该是可能的。 - Roman

0

PackageCompiler.jl 似乎是在安全系统上使用现代 Julia(v1.8)的最佳工具。以下方法需要一个与部署服务器相同架构的构建服务器,您的机构可能已经用于开发容器等。

  1. 使用 PackageCompiler 的 create_sysimage() 构建系统映像
  2. 将构建(系统映像和仓库)以及 Julia 二进制文件上传到安全系统
  3. 将脚本别名设置为 julia,类似于以下示例:
#!/bin/bash
set -Eeu -o pipefail

unset JULIA_LOAD_PATH

export JULIA_PROJECT=/Path/To/Project
export JULIA_DEPOT_PATH=/Path/To/Depot
export JULIA_PKG_OFFLINE=true

/Path/To/julia -J/Path/To/sysimage.so "$@"

我已经能够在我所在机构的安全系统上运行研究流程,其中有一种方法的公共版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接