AlirezaGH
AlirezaGH

Reputation: 399

Using Julia package manager offline

We recently decided to make Julia Language available on our cluster systems. The cluster system is not able to connect to the internet. Is there any way to download all Julia packages and make them available for our different users to install and use them offline?

Another option that we have is a system that can connect to the internet temporarily, but it is always connected to the main cluster system. Is there any way to use this system as a mirror for the Julia packages or not?

We want to use "Julia 1.0.1".

our cluster operation system is: "CentOS 5.5

notes: I have seen the question asked before here, but it is for Julia 0.6 and a single package that will be copied by hand. I want that user uses the Pkg.add <pkgName> command but instead of the internet, the package manager gets the packages from our offline system.

Thank you for your help and time.

Upvotes: 5

Views: 1405

Answers (2)

Ashlin Harris
Ashlin Harris

Reputation: 422

The following is a crosspost of https://stackoverflow.com/a/74800608/18431399


PackageCompiler.jl seems like the best tool for using modern Julia (v1.8) on secure systems. The following approach requires a build server with the same architecture as the deployment server, something your institution probably already uses for developing containers, etc.

  1. Build a sysimage with PackageCompiler's create_sysimage()
  2. Upload the build (sysimage and depot) along with the Julia binaries to the secure system
  3. Alias a script to julia, similar to the following example:
#!/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 "$@"

I've been able to run a research pipeline on my institution's secure system, for which there is a public version of the approach.

Upvotes: 0

AVA
AVA

Reputation: 2558

Caution:
Side effects are not known!
May please be tested properly before put into production!

a) Collect the required packages along with their dependent packages in compiled form, put them in folder, stdlib (for example: /opt/julia/julia-1.1.0/shared/julia/stdlib/v1.1/)

b) add stdlib path to environment variables, JULIA_DEPOT_PATH and JULIA_LOAD_PATH

Upvotes: 1

Related Questions