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 consiste à appliquer les données utilisateur. Toutefois, 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
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
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
Enregistrez votre système SUSE Linux Enterprise pour lui permettre de télécharger les mises à jour et d’installer des packages.
Mettez à jour le système avec les derniers correctifs :
sudo zypper update
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
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
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
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
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).Vérifiez que le fichier /etc/fstab référence le disque en utilisant son UUID (
by-uuid
).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*
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"
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'!
Vérifiez que le serveur Secure Shell (SSH) est installé et configuré pour être lancé au démarrage :
sudo systemctl enable sshd
Nettoyez l’étape cloud-init :
sudo cloud-init clean --seed --logs
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.4+
Dans le panneau central du Gestionnaire Hyper-V, sélectionnez la machine virtuelle.
Sélectionnez Se connecter afin d’ouvrir la fenêtre pour la machine virtuelle.
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 Enabled Vérification GPG Refresh 1 Cloud :Tools_15.4 Cloud :Tools-> Oui (r ) Oui Oui 2 openSUSE_stable_OSS openSUSE_st-> Oui (r ) Oui Oui 3 openSUSE_stable_Updates openSUSE_st-> Oui (r ) Oui Oui Si le message « Aucun référentiel défini » apparaît à partir de la commande
zypper lr
, les référentiels doivent être ajoutés manuellement.Voici des exemples de commandes d’ajout de ces référentiels (les versions et les liens peuvent varier) :
sudo zypper ar -f https://download.opensuse.org/update/openSUSE-stable openSUSE_stable_Updates sudo zypper ar -f https://download.opensuse.org/repositories/Cloud:/Tools/15.4 Cloud:Tools_15.4 sudo zypper ar -f https://download.opensuse.org/distribution/openSUSE-stable/repo/oss openSUSE_stable_OSS
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]
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
Installez l'agent Linux Azure :
sudo zypper install WALinuxAgent
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
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"
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'!
Vérifiez que le serveur SSH est installé et configuré pour démarrer au moment prévu.
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.
Vérifiez que l’agent Linux Azure est exécuté au démarrage :
sudo systemctl enable waagent.service
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
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é.