Skip to content

ventoy Ventoy

Ventoy is used as an app to serve multipe ISOs on a bootable USB drive. The drive is consistently plugged into the node and updated automatically using cp -u. It is meant to be synchronized with ISOs saved in Proxmox or downloaded via qTorrent.

The way that it works is that an NFS share and USB drive are mounted using autofs. A cronjob is run nightly to sync the ISO files on the NFS with the thumb drive.

Warning

Continuous writes to USB drives will degrade the life of the drive.

🛠 Installation

Default Port: 24680

Configuration path: /opt/ventoy

.env: true

homelab/pve/ventoy/install.sh

task install
./install.sh
sudo ./install.sh

⚙ Config

.env

cp .env.tmpl .env
nano .env
--8<-- "ventoy/.env.tmpl"

🤝 Service

/etc/systemd/system/ventoy.service

cat > /etc/systemd/system/ventoy.service <<EOF
--8<-- "ventoy/ventoy.service"
EOF
curl -Lo /etc/systemd/system/ventoy.service https://github.com/nicholaswilde/homelab/raw/refs/heads/main/pve/ventoy/ventoy.service
--8<-- "ventoy/ventoy.service"

Enable service

(
 systemctl enable ventoy.service && \
 systemctl start ventoy.service && \
 systemctl status ventoy.service
) 

⏰ Cronjob

2 A.M. nightly

(crontab -l 2>/dev/null; echo "0 2 * * * find /mnt/storage/downloads -type f -name \"*.iso\" -exec cp -u {} /mnt/usb \;  >/dev/null 2>&1") | crontab -
  crontab -e
0 2 * * * find /mnt/storage/downloads -type f -name \"*.iso\" -exec cp -u {} /mnt/usb \;  >/dev/null 2>&1"

Traefik

homelab/pve/traefik/conf.d/ventoy.yaml
--8<-- "traefik/conf.d/ventoy.yaml"

📝 Usage

The app may be installed and updated on the USB drive via the web app.

Start web server

task serve
(
  cd /opt/ventoy && \
  sudo bash -c bash VentoyWeb.sh -H "0.0.0.0"
)

Sync ISOs

task sync
find /mnt/storage/downloads -type f -name \"*.iso\" -exec cp -u {} /mnt/usb \;

🚀 Upgrade

task update

Then update the USB drive from the Web GUI.

Task List

--8<-- "ventoy/task-list.txt"

🔗 References