# Proxmox

### 1. Preparation

{% stepper %}
{% step %}
**Download the CUBE OS image**

Visit this [repo](https://github.com/eWeLinkCUBE/CUBE-OS/releases/latest) to download the latest CUBE OS image and extract it after downloading.

For Proxmox VE 9, download the disk image archive (commonly `sdcard.vmdk.xz`).

Extract it to get the `.vmdk` file.
{% endstep %}

{% step %}
**Prepare a Proxmox VE host**

* A running **Proxmox VE** host with admin access (Web UI + Shell/SSH)
* If you haven’t installed Proxmox VE yet, follow the official [guide](https://www.proxmox.com/en/products/proxmox-virtual-environment/get-started).
* Recommended resources for the VM:
  * **CPU**: 2 cores
  * **Memory**: 4096 MB (4 GB) or more
    {% endstep %}

{% step %}
**Zigbee Adapter (Optional)**

If you need to add Zigbee devices, prepare a Zigbee Dongle. Tested Zigbee Dongles include:

> SONOFF ZBDongle-MAX\
> SONOFF ZBDongle-PMG24\
> SONOFF ZBDongle-LMG21\
> SONOFF ZBDongle-E\
> SONOFF ZBDongle-P\
> [Others listed](https://darkxst.github.io/silabs-firmware-builder/) by developer @darkxst&#x20;

{% hint style="info" %}
For more information on Zigbee configurations and compatibility, please refer to this [guide](https://cube.ewelink.cc/compatibility-check/zigbee).
{% endhint %}

You can pass the dongle through to the VM in Proxmox (see the optional section below).
{% endstep %}
{% endstepper %}

### 2. Create a Virtual Machine (Proxmox)

{% stepper %}
{% step %}
In Proxmox Web UI, click **Create VM**.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FxS9FgoQHLLqdGBxwL1sn%2Fimage.png?alt=media&#x26;token=03d7070e-ea60-40fc-969b-8a0ed960253c" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**General -** Set a VM ID and a name, e.g. `CUBE OS`.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2F8tc2J86zFiizshwgAIyV%2Fimage.png?alt=media&#x26;token=72f4b78a-91f6-4f9f-9c90-e0bbc7a14b91" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**OS -** Choose **Do not use any media**.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FQdua3l1pnrtpcc7pPDAY%2Fimage.png?alt=media&#x26;token=2b570f43-4cc3-4a4f-9c8b-11dd4f4322e7" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
CUBE OS is provided as a prebuilt disk image. In Proxmox, you will **import the disk image** and then boot from it.
{% endhint %}
{% endstep %}

{% step %}
**System -** Recommended settings:

* **BIOS**: `OVMF (UEFI)`
* **EFI Disk**: add an EFI disk (default size is fine)
* **Pre-Enfoll keys**: Uncheck

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FpfdBgeDtrKo3OhYPAbXw%2Fimage.png?alt=media&#x26;token=61c86177-e2b1-4197-a73c-25ba0e54429e" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Just like the VirtualBox/VMware guides, **UEFI is required**. If you can’t boot, double-check the BIOS is set to **OVMF (UEFI)**.
{% endhint %}
{% endstep %}

{% step %}
**Disk / CPU / Memory / Network**

* **Disk**: do **not** create a new empty disk. You will import the CUBE OS disk image in the next section.
* **CPU**: 2 cores (CPU type `host` recommended)
* **Memory**: 4096 MB (4 GB) or more
* **Network**:

  * **Bridge**: `vmbr0` (or your LAN bridge)
  * **Model**: `VirtIO (paravirtualized)`

  <div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2F6VyRJr87Bi24M9Ydjpf8%2Fimage.png?alt=media&#x26;token=12cdb23c-adc8-46ca-baa7-9990370ea565" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="warning" %}
For LAN discovery and `cube.local` to work reliably, avoid NAT-style networking. Use a **bridged** network connected to your home/office LAN.
{% endhint %}
{% endstep %}
{% endstepper %}

### 3. Import the CUBE OS disk image into Proxmox

You’ll import the extracted CUBE OS image (for example `CUBE-OS.vmdk`) and attach it as the VM’s boot disk.

{% stepper %}
{% step %}
**Find the right storage (`local`, not `local-lvm`).** In the Proxmox Web UI left sidebar, click **local** (not **local-lvm**).

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FiPnpG4xmGCMdIlIDGg87%2Fimage.png?alt=media&#x26;token=175030f1-f975-4664-99c7-27bb7dcdcc17" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Upload the `.vmdk` into `local`**

1. Click **Import**
2. Select the extracted disk image on your computer, for example:
   * `sdcard.vmdk`
3. Wait for the upload to complete (800+ MB can take a while)

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FfuXNaQrDKv2E81C1Gcqm%2Fimage.png?alt=media&#x26;token=d2cecdf6-ed34-4f9d-a029-0e407f742277" alt="" width="563"><figcaption></figcaption></figure></div>

After it finishes, you should see the file in the **Content** list.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FblP4P5F1uymfIC01W0ii%2Fimage.png?alt=media&#x26;token=a532cd47-0f32-406c-a7e0-7c0860e8a35e" alt="" width="369"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Attach the imported disk and set it as boot disk.** In the CUBE OS VM:

1. Go to **Hardware**
2. Select the imported **Add** → ![](https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FHHAzYiA9dcGIaV5vySZI%2Fimage.png?alt=media\&token=bbc9c988-1529-45ee-b52b-afae61468e8e)**Import Hard Disk**

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FF69ghjcxJnIAPSqGtKWH%2Fimage.png?alt=media&#x26;token=0663b5a7-3c5f-4a76-a03a-a8a92bb73185" alt="" width="556"><figcaption></figcaption></figure></div>

3. Then go to **Options → Boot Order** and set the imported disk as the first boot device.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FgFpqm3Cc2iT0egyb6ruO%2Fimage.png?alt=media&#x26;token=4916ed74-486c-4fbb-a805-550141c5dbc8" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

### 4. Boot CUBE OS

{% stepper %}
{% step %}
Click to![](https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FU63IlpRoEXQvlMX5UFfA%2Fimage.png?alt=media\&token=868c3c5e-174c-4b72-986d-32d3898b97a7) the VM and open the **Console**.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2Fp6ESYiONl9HLhsdjh5eb%2Fimage.png?alt=media&#x26;token=af9bf298-919c-4e53-8051-b2fa475f640a" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
Wait a few moments for CUBE OS to initialize.

Once boot is complete, you should see the **IP address** displayed on the console.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2F6DzbTjl6xb6J7QpxyiRU%2Fimage.png?alt=media&#x26;token=4fcbb889-05b1-431c-b356-a75786949d05" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
Open the CUBE OS Web UI

* Visit `http://<CUBE_OS_IP>/`, or
* Try: <http://cube.local>

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2F6T5sTzxEzfPdiYX1nH0t%2Fimage.png?alt=media&#x26;token=bc18e466-130b-42c2-9f1f-70e704895398" alt="" width="375"><figcaption></figcaption></figure></div>

Upon successful access, a short ID can be viewed on the settings page. Subsequently, access the CUBE OS Web management page using `cube-{short id}.local`, which is useful for differentiating multiple CUBE OS instances on the same local network.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FtKCHG1Z8FMgijVHgUxdU%2Fimage.png?alt=media&#x26;token=d0f0bc2f-9599-4b45-9c7c-61eb7af32ab4" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

### 5. (Optional) Zigbee USB Dongle passthrough (Proxmox)

{% stepper %}
{% step %}
Plug the Zigbee dongle into the Proxmox host.
{% endstep %}

{% step %}
In the VM, go to **Hardware → Add → USB Device**.

* Prefer selecting by **Vendor/Device ID** (more stable than by port if you move USB ports).
* If your dongle exposes a serial interface, it may also appear under **Add → Serial Port** depending on your setup.

<div align="left"><figure><img src="https://67406449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnF8kmk9yw3yiy2mRerq%2Fuploads%2FzspXAwmgdYxXVKMFNKkn%2Fimage.png?alt=media&#x26;token=71363e03-aa40-4e59-a1d2-d3e30acfe487" alt="" width="370"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
Reboot the VM (if required) and then add Zigbee devices in CUBE OS.
{% endstep %}
{% endstepper %}
