Partager via


Préparation d’une machine virtuelle Linux Oracle pour Azure

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

Cet article suppose que vous avez déjà installé un système d'exploitation Oracle Linux sur un disque dur virtuel (VHD). Plusieurs outils permettent de créer des fichiers .vhd. Citons par exemple une solution de virtualisation comme Hyper-V. Pour obtenir des instructions, consultez Installer le rôle Hyper-V et configurer une machine virtuelle.

Notes générales d’installation d’Oracle Linux

  • Pour obtenir d’autres conseils sur la préparation de Linux pour Azure, consultez les notes générales sur l’installation de Linux.
  • Hyper-V et Azure prennent en charge Oracle Linux avec le noyau d’entreprise UEK ou le noyau compatible Red Hat.
  • Le noyau UEK2 d’Oracle n’est pas pris en charge sur Hyper-V et Azure parce qu’il ne contient pas les pilotes nécessaires.
  • Azure ne prend pas en charge le format VHDX, seulement le VHD fixe. Vous pouvez convertir le disque au format VHD en utilisant le gestionnaire Hyper-V ou la cmdlet convert-vhd.
  • La prise en charge par le noyau du montage des systèmes de fichiers à fonction définis par l’utilisateur (UDF) est requise. Au premier démarrage sur Azure, la configuration d’approvisionnement est transmise à la machine virtuelle Linux via un média au format UDF attaché à l’invité. L’agent Linux Azure doit être en mesure de monter le système de fichiers UDF pour lire sa configuration et approvisionner la machine virtuelle.
  • Quand vous installez le système Linux, nous vous recommandons d’utiliser les partitions standard plutôt que le gestionnaire de volumes logiques (LVM, Logical Volume Manager), qui constitue souvent le choix par défaut pour de nombreuses installations. Ces partitions standard évitent les conflits de noms avec des machines virtuelles clonées, notamment si un disque de système d'exploitation doit être relié à une autre machine virtuelle pour la dépanner. Vous pouvez également utiliser LVM ou RAID sur des disques de données.
  • Les versions du noyau Linux antérieures à la version 2.6.37 ne prennent pas en charge NUMA sur Hyper-V avec des machines virtuelles de taille supérieure. Ce problème affecte principalement les anciennes distributions qui utilisent le noyau Red Hat 2.6.32 en amont et a été résolu dans Oracle Linux 6.6 et ultérieur.
  • Ne configurez pas une partition d’échange sur le disque du système d’exploitation.
  • Tous les VHD sur Azure doivent avoir une taille virtuelle alignée sur 1 Mo. Lorsque vous convertissez un disque brut en disque dur virtuel, vous devez vérifier que la taille du disque brut est un multiple de 1 Mo avant la conversion. Pour plus d’informations, consultez les notes d’installation de Linux.
  • Assurez-vous que le référentiel Addons est activé. Modifiez le fichier /etc/yum.repos.d/public-yum-ol6.repo(Oracle Linux 6) ou /etc/yum.repos.d/public-yum-ol7.repo(Oracle Linux 7). Remplacez la ligne enabled=0 par enabled=1 sous [ol6_addons] ou [ol7_addons] dans ce fichier.

Oracle Linux 6.x

Important

N’oubliez pas qu’Oracle Linux 6.x est déjà en fin de vie. Oracle Linux version 6.10 a une prise en charge du cycle de vie étendu disponible, qui se termine en juillet 2024.

Vous devez suivre des étapes de configuration spécifiques dans le système d'exploitation afin que la machine virtuelle s’exécute dans Azure.

  1. Dans le volet central d’Hyper-V Manager, sélectionnez la machine virtuelle.

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

  3. Désinstallez NetworkManager :

    sudo rpm -e --nodeps NetworkManager
    

    Remarque

    Si le package n'est pas déjà installé, la commande échoue et un message d'erreur s'affiche. C’est normal.

  4. Créez un fichier nommé network in the /etc/sysconfig/ et entrez-y le texte suivant :

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Créez un fichier nommé ifcfg-eth0 in the /etc/sysconfig/network-scripts/ et entrez-y le texte suivant :

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Modifiez les règles udev pour éviter la génération de règles statiques pour les interfaces Ethernet. Ces règles peuvent poser des problèmes quand vous clonez une machine virtuelle dans Azure ou Hyper-V :

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    
  7. Assurez-vous que le service réseau se lance au démarrage :

    sudo chkconfig network on
    
  8. Installez python-pyasn1 :

    sudo yum install python-pyasn1
    
  9. Modifiez la ligne de démarrage du noyau dans votre configuration grub pour y inclure les paramètres de noyau supplémentaires pour Azure. Pour effectuer cette étape, ouvrez /boot/grub/menu.lst dans un éditeur de texte et vérifiez que le noyau comprend les paramètres suivants :

    console=ttyS0 earlyprintk=ttyS0
    

    Ce paramètre 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 résoudre les problèmes.

    En plus des étapes précédentes, nous vous recommandons de supprimer les paramètres suivants :

    rhgb quiet crashkernel=auto
    

    Le démarrage graphique et sans assistance n’est pas utile dans un environnement cloud où vous souhaitez que tous les journaux soient envoyés au port série.

    Vous pouvez laisser l’option crashkernel configurée si vous le souhaitez. Ce paramètre réduit la quantité de mémoire disponible dans la machine virtuelle de 128 Mo ou plus, ce qui peut poser problème pour les tailles de machine virtuelle plus petites.

  10. Vérifiez que le serveur SSH est installé et configuré pour démarrer au moment prévu. Ce paramètre est généralement la valeur par défaut.

  11. Installez l’agent linux Azure en exécutant la commande suivante. La version la plus récente est la 2.0.15.

    sudo yum install WALinuxAgent
    

    L’installation du package WALinuxAgent supprime les packages NetworkManager et NetworkManager-gnome si cela n’a pas déjà été fait, comme décrit à l’étape 2.

  12. 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 l’approvisionnement sur Azure. Le disque de ressources local est un disque temporaire qui peut être vidé quand la machine virtuelle est déprovisionnée. Après avoir installé l’agent Azure Linux (voir l’étape précédente), modifiez en conséquence les paramètres suivants dans le fichier /etc/waagent.conf :

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  13. Désapprovisionnez la machine virtuelle et préparez son approvisionnement sur Azure :

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
    sudo logout
    
  14. Sélectionnez Action>Arrêter dans le Gestionnaire Hyper-V. Votre disque dur virtuel Linux est alors prêt pour le téléchargement dans Azure.


Oracle Linux 7.0 et versions ultérieures

Suivez les étapes des sections suivantes si vous utilisez Oracle Linux 7.0 ou ultérieur.

Modifications dans Oracle Linux 7

La préparation d’une machine virtuelle Oracle Linux 7 pour Azure est similaire à celle pour Oracle Linux 6, mais plusieurs différences valent la peine d’être notées :

  • Azure prend en charge Oracle Linux avec le noyau de l’entreprise (UEK) ou le noyau compatible Red Hat. Nous vous recommandons d’utiliser Oracle Linux avec UEK.
  • Le package NetworkManager n’est plus en conflit avec l’agent Azure Linux. Ce package est installé par défaut et nous vous recommandons de ne pas le supprimer.
  • GRUB2 étant désormais utilisé comme programme de démarrage système (bootloader) par défaut, la procédure de modification des paramètres du noyau a donc changé. (Consultez la section « Étapes de configuration ».)
  • XFS est maintenant le système de fichiers par défaut. Vous pouvez toujours utiliser le système de fichiers ext4 si vous le souhaitez.

Étapes de configuration

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

  2. Sélectionnez Connecter afin d’ouvrir une fenêtre de console pour la machine virtuelle.

  3. Créez un fichier nommé network in the /etc/sysconfig/ et entrez-y le texte suivant :

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Créez un fichier nommé ifcfg-eth0 in the /etc/sysconfig/network-scripts/ et entrez-y le texte suivant :

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  5. Modifiez les règles udev pour éviter la génération de règles statiques pour les interfaces Ethernet. Ces règles peuvent poser des problèmes quand vous clonez une machine virtuelle dans Azure ou Hyper-V :

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. Assurez-vous que le service réseau se lance au démarrage :

    sudo chkconfig network on
    
  7. Installez le package python-pyasn1 :

    sudo yum install python3-pyasn1
    
  8. Effacez les métadonnées yum actuelles et installez toute mise à jour disponible :

    sudo yum clean all
    sudo yum -y update
    
  9. Modifiez la ligne de démarrage du noyau dans votre configuration grub pour y inclure les paramètres de noyau supplémentaires pour Azure. Pour effectuer cette étape, ouvrez /etc/default/grub dans un éditeur de texte et modifiez le paramètre GRUB_CMDLINE_LINUX. Par exemple :

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Cette modification garantit également que tous les messages de la console sont envoyés au premier port série, ce qui peut aider le support Azure à résoudre les problèmes. Il désactive également les conventions d’affectation de noms pour les cartes réseau dans Oracle Linux 7 avec le noyau UEK. Nous vous recommandons également de supprimer les paramètres suivants :

       rhgb quiet crashkernel=auto
    

    Le démarrage graphique et sans assistance n’est pas utile dans un environnement cloud où vous souhaitez que tous les journaux soient envoyés au port série.

    Vous pouvez laisser l’option crashkernel configurée si vous le souhaitez. Ce paramètre réduit la quantité de mémoire disponible dans la machine virtuelle de 128 Mo ou plus, ce qui peut poser problème pour les tailles de machine virtuelle plus petites.

  10. Quand vous avez terminé de modifier /etc/default/grub, régénérez la configuration grub :

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  11. Vérifiez que le serveur SSH est installé et configuré pour démarrer au moment prévu. Ce paramètre est généralement la valeur par défaut.

  12. Installez l’agent Azure Linux et les dépendances :

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent
    
  13. Installez cloud-init pour gérer l’approvisionnement :

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
  14. Configurez waagent pour cloud-init :

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    
    sudo 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
    
    echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    
    if [[ -f /mnt/resource/swapfile ]]; then
    echo Removing swapfile - Oracle Linux uses a swapfile by default
    swapoff /mnt/swapfile
    rm /mnt/swapfile -f
    fi
    
    echo "Add console log file"
    cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # 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
    
  15. Configuration de l’échange :

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

      Avant, l’agent Azure Linux était utilisé automatiquement pour configurer l’espace d’échange à l’aide du disque de ressources local attaché à la machine virtuelle une fois celle-ci approvisionnée sur Azure. Toutefois, cloud-init gère désormais cette étape. Vous ne devez pas utiliser l’agent Linux pour formater le disque de ressources afin de créer le fichier d’échange. Modifiez les paramètres suivants dans /etc/waagent.conf de manière appropriée :

      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
      
    2. Si vous souhaitez monter, formater et créer l’échange, vous pouvez, au choix :

      • Passer ce code en tant que configuration cloud-init chaque fois que vous créez une machine virtuelle.
      • Utiliser une directive cloud-init intégrée à l’image pour effectuer cette étape chaque fois que la machine virtuelle est créée :
      echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
      cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
      #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/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  16. Désapprovisionnez la machine virtuelle et préparez son approvisionnement sur Azure :

    sudo cloud-init clean
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    

    Remarque

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

  17. Sélectionnez Action>Arrêter dans le Gestionnaire Hyper-V. Votre disque dur virtuel Linux est alors prêt pour le téléchargement dans Azure.

Vous êtes maintenant prêt à utiliser votre .vhd Oracle 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é.