CHR на Proxmox
Проблема
Заголовок раздела «Проблема»Нужно создавать несколько машин с CHR в виртуальном окружении, и делать это руками долго: скачать образ, распаковать, сконвертировать, создать ВМ, подключить диск. Скрипт автоматизирует эти шаги и оставляет вам только выбор версии, номера ВМ и имени.
Что делает скрипт
Заголовок раздела «Что делает скрипт»- Проверяет наличие каталога
/root/tempи создаёт его при необходимости. - Показывает уже скачанные образы
chr-*.img. - Предлагает выбрать готовый образ по номеру или ввести версию RouterOS. Новую версию скачивает с
download.mikrotik.comи распаковывает. - Показывает список ВМ (
qm list) и спрашивает VMID и имя новой машины. - Конвертирует образ из raw в qcow2 и кладёт его в каталог хранилища ВМ.
- Создаёт ВМ командой
qm createи подключает диск.
Скрипт запускают на ноде Proxmox от root:
chmod +x installchr.sh./installchr.shПараметры под себя
Заголовок раздела «Параметры под себя»Значения зашиты в скрипт, при другой конфигурации Proxmox их нужно поменять:
| Что | Значение в скрипте |
|---|---|
| Хранилище | large-pool (каталог /mnt/pve/large-pool/images) |
| Сетевой мост | vmbr0 |
| Ресурсы ВМ | 1 сокет, 1 ядро, 256 МБ памяти |
| Тип диска | virtio0, формат qcow2 |
| Каталог образов | /root/temp |
Исходный код
Заголовок раздела «Исходный код»installchr.sh
#!/bin/bash
# Variablesvmid=""version=""vm_name=""
echo "############## Start of Script ################"echo "Checking if temp dir is available..."if [ -d /root/temp ]; then echo "-- Directory exists!"else echo "-- Creating temp dir!" mkdir /root/tempfi
# List available images in /root/tempecho "== Available Images =="images=($(ls /root/temp/chr-*.img 2>/dev/null))if [ ${#images[@]} -eq 0 ]; then echo "No images found in /root/temp"else for i in "${!images[@]}"; do echo "$((i+1)): ${images[$i]}" donefi
# Ask user for image selection or version inputecho "## Preparing for image download and VM creation!"echo "You can choose an existing image or input a new CHR version to deploy."read -p "Enter the number of an existing image (or input a new CHR version): " choice
if [[ $choice =~ ^[0-9]+$ ]] && [ $choice -le ${#images[@]} ]; then filename=${images[$((choice-1))]} echo "-- Using existing image: $filename"else version=$choice
# Check if image is available and download if needed if [ -f /root/temp/chr-$version.img ]; then echo "-- CHR image is available." filename="/root/temp/chr-$version.img" else echo "-- Downloading CHR $version image file." cd /root/temp echo "---------------------------------------------------------------------------" wget https://download.mikrotik.com/routeros/$version/chr-$version.img.zip unzip chr-$version.img.zip filename="/root/temp/chr-$version.img" echo "---------------------------------------------------------------------------" fifi
# Print list of VMsecho "== List of VMs =="qm listecho ""read -p "Enter the VM ID to use: " vmidecho ""read -p "Enter the VM Name (must be a valid DNS name): " vm_name
# Guard: an empty VM ID would make the rm -rf below wipe the whole images dirif ! [[ $vmid =~ ^[0-9]+$ ]] || [ -z "$vm_name" ]; then echo "VM ID must be a number and VM name must not be empty" >&2 exit 1fi
# Check and recreate storage for VM if necessaryif [ -d /mnt/pve/large-pool/images/$vmid ]; then echo "VM dir exists. Recreating directory..." rm -rf /mnt/pve/large-pool/images/$vmid mkdir /mnt/pve/large-pool/images/$vmidelse echo "Creating VM image dir" mkdir /mnt/pve/large-pool/images/$vmidfi
# Creating qcow2 imageecho "Converting image to qcow2"qemu-img convert -f raw -O qcow2 "$filename" /mnt/pve/large-pool/images/$vmid/vm-$vmid-disk-1.qcow2
# Create VMecho "Creating VM"qm create $vmid --name $vm_name --net0 virtio,bridge=vmbr0 --bootdisk virtio0 --ostype l26 --memory 256 --onboot no --sockets 1 --cores 1 --virtio0 large-pool:$vmid/vm-$vmid-disk-1.qcow2
echo "############## End of Script ##############"