Créer une VM

Vérifications avant de créer une VM

Avant de chercher à créer des VMs, il y a quelques vérifications de base à effectuer,
relativement indépendantes de l’hyperviseur:


Avec virt-manager

  1. Installer virt-manager
    Normalement, virt-manager est destiné aux machines Linux avec interface graphique — puisque virt-manager est un client graphique. Mais on peut aussi l’installer sur une machine sans interface graphique, non pas pour utiliser l’application elle-même, mais installer ses dépendences qui incluent un certain nombre d’utilitaires.

     sudo apt install virt-manager
    
  2. S’assurer que libvirt tourne et démarrer virt-manager

     $ sudo systemctl start libvirtd
     $ sudo virt-manager
    
  3. Créer une nouvelle VM à partir d’un disque d’installation (image ISO)

    • File > Create New Machine
    • Cocher Local install media (ISO image or CDROM)
    • Naviguer dans le système de fichiers et choisir l’image désirée
  4. Définir la quantite de mémoire et le nombre de CPU à utiliser.
    Pour une petite image (TinyCoreLinux), 256 Mo est plus que suffisant

  5. Configurer l’emplacement et la taille de la VM crée.
    L’interface graphique ne vous laissera pas choisir moins de 0.1 Go (soit environ 100 Mo)

    Si vous ne cliquez pas sur Select or Create custom storage,
    l’image sera placée par défaut dans /var/lib/libvirt/images

  6. Démarrer l’installation de la VM, à partir du disque d’installation TinyCoreLinux.
    Une fois l’installation terminée, aller dans le menu File et arrêter la VM

QEMU

Avec virt-install


Dupliquer une VM

Après avoir construit une première VM, on peut créer de nouvelles VMs rapidement, soit en utilisant

Post-duplication

Après avoir dupliqué une VM, il y a potentiellement plusieurs choses à modifier:

  1. Supprimer le machine ID,
    également supprimer et regénérer le D-BUS machine ID. Le numéro d’identification doît être unique.

     $ rm /etc/machine-id
     $ rm /var/lib/dbus/machine-id
     $ dbus-uuidgen --ensure
    

    Suivant la distribution Linux invistée, des étapes supplémentaires peuvent être nécessaire,
    lire la documentation de la distro

  2. Modifier le nom d’hôte

     $ hostnamectl
     $ hostnamectl set-hostname vm-example
    
  3. Modifier les adresses MAC des NICs, ainsi que les adresses IP statiques, s’il y en a.

  4. S’il y a des UUID (Universally unique identifiers) dans les fichiers de configuration,
    les régénérer et mettre à jour les fichiers de configuration dans lesquels ils sont listés.

     $ cat /etc/fstab
     UUID=28a25b21-4cc8-484e-bebe-1d133ce62468  /     ext4    errors=remount-ro 0       1
    

Customiser une image VM avec cloud-init

$ wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img

$  cat cloud_init.cfg
#cloud-config
hostname: test1
fqdn: test1.example.com
manage_etc_hosts: true
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
lock_passwd: false
ssh-authorized-keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAQv8lINNJvVpvtCvEXz+HvN146xZTDcJP5KWBLaRNEc test1
# only cert auth via ssh (console access can still login)
ssh_pwauth: false
disable_root: false
chpasswd:
list: |
ubuntu:linux
expire: False
package_update: true
packages:
- qemu-guest-agent
# message to write to /var/log/cloud-init-output.log
final_message:
"The system is finally up, after $UPTIME
seconds"

$ cloud-localds -v --network-config=network_config_static.cfg test1-seed.qcow2 cloud_init.cfg

$ sudo virt-install --name test1 \
    --virt-type kvm \
    --memory 2048 --vcpus 2 \
    --boot hd,menu=on \
    --disk path=test1-seed.qcow2,device=cdrom \
    --disk path=snapshot-bionic-server-cloudimg.qcow2,device=disk \
    --graphics none \
    --os-variant ubuntu18.04 \
    --network network:default \
    --console pty,target_type=serial

$ sudo virsh list --all
$ sudo virsh destroy test1
$ sudo virsh undefine test1