Offline Media¶
A medium stores mirrored repositories and subscription information for use by offline Proxmox systems. It can be an external storage device, such as a USB flash drive, or a local network share.
Setting Up a Medium¶
Either run the setup wizard again, or use the config media add command.
For example, to define a new medium containing the
proxmox-ve-bookworm-no-subscription and debian-bookworm mirrors, run the
following command:
proxmox-offline-mirror config media add \
--id pve-bookworm \
--mirrors proxmox-ve-bookworm-no-subscription \
--mirrors debian-bookworm \
--sync true \
--verify-mode size \
--mountpoint /path/where/medium/is/mounted
Syncing a Medium¶
To sync the local mirrors to a medium, the following command can be used:
proxmox-offline-mirror medium sync pve-bookworm
This command will sync all mirrors linked with this medium to the medium's mount point.
Additionally, it will sync all offline keys for further processing by
proxmox-offline-mirror-helper on the target system.
The medium's verify-mode controls checks of files already stored on it. none checks only
that they exist, size compares their sizes with the corresponding source files in the mirror,
and full verifies their checksums. A file that fails the selected check is copied again. In
size and full mode, checksums are also verified during copying. If a source file fails this
check, synchronization fails rather than copying damaged content into the medium's pool.
While copying a mirror, synchronization holds the same per-mirror lock as snapshot creation. This prevents the snapshots from changing during the copy. If another operation holds the lock, synchronization waits up to five seconds, then fails if the mirror is still busy. Retry once the conflicting operation has finished.
Using a Medium¶
After syncing a medium you can make it accessible on the (offline) target system by either:
unmounting it from the mirror host, plugging it into the target and mounting it there
exposing it either directly (from the mirror host) or indirectly (from another host) via the local network (NFS, CIFS/SMB or HTTP)
After that you can upgrade the host as usual, either using the console or the web interface, as described in the respective project's documentation.
Once an upgrade is done you should disable, or remove, the snippet to avoid apt errors from automatic refresh. Note that you can disable and re-enable repositories simply via the web interface of Proxmox VE, Proxmox Backup Server or Proxmox Mail Gateway.
Example: Local Mount Point¶
Either option below assumes that you already mounted the medium on the target host.
Guided Setup¶
For a guided setup run proxmox-offline-mirror-helper setup. It will let you select the mirrors
and snapshots and can then generate a sources.list.d snippet. This snippet can be saved to the
/etc/apt/sources.list.d directory. The default file name is offline-mirror.list.
Manual Setup¶
To use a snapshot directly with APT, create a repository entry in a .list file under
/etc/apt/sources.list.d/. For example:
deb [check-valid-until=false] file:///mnt/mirror-path/<mirror-name>/<snapshot-timestamp> <suite> <components>
Replace <suite> with the suite from the mirror's repository line, such as bookworm or
bookworm-security. Replace <components> with one or more of that repository's components,
such as main, pve-enterprise, or pbstest. Use the mirror name and snapshot timestamp for
<mirror-name> and <snapshot-timestamp>.
You can then upgrade the system as usual. After upgrading, disable the repository entry until the medium is needed again.
Example: Local HTTP Server¶
You can also configure an HTTP server to provide the snapshots in your internal network. A minimal sample configuration for nginx:
# with the correct dns setup and path this corresponds to a sources.lists entry # deb [ check-valid-until=false ] http://proxmox-offline-mirror.domain.example/<mirror-name>/<snapshot-timestamp> <codename> <suite> server { listen 80 default_server; listen [::]:80 default_server; server_name proxmox-offline-mirror.domain.example; root /path/to/medium; disable_symlinks off; autoindex on; error_log /var/log/nginx/proxmox-offline-mirror.error.log; access_log /var/log/nginx/proxmox-offline-mirror.access.log; location / { try_files $uri $uri/ =404; } }
Create a .list file under /etc/apt/sources.list.d/ with a repository entry pointing to the
HTTP server:
deb [ check-valid-until=false ] http://proxmox-offline-mirror.domain.example/<mirror-name>/<snapshot-timestamp> <suite> <components>
Replace the placeholders as described in Manual Setup above. You can then upgrade the system as usual. After upgrading, disable the repository entry until the mirror is needed again.
Activating a Subscription Key¶
To activate or update a subscription key offline, either use proxmox-offline-mirror-helper
offline-key directly or follow the respective step when doing the guided setup via the
proxmox-offline-mirror-helper setup command.
The offline-key command supports both local mountpoints and HTTP URLs. When using an HTTP
server (as described in the Example: Local HTTP Server section), you can activate subscription keys
directly from the HTTP URL without needing to mount the medium locally:
proxmox-offline-mirror-helper offline-key --source http://proxmox-offline-mirror.domain.example/
This is particularly useful when the mirror is served over HTTP and you only need to activate
subscription keys. Other operations like the status command and repository configuration
still require a local mountpoint.