Installer l'environnement invité


Cette page explique comment installer manuellement l'environnement invité sur des instances de machines virtuelles (VM). L'environnement invité est un ensemble de scripts, de daemons et de binaires dont les instances ont besoin pour s'exécuter sur Compute Engine. Pour en savoir plus, consultez Environnement invité.

Dans la plupart des cas, si vous utilisez des images d'OS publiques fournies par Google, l'environnement invité est automatiquement inclus. Pour obtenir la liste complète des images d'OS qui incluent automatiquement l'environnement invité, consultez Détails des systèmes d'exploitation.

Si l'environnement invité n'est pas installé ou est obsolète, installez-le ou mettez-le à jour. Pour identifier ces scénarios, consultez Quand installer ou mettre à jour l'environnement invité.

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification permet de valider votre identité pour accéder aux services et aux API Google Cloud . Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine en sélectionnant l'une des options suivantes :

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :

      gcloud init

      Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

    2. Set a default region and zone.

Quand installer ou mettre à jour l'environnement invité

Dans la plupart des cas, vous n'avez pas besoin d'installer ni de mettre à jour manuellement l'environnement invité. Consultez les sections suivantes pour savoir quand vous devrez peut-être installer ou mettre à jour manuellement l'environnement invité.

Vérifier la configuration requise pour l'installation

Avant d'installer l'environnement invité, suivez la procédure Valider l'environnement invité pour vérifier si celui-ci est en cours d'exécution sur votre instance. Si l'environnement invité est disponible sur votre instance, mais qu'il est obsolète, mettez-le à jour.

Vous devrez peut-être installer l'environnement invité dans les cas suivants :

  • L'image d'OS fournie par Google dont vous avez besoin n'a pas l'environnement invité installé.

  • Vous importez une image personnalisée ou un disque virtuel dans Compute Engine, et vous choisissez d'empêcher l'installation automatique de l'environnement invité.

    Lorsque vous importez des disques virtuels ou des images personnalisées, vous pouvez autoriser Compute Engine à installer l'environnement invité pour vous. Toutefois, si vous décidez de ne pas installer l'environnement invité pendant le processus d'importation, vous devez l'installer manuellement.

  • Vous migrez des VM vers Compute Engine à l'aide de Migrate to Virtual Machines.

Pour installer l'environnement invité, consultez la section Méthodes d'installation.

Vérifier les conditions requises pour la mise à jour

Vous devrez peut-être mettre à jour l'environnement invité dans les situations suivantes :

Pour mettre à jour l'environnement invité, consultez Mettre à jour l'environnement invité.

Méthodes d'installation

Vous pouvez installer l'environnement invité de plusieurs façons. Choisissez l'une des options suivantes :

Systèmes d'exploitation compatibles

Vous pouvez installer ou mettre à jour l'environnement invité sur les VM qui utilisent des versions d'image d'OS dans le cycle de vie de disponibilité générale (GA) ou dans la phase d'assistance étendue du cycle de vie.

Pour consulter la liste des versions d'images d'OS et leur phase du cycle de vie sur Compute Engine, consultez Détails des systèmes d'exploitation.

Limites

Vous ne pouvez pas installer les environnements invités manuellement ni à l'aide de l'outil d'importation pour les systèmes d'exploitation Fedora CoreOS et Container-Optimized (COS). Pour COS, Google recommande d'utiliser les images publiques fournies par Google, qui incluent l'environnement invité en tant que composant principal.

Installer l'environnement invité

Pour installer manuellement l'environnement invité, sélectionnez l'une des méthodes suivantes, selon votre capacité à vous connecter à l'instance :

Installer l'environnement invité sur place

Si vous pouvez vous connecter via SSH à l'instance cible, installez l'environnement invité à l'aide de cette méthode. Si cela n'est pas possible, installez l'environnement invité en clonant son disque de démarrage et en utilisant un script de démarrage.

Si vous êtes en mesure de vous connecter en SSH à l'aide d'un mot de passe, cette procédure est très utile pour les images importées. Elle vous permet également de réinstaller l'environnement invité si vous disposez d'au moins un compte utilisateur avec une authentification SSH basée sur des clés.

CentOS/RHEL/Rocky

  1. Vérifiez que la version de votre système d'exploitation est compatible.
  2. Identifiez la version de CentOS/RHEL/Rocky Linux. Créez ensuite le fichier du dépôt source, /etc/yum.repos.d/google-cloud.repo :

    eval $(grep VERSION_ID /etc/os-release)
    sudo tee /etc/yum.repos.d/google-cloud.repo << EOM
    [google-compute-engine]
    name=Google Compute Engine
    baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
          https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  3. Mettez à jour les listes de packages :

    sudo yum makecache
    sudo yum updateinfo
    
  4. Installez les packages de l'environnement invité :

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. Redémarrez l'instance. Ensuite, inspectez son journal de console pour vous assurer que l'environnement invité se charge au démarrage.

  6. Connectez-vous à l'instance à l'aide de SSH pour vérifier. Pour obtenir des instructions détaillées, consultez Se connecter à l'instance à l'aide de SSH.

Debian

  1. Vérifiez que la version de votre système d'exploitation est compatible.
  2. Installez la clé GPG du dépôt public :

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. Identifiez le nom de la distribution Debian. Créez ensuite le fichier de liste source /etc/apt/sources.list.d/google-cloud.list :

    eval $(grep VERSION_CODENAME /etc/os-release)
    sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM
    deb http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
    deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${VERSION_CODENAME} main
    EOM
    
  4. Mettez à jour les listes de packages :

    sudo apt update
  5. Installez les packages de l'environnement invité :

    sudo apt install -y google-cloud-packages-archive-keyring
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. Redémarrez l'instance. Ensuite, inspectez son journal de console pour vous assurer que l'environnement invité se charge au démarrage.

  7. Connectez-vous à l'instance à l'aide de SSH pour vérifier. Pour obtenir des instructions détaillées, consultez Se connecter à l'instance à l'aide de SSH.

Ubuntu

  1. Vérifiez que la version de votre système d'exploitation est compatible.

  2. Activez le dépôt Universe. Canonical publie des packages pour son environnement invité dans le dépôt Universe.

    sudo apt-add-repository universe
  3. Mettez à jour les listes de packages :

    sudo apt update
  4. Installez les packages de l'environnement invité :

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. Redémarrez l'instance. Ensuite, inspectez son journal de console pour vous assurer que l'environnement invité se charge au démarrage.

  6. Connectez-vous à l'instance à l'aide de SSH pour vérifier. Pour obtenir des instructions détaillées, consultez Se connecter à l'instance à l'aide de SSH.

SLES

  1. Vérifiez que la version de votre système d'exploitation est compatible.

  2. Activez le Public Cloud Module.

    product=$(sudo SUSEConnect --list-extensions | grep -o "sle-module-public-cloud.*")
    [[ -n "$product" ]] && sudo SUSEConnect -p "$product"
    
  3. Mettez à jour les listes de packages :

    sudo zypper refresh
  4. Installez les packages de l'environnement invité :

    sudo zypper install -y google-guest-{agent,configs,oslogin} \
    google-osconfig-agent
    sudo systemctl enable /usr/lib/systemd/system/google-*
    
  5. Redémarrez l'instance. Ensuite, inspectez son journal de console pour vous assurer que l'environnement invité se charge au démarrage.

  6. Connectez-vous à l'instance à l'aide de SSH pour vérifier. Pour obtenir des instructions détaillées, consultez Se connecter à l'instance à l'aide de SSH.

Windows

Avant de commencer, vérifiez que la version de votre système d'exploitation est compatible.

Pour installer l'environnement invité Windows, exécutez les commandes suivantes dans une invite PowerShell (version 3.0 ou supérieure) avec élévation de privilèges. La commande Invoke-WebRequest nécessite PowerShell version 3.0 ou ultérieure.

  1. Téléchargez et installez GooGet.

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
    Invoke-WebRequest https://github.com/google/googet/releases/download/v2.18.3/googet.exe -OutFile $env:temp\googet.exe;
    & "$env:temp\googet.exe" -root C:\ProgramData\GooGet -noconfirm install -sources `
    https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable googet;
    Remove-Item "$env:temp\googet.exe"
    

    Pendant l'installation, GooGet ajoute du contenu à l'environnement système. Une fois l'installation terminée, lancez une nouvelle console PowerShell. Vous pouvez également indiquer le chemin d'accès complet au fichier googet.exe (C:\ProgramData\GooGet\googet.exe).

  2. Ouvrez une nouvelle console et ajoutez le dépôt google-compute-engine-stable.

    googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
  3. Installez les packages de base de l'environnement invité Windows.

    googet -noconfirm install google-compute-engine-windows `
    google-compute-engine-sysprep google-compute-engine-metadata-scripts `
    google-compute-engine-vss google-osconfig-agent
    
  4. Installez le package facultatif de l'environnement invité Windows.

    googet -noconfirm install google-compute-engine-auto-updater

    Exécuter la commande googet.

    Pour afficher les packages disponibles, exécutez la commande googet available.

    Pour afficher les packages installés, exécutez la commande googet installed.

    Pour passer à la dernière version du package, exécutez la commande googet update.

    Pour afficher d'autres commandes, exécutez googet help.

Cloner le disque de démarrage et utiliser le script de démarrage

Si vous ne pouvez pas vous connecter à une instance pour installer manuellement l'environnement invité, installez-le à l'aide de cette procédure, qui inclut les étapes suivantes que vous pouvez effectuer dans la console Google Cloud ou Cloud Shell.

Cette méthode ne s'applique qu'aux distributions Linux. Pour Windows, choisissez l’une des deux autres méthodes d’installation.

Utilisez Cloud Shell pour exécuter cette procédure. Pour exécuter cette procédure si vous n'utilisez pas Cloud Shell, installez le processeur JSON de ligne de commande jq. Ce processeur filtre la sortie de gcloud CLI. jq est préinstallé dans Cloud Shell.

CentOS/RHEL/Rocky

  1. Vérifiez que la version de votre système d'exploitation est compatible.

  2. Créez une instance qui servira d'instance de secours. Nommez cette instance rescue. Cette instance de secours n'a pas besoin d'exécuter la même version de système d'exploitation Linux que l'instance problématique. Cet exemple utilise Debian 9 sur l’instance de secours.

  3. Arrêtez l'instance problématique, puis créez une copie de son disque de démarrage.

    1. Définissez un nom de variable pour l'instance problématique. Cette variable simplifie le référencement de l'instance lors des étapes suivantes.

      export PROB_INSTANCE_NAME=VM_NAME

      Remplacez VM_NAME par le nom de l'instance problématique.

    2. Arrêtez l'instance problématique :

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenez le nom du disque de démarrage associé à l'instance qui pose problème.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Créez un instantané du disque de démarrage.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Créez un disque à partir de l'instantané :

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Supprimez l'instantané :

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Associez le nouveau disque à l'instance de secours, puis installez son volume racine. Comme cette procédure n'associe qu'un disque supplémentaire, l'identifiant d'appareil du nouveau disque est /dev/sdb. CentOS/RHEL/Rocky Linux utilise par défaut le premier volume d'un disque en tant que volume racine. L'identifiant de volume doit donc correspondre à /dev/sdb1. Pour les configurations personnalisées, déterminez l'identifiant de volume à l'aide de lsblk.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Connectez-vous en SSH à l'instance de secours :

    gcloud compute ssh rescue
  6. Exécutez les étapes suivantes sur l'instance de secours.

    1. Installez le volume racine du nouveau disque.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount -o nouuid "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Créez le script rc.local.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for CentOS/RHEL/Rocky Linux =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL/Rocky Linux version..."
      eval $(grep VERSION_ID /etc/os-release)
      if [[ -z $VERSION_ID ]]; then
        echo "ERROR: Could not determine version of CentOS/RHEL/Rocky Linux."
        exit 1
      fi
      echo "Updating repo file..."
      tee "/etc/yum.repos.d/google-cloud.repo" << EOM
      [google-compute-engine]
      name=Google Compute Engine
      baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
      enabled=1
      gpgcheck=1
      repo_gpgcheck=0
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
      https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      EOM
      echo "Running yum makecache..."
      yum makecache
      echo "Running yum updateinfo..."
      yum updateinfo
      echo "Running yum install google-compute-engine..."
      yum install -y google-compute-engine
      rpm -q google-compute-engine
      if [[ $? -ne 0 ]]; then
        echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.d/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
        echo "Restoring a previous rc.local script."
        mv "/etc/moved-rc.local" "/etc/rc.d/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Sauvegardez le fichier rc.local existant, déplacez le script rc.local temporaire sur le disque monté et définissez les autorisations de sorte que le script temporaire soit exécutable au démarrage. Le script temporaire remplace le script d'origine une fois l'amorçage terminé. Pour ce faire, exécutez la commande suivante :

      if [ -f "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local" ]; then
        sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local" \
        "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      
    4. Désinstallez le volume racine du nouveau disque.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    5. Quittez la session SSH sur l'instance de secours.

  7. Dissociez le nouveau disque de l'instance de secours.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Créez une instance qui servira d'instance de remplacement. Lors de la création de celle-ci, spécifiez le nouveau disque en tant que disque de démarrage. Vous pouvez créer l'instance de remplacement à l'aide de la console Google Cloud  :

    1. Dans la console Google Cloud , accédez à la page Instances de VM.

      Accéder à la page Instances de VM

    2. Cliquez sur l'instance problématique, puis sur Créer une instance similaire.

    3. Spécifiez un nom pour l'instance de remplacement. Dans la section Disque de démarrage, cliquez sur Modifier, puis sur Disques existants. Sélectionnez le nouveau disque.

    4. Cliquez sur Créer. L'instance de remplacement démarre automatiquement après sa création.

    Au démarrage de l'instance de remplacement, le script temporaire rc.local s'exécute et installe l'environnement invité. Pour surveiller la progression du script, examinez les lignes émises par le script temporaire rc.local dans les journaux de la console. Pour afficher les journaux, exécutez la commande suivante :

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Remplacez REPLACEMENT_VM_NAME par le nom que vous avez attribué à l'instance de remplacement.

    L'instance de remplacement redémarre automatiquement à la fin du script temporaire rc.local. Lors du deuxième redémarrage, vous pouvez inspecter le journal de la console pour vous assurer que l'environnement invité se charge bien.

  9. Vérifiez que vous pouvez vous connecter à l'instance via SSH.

    Une fois que vous avez vérifié que l'instance de remplacement fonctionne, vous pouvez arrêter ou supprimer l'instance problématique.

Debian

  1. Vérifiez que la version de votre système d'exploitation est compatible.

  2. Créez une instance qui servira d'instance de secours. Nommez cette instance rescue. Cette instance de secours n'a pas besoin d'exécuter la même version de système d'exploitation Linux que l'instance problématique. Cet exemple utilise Debian 9 sur l’instance de secours.

  3. Arrêtez l'instance problématique, puis créez une copie de son disque de démarrage.

    1. Définissez un nom de variable pour l'instance problématique. Cette variable simplifie le référencement de l'instance lors des étapes suivantes.

      export PROB_INSTANCE_NAME=VM_NAME

      Remplacez VM_NAME par le nom de l'instance problématique.

    2. Arrêtez l'instance problématique :

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenez le nom du disque de démarrage associé à l'instance qui pose problème.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Créez un instantané du disque de démarrage.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Créez un disque à partir de l'instantané :

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Supprimez l'instantané :

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Associez le nouveau disque à l'instance de secours, puis installez son volume racine. Comme cette procédure n'associe qu'un disque supplémentaire, l'identifiant d'appareil du nouveau disque est /dev/sdb. Debian utilise par défaut le premier volume de son disque en tant que volume racine. L'identifiant de volume doit donc correspondre à /dev/sdb1. Pour les configurations personnalisées, déterminez l'identifiant de volume à l'aide de lsblk.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Connectez-vous en SSH à l'instance de secours :

    gcloud compute ssh rescue
  6. Exécutez les étapes suivantes sur l'instance de secours.

    1. Installez le volume racine du nouveau disque.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Créez le script rc.local.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for Debian =="
      export DEBIAN_FRONTEND=noninteractive
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      eval $(grep VERSION_CODENAME /etc/os-release)
      if [[ -z $VERSION_CODENAME ]]; then
       echo "ERROR: Could not determine Debian version."
       exit 1
      fi
      echo "Adding GPG key for Google cloud repo."
      curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating repo file..."
      tee "/etc/apt/sources.list.d/google-cloud.list" << EOM
      deb http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
      deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${VERSION_CODENAME} main
      EOM
      echo "Running apt update..."
      apt update
      echo "Installing packages..."
      for pkg in google-cloud-packages-archive-keyring google-compute-engine; do
       echo "Running apt install ${pkg}..."
       apt install -y ${pkg}
       if [[ $? -ne 0 ]]; then
          echo "ERROR: Failed to install ${pkg}."
       fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
       echo "Restoring a previous rc.local script."
       mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Sauvegardez le fichier rc.local existant, déplacez le script rc.local temporaire sur le disque monté et définissez les autorisations de sorte que le script temporaire soit exécutable au démarrage. Le script temporaire remplace le script d'origine une fois l'amorçage terminé. Pour ce faire, exécutez la commande suivante :

      if [[ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]]; then
         sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
         "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      
    4. Désinstallez le volume racine du nouveau disque.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Quittez la session SSH sur l'instance de secours.

  7. Dissociez le nouveau disque de l'instance de secours.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Créez une instance qui servira d'instance de remplacement. Lors de la création de celle-ci, spécifiez le nouveau disque en tant que disque de démarrage. Vous pouvez créer l'instance de remplacement à l'aide de la console Google Cloud  :

    1. Dans la console Google Cloud , accédez à la page Instances de VM.

      Accéder à la page Instances de VM

    2. Cliquez sur l'instance problématique, puis sur Créer une instance similaire.

    3. Spécifiez un nom pour l'instance de remplacement. Dans la section Disque de démarrage, cliquez sur Modifier, puis sur Disques existants. Sélectionnez le nouveau disque.

    4. Cliquez sur Créer. L'instance de remplacement démarre automatiquement après sa création.

    Au démarrage de l'instance de remplacement, le script temporaire rc.local s'exécute et installe l'environnement invité. Pour surveiller la progression du script, examinez les lignes émises par le script temporaire rc.local dans les journaux de la console. Pour afficher les journaux, exécutez la commande suivante :

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Remplacez REPLACEMENT_VM_NAME par le nom que vous avez attribué à l'instance de remplacement.

    L'instance de remplacement redémarre automatiquement à la fin du script temporaire rc.local. Lors du deuxième redémarrage, vous pouvez inspecter le journal de la console pour vous assurer que l'environnement invité se charge bien.

  9. Vérifiez que vous pouvez vous connecter à l'instance via SSH.

    Une fois que vous avez vérifié que l'instance de remplacement fonctionne, vous pouvez arrêter ou supprimer l'instance problématique.

Ubuntu

  1. Vérifiez que la version de votre système d'exploitation est compatible.

  2. Créez une instance qui servira d'instance de secours. Nommez cette instance rescue. Cette instance de secours n'a pas besoin d'exécuter la même version de système d'exploitation Linux que l'instance problématique. Cet exemple utilise Debian 9 sur l’instance de secours.

  3. Arrêtez l'instance problématique, puis créez une copie de son disque de démarrage.

    1. Définissez un nom de variable pour l'instance problématique. Cette variable simplifie le référencement de l'instance lors des étapes suivantes.

      export PROB_INSTANCE_NAME=VM_NAME

      Remplacez VM_NAME par le nom de l'instance problématique.

    2. Arrêtez l'instance problématique :

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenez le nom du disque de démarrage associé à l'instance qui pose problème.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Créez un instantané du disque de démarrage.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Créez un disque à partir de l'instantané :

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Supprimez l'instantané :

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Associez le nouveau disque à l'instance de secours, puis installez son volume racine. Comme cette procédure n'associe qu'un disque supplémentaire, l'identifiant d'appareil du nouveau disque est /dev/sdb. Par défaut, Ubuntu nomme son volume racine 1. L'identifiant de volume doit donc correspondre à /dev/sdb1. Pour les configurations personnalisées, déterminez l'identifiant de volume à l'aide de lsblk.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Connectez-vous en SSH à l'instance de secours :

    gcloud compute ssh rescue
  6. Exécutez les étapes suivantes sur l'instance de secours.

    1. Installez le volume racine du nouveau disque.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Créez le script rc.local.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing a Linux guest environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Running apt update..."
      apt update
      echo "Installing packages..."
      echo "Running apt install google-compute-engine..."
      apt install -y google-compute-engine
      if [[ $? -ne 0 ]]; then
       echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
       echo "Restoring a previous rc.local script."
       mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Sauvegardez le fichier rc.local existant, déplacez le script rc.local temporaire sur le disque monté et définissez les autorisations de sorte que le script temporaire soit exécutable au démarrage. Le script temporaire remplace le script d'origine une fois le démarrage terminé. Pour ce faire, exécutez la commande suivante :

      if [[ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]]; then
         sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
         "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      
    4. Désinstallez le volume racine du nouveau disque.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Quittez la session SSH sur l'instance de secours.

  7. Dissociez le nouveau disque de l'instance de secours.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Créez une instance qui servira d'instance de remplacement. Lors de la création de celle-ci, spécifiez le nouveau disque en tant que disque de démarrage. Vous pouvez créer l'instance de remplacement à l'aide de la console Google Cloud  :

    1. Dans la console Google Cloud , accédez à la page Instances de VM.

      Accéder à la page Instances de VM

    2. Cliquez sur l'instance problématique, puis sur Créer une instance similaire.

    3. Spécifiez un nom pour l'instance de remplacement. Dans la section Disque de démarrage, cliquez sur Modifier, puis sur Disques existants. Sélectionnez le nouveau disque.

    4. Cliquez sur Créer. L'instance de remplacement démarre automatiquement après sa création.

    Au démarrage de l'instance de remplacement, le script temporaire rc.local s'exécute et installe l'environnement invité. Pour surveiller la progression du script, examinez les lignes émises par le script temporaire rc.local dans les journaux de la console. Pour afficher les journaux, exécutez la commande suivante :

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Remplacez REPLACEMENT_VM_NAME par le nom que vous avez attribué à l'instance de remplacement.

    L'instance de remplacement redémarre automatiquement à la fin du script temporaire rc.local. Lors du deuxième redémarrage, vous pouvez inspecter le journal de la console pour vous assurer que l'environnement invité se charge bien.

  9. Vérifiez que vous pouvez vous connecter à l'instance via SSH.

    Une fois que vous avez vérifié que l'instance de remplacement fonctionne, vous pouvez arrêter ou supprimer l'instance problématique.

Mettre à jour l'environnement invité

Si vous recevez un message indiquant que l'environnement invité est obsolète, mettez à jour les packages pour votre système d'exploitation comme suit :

CentOS/RHEL/Rocky

Pour mettre à jour les systèmes d'exploitation CentOS, RHEL et Rocky Linux, exécutez les commandes suivantes :

sudo yum makecache
sudo yum install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Debian

Pour mettre à jour les systèmes d'exploitation Debian, exécutez les commandes suivantes :

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Ubuntu

Pour mettre à jour les systèmes d'exploitation Ubuntu, exécutez les commandes suivantes :

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

SLES

Pour mettre à jour les systèmes d'exploitation SLES, exécutez les commandes suivantes :

sudo zypper refresh
sudo zypper install google-guest-{agent,configs,oslogin} \
google-osconfig-agent

Windows

Pour mettre à jour les systèmes d'exploitation Windows, exécutez la commande suivante :

googet update

Valider l'environnement invité

Vous pouvez vérifier si un environnement invité est installé en inspectant les journaux système émis dans la console au démarrage d'une instance, ou en listant les packages installés lorsque vous êtes connecté à l'instance.

Afficher les journaux de la console attendus pour l'environnement invité

Ce tableau récapitule la sortie attendue dans les journaux de la console émis au démarrage d'instances exécutant des environnements invités fonctionnels.

Système d'exploitation Gestion des services Résultat attendu
CentOS/RHEL/Rocky Linux
Debian
Ubuntu
SLES
Container-Optimized OS 89 et versions ultérieures
systemd
google_guest_agent: GCE Agent Started (version YYYYMMDD.NN)
google_metadata_script_runner: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)
Container-Optimized OS 85 et versions antérieures systemd
Started Google Compute Engine Accounts Daemon
Started Google Compute Engine Network Daemon
Started Google Compute Engine Clock Skew Daemon
Started Google Compute Engine Instance Setup
Started Google Compute Engine Startup Scripts
Started Google Compute Engine Shutdown Scripts
Windows
GCEGuestAgent: GCE Agent Started (version YYYYMMDD.NN)
GCEMetadataScripts: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)

Pour afficher les journaux de la console associés à une instance, procédez comme suit.

Console

  1. Dans la console Google Cloud , accédez à la page Instances de VM.

    Accéder à la page Instances de VM

    1. Sélectionnez l'instance que vous devez examiner.
    2. Redémarrez ou réinitialisez l'instance.
    3. Dans la section Journaux, cliquez sur Port série 1 (console).
    4. Recherchez la sortie attendue dans le tableau qui précède ces étapes.

gcloud

  1. Redémarrez ou réinitialisez l'instance.
  2. Utilisez la sous-commande gcloud compute instances get-serial-port-output pour vous connecter à l'aide de Google Cloud CLI. Exemple :

    gcloud compute instances get-serial-port-output VM_NAME

    Remplacez VM_NAME par le nom de l'instance que vous devez examiner.

  3. Recherchez la sortie attendue dans le tableau qui précède ces étapes.

Afficher les services chargés par version du système d'exploitation

Ce tableau récapitule les services qui doivent être chargés sur des instances exécutant des environnements invités fonctionnels. Vous devez exécuter la commande permettant de lister les services après vous être connecté à l'instance. Vous ne pouvez donc effectuer cette vérification que si vous avez accès à l'instance.

Système d'exploitation Commande permettant de répertorier les services Résultat attendu
CentOS/RHEL/Rocky Linux
Debian
sudo systemctl list-unit-files \
| grep google | grep enabled
google-disk-expand.service             enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Ubuntu
sudo systemctl list-unit-files \
| grep google | grep enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Container-Optimized OS
sudo systemctl list-unit-files \
| grep google
var-lib-google.mount                   disabled
google-guest-agent.service             disabled
google-osconfig-agent.service          disabled
google-osconfig-init.service           disabled
google-oslogin-cache.service           static
google-shutdown-scripts.service        disabled
google-startup-scripts.service         disabled
var-lib-google-remount.service         static
google-oslogin-cache.timer             disabled 
SLES 12+
sudo systemctl list-unit-files \
| grep google | grep enabled
google-guest-agent.service              enabled
google-osconfig-agent.service           enabled
google-shutdown-scripts.service         enabled
google-startup-scripts.service          enabled
google-oslogin-cache.timer              enabled 
Windows
Get-Service GCEAgent
Get-ScheduledTask GCEStartup
Running    GCEAgent   GCEAgent
\          GCEStartup Ready

Afficher les packages installés par version du système d'exploitation

Ce tableau récapitule les packages qui doivent être installés sur des instances exécutant des environnements invités fonctionnels. Vous devez exécuter la commande permettant de lister les packages installés après vous être connecté à l'instance. Vous ne pouvez donc effectuer cette vérification que si vous avez accès à l'instance.

Pour en savoir plus sur ces packages, consultez Composants de l'environnement invité.

Système d'exploitation Commande permettant de répertorier les packages Résultat attendu
CentOS/RHEL/Rocky Linux
rpm -qa --queryformat '%{NAME}\n' \
| grep -iE 'google|gce'
google-osconfig-agent
google-compute-engine-oslogin
google-guest-agent
gce-disk-expand
google-cloud-sdk
google-compute-engine
Debian
apt list --installed \
| grep -i google
gce-disk-expand
google-cloud-packages-archive-keyring
google-cloud-sdk
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
Ubuntu
apt list --installed \
| grep -i google
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
SUSE (SLES)
rpm -qa --queryformat '%{NAME}\n' \
| grep -i google
google-guest-configs
google-osconfig-agent
google-guest-oslogin
google-guest-agent
Windows
googet installed
certgen
googet
google-compute-engine-auto-updater
google-compute-engine-driver-gga
google-compute-engine-driver-netkvm
google-compute-engine-driver-pvpanic
google-compute-engine-driver-vioscsi
google-compute-engine-metadata-scripts
google-compute-engine-powershell
google-compute-engine-sysprep
google-compute-engine-vss
google-compute-engine-windows
google-osconfig-agent

Étapes suivantes