Préparation d’une machine virtuelle SLES ou openSUSE Leap pour Azure

S’applique à : ✔️ Machines virtuelles Linux ✔️ Groupes identiques flexibles S’applique à : ✔️ ✔️ Groupes identiques uniformes

Dans certains cas, vous voulez utiliser des machines virtuelles SLES (SUSE Linux Enterprise Server) personnalisées ou openSUSE Leap Linux dans votre environnement Azure, et pouvoir créer ces types de machines virtuelles via l’automatisation. Cet article montre comment créer et télécharger un disque dur virtuel (VHD) Azure personnalisé qui contient un système d’exploitation SUSE Linux.

Prérequis

Cet article suppose que vous avez déjà installé un système d’exploitation SLES ou openSUSE Leap Linux sur un disque dur virtuel. Plusieurs outils permettent de créer des fichiers .vhd. Par exemple, vous pouvez utiliser une solution de virtualisation comme Hyper-V. Pour obtenir des instructions, consultez la page Installation de Hyper-V et création d’une machine virtuelle.

Notes d’installation de SLES/openSUSE Leap

  • Pour obtenir plus de conseils sur la préparation des images Linux pour Azure, consultez Notes générales sur l’installation de Linux.
  • Azure ne prend pas en charge les fichiers d’image de disque dur Windows (.vhdx). Seuls les fichiers VHD (.vhd) sont pris en charge en dehors des machines virtuelles. Vous pouvez convertir le disque au format VHD en utilisant le gestionnaire Hyper-V ou la cmdlet Convert-VHD.
  • Azure prend en charge les machines virtuelles Gen1 (BIOS Boot) et Gen2 (amorçage UEFI).
  • Le module de noyau Table d’allocation de fichiers virtuels (VFAT) doit être activé dans le noyau.
  • Ne configurez pas une partition d’échange sur le disque du système d’exploitation. Vous pouvez configurer l’agent Linux pour la création d’un fichier d’échange sur le disque de ressources temporaire. Les étapes suivantes de cet article donnent plus d’informations sur la configuration de l’espace d’échange.
  • Tous les VHD sur Azure doivent avoir une taille virtuelle alignée sur 1 Mo. Avant de convertir un disque brut en VHD, vous devez vérifier que la taille du disque brut est un multiple de 1 Mo. Pour plus d’informations, consultez Notes générales sur l’installation de Linux.

Remarque

Cloud-init version 21.2 ou ultérieure supprime l’exigence de la fonction définie par l’utilisateur (UDF). Cependant, si le module udf n’est pas activé, le CD-ROM n’est pas monté lors du provisionnement, empêchant ainsi l’application des données personnalisées. Une solution de contournement consiste à appliquer des données utilisateur. Cependant, contrairement aux données personnalisées, les données utilisateur ne sont pas chiffrées. Pour plus d’informations, consultez Formats des données utilisateur dans la documentation de cloud-init.

Utilisation de SUSE Studio

SUSE Studio peut facilement créer et gérer vos images SLES et openSUSE Leap pour Azure et Hyper-V. SUSE Studio est recommandée pour personnaliser vos propres images SLES et openSUSE Leap.

Comme alternative à la création de votre propre disque dur virtuel, SUSE publie également des images BYOS (Bring Your Own Subscription) pour SLES sur VM Depot.

Préparer SLES pour Azure

  1. Configurez si nécessaire les modules Azure et Hyper-V.

    Si votre hyperviseur logiciel n’est pas Hyper-V, d’autres modules doivent être ajoutés au disque RAM initial (initramfs) pour démarrer avec succès dans Azure.

    Modifiez le fichier /etc/dracut.conf en y ajoutant la ligne suivante :

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Exécutez la commande dracut pour reconstruire le fichier initramfs :

    sudo dracut --verbose --force
    
  2. Configurez la console série.

    Pour réussir à utiliser la console série, vous devez configurer plusieurs variables dans le fichier /etc/defaults/grub et recréer GRUB sur le serveur :

    # Add console=ttyS0 and earlyprintk=ttS0 to the variable.
    # Remove "splash=silent" and "quiet" options.
    GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0"
    
    # Add "console serial" to GRUB_TERMINAL.
    GRUB_TERMINAL="console serial"
    
    # Set the GRUB_SERIAL_COMMAND variable.
    
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    
    /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Enregistrez votre système SUSE Linux Enterprise pour lui permettre de télécharger les mises à jour et d’installer des packages.

  4. Mettez à jour le système avec les derniers correctifs :

    sudo zypper update
    
  5. Installez l’agent Linux Azure (waagent) et cloud-init :

    sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64  (SLES 15 SP2)
    sudo zypper refresh
    sudo zypper install python-azure-agent
    sudo zypper install cloud-init
    
  6. Activez waagent et cloud-init au démarrage :

    sudo systemctl enable  waagent
    sudo systemctl enable cloud-init-local.service
    sudo systemctl enable cloud-init.service
    sudo systemctl enable cloud-config.service
    sudo systemctl enable cloud-final.service
    sudo systemctl daemon-reload
    sudo cloud-init clean
    
  7. Mettez à jour la configuration de cloud-init :

    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    
    EOF
    
    sudo cat <<EOF | sudo tee  /etc/cloud/cloud.cfg.d/05_logging.cfg
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
    # Make sure mounts and disk_setup are in the init stage:
    echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
  8. Si vous voulez monter, formater et créer une partition d’échange, une option consiste à passer une configuration cloud-init chaque fois que vous créez une machine virtuelle.

    Une autre option est d’utiliser une directive cloud-init dans l’image pour configurer l’espace d’échange chaque fois que la machine virtuelle est créée :

    cat  <<EOF | sudo tee -a /etc/systemd/system.conf
    'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"'
    EOF
    
    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg
    #cloud-config
    # Generated by Azure cloud image build
    disk_setup:
      ephemeral0:
        table_type: mbr
        layout: [66, [33, 82]]
        overwrite: True
    fs_setup:
      - device: ephemeral0.1
        filesystem: ext4
      - device: ephemeral0.2
        filesystem: swap
    mounts:
      - ["ephemeral0.1", "/mnt"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  9. Auparavant, l’agent Linux Azure était utilisé pour configurer automatiquement un espace d’échange en utilisant le disque de ressources local attaché à la machine virtuelle après le provisionnement de celle-ci sur Azure. Comme cloud-init se charge désormais de cette étape, vous ne devez pas utiliser l’agent Linux Azure pour formater le disque de ressources ou pour créer le fichier d’échange. Utilisez ces commandes pour modifier /etc/waagent.conf de façon appropriée :

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    

    Remarque

    Si vous utilisez une version de cloud-init antérieure à 21.2, vérifiez que le module udf est activé. La suppression ou la désactivation de ce module entraînera un échec du provisionnement ou du démarrage. Cloud-init version 21.2 ou ultérieure supprime l’exigence de la fonction définie par l’utilisateur (UDF).

  10. Vérifiez que le fichier /etc/fstab référence le disque en utilisant son UUID (by-uuid).

  11. Supprimez les règles udev et les fichiers de configuration de la carte réseau afin d’éviter la génération de règles statiques pour les interfaces Ethernet. Ces règles provoquent des problèmes quand vous clonez une machine virtuelle dans Microsoft Azure ou Hyper-V.

    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules
    sudo rm -f /etc/sysconfig/network/ifcfg-eth*
    
  12. Nous vous recommandons de modifier le fichier /etc/sysconfig/network/dhcp et de changer le paramètre DHCLIENT_SET_HOSTNAME comme suit :

    DHCLIENT_SET_HOSTNAME="no"
    
  13. Dans le fichier /etc/sudoers, placez en commentaire ou supprimez les lignes suivantes si elles sont présentes :

    Defaults targetpw   # Ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this setting together with 'Defaults targetpw'!
    
  14. Vérifiez que le serveur Secure Shell (SSH) est installé et configuré pour être lancé au démarrage :

    sudo systemctl enable sshd
    
  15. Nettoyez l’étape cloud-init :

    sudo cloud-init clean --seed --logs
    
  16. Exécutez les commandes suivantes pour déprovisionner la machine virtuelle et pour la préparer au provisionnement sur Azure.

    Si vous migrez une machine virtuelle spécifique et que vous ne voulez pas créer une image généralisée, ignorez l’étape de déprovisionnement.

    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    sudo rm -f ~/.bash_history
    

Préparation d’openSUSE 15.2+

  1. Dans le panneau central du Gestionnaire Hyper-V, sélectionnez la machine virtuelle.

  2. Sélectionnez Se connecter afin d’ouvrir la fenêtre pour la machine virtuelle.

  3. Dans un terminal, exécutez la commande zypper lr. Si cette commande retourne un résultat similaire à l’exemple suivant, c’est que les dépôts sont configurés comme attendu et qu’aucune modification n’est nécessaire. (Les numéros de version peuvent varier.)

    # Alias Nom activé Actualiser
    1 Cloud:Tools_15.2 Cloud:Tools_15.2 Oui Oui
    2 openSUSE_15.2_OSS openSUSE_15.2_OSS Oui Oui
    3 openSUSE_15.2_Updates openSUSE_15.2_Updates Oui Oui

    Si la commande retourne « Aucun dépôt défini », utilisez les commandes suivantes pour ajouter ces dépôts :

    sudo zypper ar -f http://download.opensuse.org/repositories/Cloud:Tools/openSUSE_15.2 Cloud:Tools_15.2
    sudo zypper ar -f https://download.opensuse.org/distribution/15.2/repo/oss openSUSE_15.2_OSS
    sudo zypper ar -f http://download.opensuse.org/update/15.2 openSUSE_15.2_Updates
    

    Vous pouvez alors vérifier que ces dépôts ont été ajoutés en réexécutant la commande zypper lr. Si un des dépôts de mise à jour concernés n’est pas activé, activez-le en utilisant la commande suivante :

    sudo zypper mr -e [NUMBER OF REPOSITORY]
    
  4. Mettez à jour le noyau vers la dernière version disponible :

    sudo zypper up kernel-default
    

    Vous pouvez aussi mettre à jour le système d’exploitation avec les derniers correctifs :

    sudo zypper update
    
  5. Installez l'agent Linux Azure :

    sudo zypper install WALinuxAgent
    
  6. Modifiez la ligne de démarrage du noyau dans votre configuration GRUB pour y inclure d’autres paramètres de noyau pour Azure. Pour cela, ouvrez le fichier /boot/grub/menu.lst dans un éditeur de texte et vérifiez que le noyau par défaut inclut les paramètres suivants :

     console=ttyS0 earlyprintk=ttyS0
    

    Cette option garantit que tous les messages de la console sont envoyés vers le premier port série, ce qui peut faciliter la tâche du support Azure pour déboguer les problèmes. Supprimez également les paramètres suivants de la ligne de démarrage du noyau (s'ils sont présents) :

     libata.atapi_enabled=0 reserve=0x1f0,0x8
    
  7. Nous vous recommandons de modifier le fichier /etc/sysconfig/network/dhcp et de changer le paramètre DHCLIENT_SET_HOSTNAME en lui affectant la valeur suivante :

     DHCLIENT_SET_HOSTNAME="no"
    
  8. Dans le fichier /etc/sudoers, placez en commentaire ou supprimez les lignes suivantes si elles sont présentes. Il s’agit d’une étape importante.

    Defaults targetpw   # ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!
    
  9. Vérifiez que le serveur SSH est installé et configuré pour démarrer au moment prévu.

  10. Ne créez pas d’espace d’échange sur le disque du système d’exploitation.

    L’agent Linux Azure peut configurer automatiquement un espace d’échange en utilisant le disque local de ressources qui est attaché à la machine virtuelle après le provisionnement sur Azure. Le disque de ressources local est un disque temporaire, et il est vidé quand la machine virtuelle est déprovisionnée.

    Après avoir installé l’agent Linux Azure, modifiez comme suit les paramètres dans le fichier /etc/waagent.conf :

    ResourceDisk.Format=n
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=n
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set the size to whatever you need it to be.
    
  11. Vérifiez que l’agent Linux Azure est exécuté au démarrage :

    sudo systemctl enable waagent.service
    
  12. Exécutez les commandes suivantes pour déprovisionner la machine virtuelle et pour la préparer au provisionnement sur Azure.

    Si vous migrez une machine virtuelle spécifique et que vous ne voulez pas créer une image généralisée, ignorez l’étape de déprovisionnement.

        sudo rm -f ~/.bash_history # Remove current user history
        sudo rm -rf /var/lib/waagent/
        sudo rm -f /var/log/waagent.log
        sudo waagent -force -deprovision+user
        sudo rm -f ~/.bash_history # Remove root user history
        sudo export HISTSIZE=0
    
  13. Sélectionnez Action>Arrêter dans le Gestionnaire Hyper-V.

Étapes suivantes

Vous êtes maintenant prêt à utiliser votre disque dur virtuel SUSE Linux pour créer des machines virtuelles dans Azure. S’il s’agit de votre premier chargement du fichier .vhd sur Azure, consultez Créer une machine virtuelle Linux à partir d’un disque personnalisé.