Offline Package Bundles

An air-gapped JuliaHub installation cannot reach pkg.juliahub.com to synchronize packages. Instead, JuliaHub supplies offline package bundles — directories containing packages, documentation, and artifacts that you transfer to the installation and ingest locally.

Complete the platform installation before ingesting a bundle.

Disk space

The installation server needs roughly twice the bundle size in free space, because the bundle is copied into the platform's sync state directory during ingest.

The initial bundle is large — on the order of 800 GB — so budget at least 1800 GB of free space for the first ingest. Subsequent bundles are incremental and considerably smaller.

Bundle naming

A bundle is a directory named transfer-<date>-<serial>, for example transfer-2025-0130-00000. JuliaHub delivers it either on physical media or as a set of download URLs.

The examples below use transfer-2025-0130-00000; substitute the name of the bundle you received.

1. Transfer the bundle to the server

Copy the bundle to /var/lib/juliahub on the installation server. Replace <remote> with the server's address and <user> with your SSH user.

Using rsync, which can resume an interrupted transfer:

rsync -rvza transfer-2025-0130-00000 <user>@<remote>:/var/lib/juliahub

Or using scp:

scp -r transfer-2025-0130-00000 <user>@<remote>:/var/lib/juliahub
Prefer `rsync` for the initial bundle

At 800 GB, a transfer interrupted partway through is expensive to restart. rsync resumes where it left off; scp does not.

2. Move the bundle into the sync state directory

Connect to the server over SSH and run the move_transfer.sh helper, which places the bundle where the sync service expects it:

cd /var/lib/juliahub/config/sync
./move_transfer.sh /var/lib/juliahub/transfer-2025-0130-00000

3. Fix ownership

The sync service runs as UID 1000 and must own the bundle:

sudo chown -R 1000:1000 /var/lib/juliahub/config/sync/transfers/transfer-2025-0130-00000

4. Create a bundle registry

Only needed the first time you ingest a bundle. If a bundle-backed registry already exists, skip to step 5.

  1. Open Registries from the sidebar.
  2. Select Add Registry.
  3. Set Registry name to General.
  4. Set Provider type to Bundle.
  5. Select Add Registry to save.

See Registry Management for the other registry options.

5. Ingest the bundle

  1. Open Packages from the sidebar.
  2. Select Synchronize.

Ingest reads the bundle from disk and populates the platform's package, documentation, and artifact stores.

The first ingest takes hours

Processing the initial 800 GB bundle can take several hours. Incremental bundles are much faster. The platform stays usable during ingest, though packages appear only as they are processed.

Subsequent bundles

For each new bundle, repeat steps 1 through 3 and then step 5. The registry created in step 4 is reused, so it does not need to be recreated.