# Offline Media

A medium is a file system location on which mirrored repositories and subscription information can be saved at to make it available to the offline Proxmox systems. This can be an external portable disk (for example a USB pen 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 true \
     --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.

## 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 normally, 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

You can also just point apt directly at the synced snapshot folder(s) on the medium and then create an new repository entry in a `/etc/apt/sources.list.d` file, for example:

    deb [check-valid-until=false] file:///mnt/mirror-path/<mirror-name>/<snapshot-timestamp> <codename> <suite>

Where `<codename>` is normally the Debian one, for example `bullseye` or `bookworm` and `suite` is one or more of either the one of a Debian or Proxmox project, for example `pve-enterprise`. pbstest or main.

Now you should be able to upgrade like normally, and don't forget to disable the repository entry again until next time, once your done.

### 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;
>     	}
>     }

The corresponding `/etc/apt/sources.list.d` file should contain

    deb [ check-valid-until=false ] http://proxmox-offline-mirror.domain.example/<mirror-name>/<snapshot-timestamp> <codename> <suite>

See Manual Setup above for examples abut what `<codename>` or `<suite>` can be.

Now you should be able to upgrade like normally, and don't forget to disable the repository entry again until next time, once your done.

## Activating an 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.