Rychlé nasazení Ubuntu Cloud Image ve VirtualBoxu pomocí CLI

Shrnutí

Tento článek poskytuje návod na zprovoznění serverových obrazů Ubuntu (Cloud Images) v prostředí VirtualBox bez nutnosti klasické instalace. Postup postihuje současné standardy (Ubuntu 24.04 LTS), doplněn o kritickou konfiguraci Cloud-Init pro injektáž uživatelských dat a převeden do robustního procesu využívajícího příkazovou řádku. Text se zaměřuje na efektivitu, reprodukovatelnost a pochopení principu “infrastruktury jako kód” na lokální úrovni.


Úvod do problematiky Cloud Images

Tradiční instalace operačního systému z ISO souboru je pro jednorázové testování nebo rychlý vývoj neefektivní. Cloud Images jsou předinstalované, minimalizované obrazy disku, které neobsahují instalátor ani výchozí uživatelské účty.

Pro jejich zprovoznění je nezbytný mechanismus Cloud-Init, který při prvním startu (boot) provede konfiguraci: vytvoření uživatele, nastavení SSH klíčů, sítě a balíčků. Pokud tento krok vynecháte, systém nastartuje, ale nebudete se do něj moci přihlásit, protože neexistuje výchozí heslo.

Tento návod nahrazuje zastaralé nástroje a postupy (IDE řadiče, konverze přes RAW formát) moderním workflow s využitím SATA řadiče a přímé konverze formátů.

Prerekvizity a nástroje

Pro manipulaci s obrazy disků a generování konfiguračních ISO souborů potřebujete sadu nástrojů v hostitelském systému (Linux).

sudo apt-get update
sudo apt-get install qemu-utils cloud-image-utils wget virtualbox

Krok 1: Stažení a verifikace obrazu

Použijeme aktuální LTS verzi (např. 24.04 Noble Numbat). Cloudové obrazy jsou distribuovány ve formátu .img (obvykle QCOW2).

# Vytvoření pracovního adresáře
mkdir -p ~/vbox-cloud-lab
cd ~/vbox-cloud-lab

# Stažení aktuálního obrazu (Ubuntu 24.04 LTS)
wget https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img

# (Volitelné) Ověření integrity by mělo být standardem, zde pro stručnost vynecháno

Krok 2: Konfigurace Cloud-Init (User Data)

Toto je klíčová část, kdy musíme vytvořit soubor user-data, který definuje uživatele a přístup.

Vytvořte soubor user-data (YAML formát):

#cloud-config
hostname: ubuntu-vbox-lab
manage_etc_hosts: true
users:
  - name: admin
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    lock_passwd: false
    passwd: $6$rounds=4096$randomsalt$... # Zde by měl být hash hesla, pro test lze použít plain text (viz níže) nebo SSH klíč
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1yc2E...vas_verejny_klic...

# Pro jednoduchost v labu povolíme přihlášení heslem "password" (v produkci nepoužívat!)
chpasswd:
  list: |
    admin:password
  expire: False

ssh_pwauth: True

Poznámka: V produkčním prostředí vždy preferujte SSH klíče a zakažte ssh_pwauth.

Následně vygenerujeme “seed” disk (malý ISO soubor), který VirtualBox připojí jako CD-ROM. Cloud-Init si z něj při startu načte konfiguraci.

# Vytvoření seed.iso (cidata)
cloud-localds seed.iso user-data

Krok 3: Konverze a příprava disku

Nástroj qemu-img zvládá přímou konverzi, což šetří čas i místo na disku.

# Konverze QCOW2 (KVM/QEMU formát) na VDI (VirtualBox formát)
qemu-img convert -f qcow2 -O vdi ubuntu-24.04-server-cloudimg-amd64.img ubuntu-24.04.vdi

# Zvětšení virtuálního disku (Cloud images jsou malé, cca 2-3GB) na 10 GB
# Je nutné použít VBoxManage, qemu-img resize u VDI často selže s geometrií
VBoxManage modifymedium disk ubuntu-24.04.vdi --resize 10240

Krok 4: Vytvoření virtuálního stroje pomocí VBoxManage

Vytvoříme VM čistě přes [[CLI]]. Použijeme SATA řadič (výkonnější než IDE) a NAT síť pro univerzální konektivitu bez závislosti na názvu fyzického rozhraní hostitele.

# Definice proměnných
VM_NAME="Ubuntu_Cloud_24_04"

# 1. Registrace VM
VBoxManage createvm --name "$VM_NAME" --ostype "Ubuntu_64" --register

# 2. Konfigurace CPU, RAM a VRAM
# Zvyšujeme paměť na 2048 MB pro moderní standardy
VBoxManage modifyvm "$VM_NAME" --memory 2048 --cpus 2 --vram 16

# 3. Nastavení sítě (NAT je bezpečnější pro základní lab)
VBoxManage modifyvm "$VM_NAME" --nic1 nat

# 4. Přidání SATA řadiče
VBoxManage storagectl "$VM_NAME" --name "SATA Controller" --add sata --controller IntelAHCI

# 5. Připojení systémového disku (Port 0)
VBoxManage storageattach "$VM_NAME" --storagectl "SATA Controller" \
    --port 0 --device 0 --type hdd --medium ubuntu-24.04.vdi

# 6. Připojení Cloud-Init seed disku (Port 1 - emulace CD-ROM)
VBoxManage storageattach "$VM_NAME" --storagectl "SATA Controller" \
    --port 1 --device 0 --type dvddrive --medium seed.iso

# 7. Nastavení sériové konzole (volitelné, ale užitečné pro debugging bootu)
VBoxManage modifyvm "$VM_NAME" --uart1 0x3F8 4 --uartmode1 file "/tmp/${VM_NAME}_log.txt"

Krok 5: Spuštění a připojení

Nyní můžeme stroj spustit v bezhlavém režimu (headless), což je pro serverové instalace typické.

# Start VM na pozadí
VBoxManage startvm "$VM_NAME" --type headless

Jelikož používáme NAT, pro přístup přes SSH musíme nastavit [[Port Forwarding]], nebo se připojit přes konzoli VirtualBoxu.

Nastavení Port Forwardingu (Host 2222 -> Guest 22):

VBoxManage controlvm "$VM_NAME" natpf1 "guest_ssh,tcp,,2222,,22"

Připojení:

# Počkejte cca 30-60 sekund na dokončení bootu a Cloud-Init procesu
ssh -p 2222 admin@localhost
# Heslo: password (pokud jste nezměnili v user-data)

Závěr

Použití Cloud Images ve VirtualBoxu vyžaduje pochopení principu injektáže metadat. Pouhé převedení disku nestačí, protože chybí inicializační logika. Tento postup je ideální pro rychlé vytváření “immutable” infrastruktury, testování Ansible playbooků nebo CI/CD pipelines v lokálním prostředí. Po dokončení práce lze VM jednoduše smazat:

VBoxManage unregistervm "$VM_NAME" --delete

Citace a zdroje: