Создание виртуальной машины Ubuntu 20.04 для EMA


Продолжаю эксперименты с виртуальными машинами на локальном гипервизоре QEMU/KVM. На этот раз создаем сервер Ubuntu 20.04 для MailWizz с помощью облачного слепка.

В первую очередь берём последний облачный образ Ubuntu нужного нам релиза. Пусть это будет Ubuntu Server 22.04 LTS (Jammy Jellyfish). Качаем к себе из папки  jammy-server-cloudimg-amd64-disk-kvm.img. Название у него длинное, поэтому я его переименую в ubuntu-ema-src.img и перенесу в папку, где хранятся остальные образы гостевых виртуальных машин — /var/lib/libvirt/images/.

Затем создаем диск будущей машины — ubuntu-ema.qcow2. Для экспериментов мне достаточно 20 Гб:

qemu-img create -F qcow2 -b /var/lib/libvirt/images/ubuntu-ema-src.img -f qcow2 /var/lib/libvirt/images/ubuntu-ema.qcow2 20G

Теперь готовимся к созданию конфигурационного диска.

Во-первых, создадим файл настороек сети ubuntu-ema-network.cfg:

version: 2
ethernets:
  enp1s0:
     dhcp4: true
     dhcp6: false

У меня гостевые машины получают настройки по DHCP, они у меня за NAT. Фиксацию IP адреса за машиной я делаю через Virual Machine Manager, привязывая его к MAC-адресу гостя. Подробности далее, а пока создаем файл настроек пользователяubuntu-ema-user.cfg:

#cloud-config
hostname: ubuntu-ema
manage_etc_hosts: true
users:
  - name: vmadm
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, admin
    home: /home/vmadm
    shell: /bin/bash
    lock_passwd: false
ssh_pwauth: true
disable_root: false
chpasswd:
  list: |
    vmadm:vmadmpass
  expire: false
final_message: "The system is finally up, after $UPTIME seconds"

Здесь, соответсвенно, имя пользователя — vmadm, а пароль — vmadmpass. Обязательно придумайте свои.

Теперь непосредственно создаем диск настроек будущей виртуальной машины:

cloud-localds -v --network-config=ubuntu-ema-network.cfg /var/lib/libvirt/images/ubuntu-ema-seed.qcow2 ubuntu-ema-user.cfg

И, наконец, приступаем к созданию виртуальной машины:

virt-install \
  --connect qemu:///system \
  --virt-type kvm \
  --name ubuntu-ema \
  --ram 4096 \
  --vcpus 2 \
  --os-variant ubuntu20.04 \
  --disk path=/var/lib/libvirt/images/ubuntu-ema.qcow2,device=disk \
  --disk path=/var/lib/libvirt/images/ubuntu-ema-seed.qcow2,device=disk \
  --network network=default,model=virtio,mac=52:54:00:68:a2:8d \
  --graphics spice --video qxl --channel spicevmc \
  --import \
  --noautoconsole

MAC-адрес здесь произвольный и уникальный в рамках нашей экосистемы, но всегда начинается с «52:54:00:» в QEMU/KVM.

Когда система сообщит, что все создано, нам останется привязать конкретный IP-адрес к нашему новому MAC-адресу. Для этого в Virtual Machine Manager->Edit->Connection details->Virtual Netwroks->XML сначала останавливаем сеть, прописываем строчку <host mac=»52:54:00:68:a2:8d» name=»ubuntu-ema» ip=»192.168.122.62″/>:

<network connections="1">
  <name>default</name>
  <uuid>d1a6181e-8c5d-43cd-b455-8551740869bf</uuid>
  <forward mode="nat">
    <nat>
      <port start="1024" end="65535"/>
    </nat>
  </forward>
  <bridge name="virbr0" stp="on" delay="0"/>
  <mac address="52:54:00:33:44:24"/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.100" end="192.168.122.254"/>
      <host mac="52:54:00:68:a2:8d" name="ubuntu-ema" ip="192.168.122.62"/>
    </dhcp>
  </ip>
</network>

Чтобы изменения вступли в силу надо перегрузить гостевую виртуальную машину.

Теперь туда можно зайти по ssh:

ssh vmadm@192.168.122.62

и начинать эксперименты…

PS. Собрал все в скрипт ubuntu-ema-install.sh. Если кому хочется всё сделать быстро, архив лежит здесь. Не забудьте внести в него свои данные, положить в ту же папку облачный образ Ubuntu и запустить:

sh ubuntu-ema-install.sh

Только надо иметь в виду, что MAC-адрес генерирутся автоматически, поэтому его надо подглядеть потом в свойствах созданной виртуальной машины и сделать привязку IP-адреса к нему.

PPS. Материал написан по мотивам этого оригинала. Здесь же есть подготовительные этапы, если вы начинаете с нуля.