Installer l'environnement invité

Cette page explique comment installer manuellement l'environnement invité pour les instances de VM qui s'exécutent sur Compute Engine.

Dans la plupart des cas, si vous utilisez des instances de VM créées à l'aide d'images publiques fournies par Google, vous n'avez pas besoin d'installer manuellement un environnement invité.

Pour déterminer si vous devez installer manuellement l'environnement invité, reportez-vous aux indications suivantes :

Avant de commencer

Sommaire

Systèmes d'exploitation compatibles

L'installation manuelle de l'environnement invité est disponible pour les systèmes d'exploitation suivants :

  • Ubuntu 14.04 ou version ultérieure
  • CentOS 6 et 7
  • Red Hat Enterprise Linux (RHEL) 6 et 7
  • Debian 9
  • Windows Server 2019
  • Windows Server 1809 et 1803
  • Windows Server 1709
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2008 R2
  • SQL Server sur Windows Server
  • Windows Bring Your Own License (BYOL)(bêta) :
    • Windows 7
    • Windows 10

Google recommande d'utiliser l'outil d'importation pour installer l'environnement invité. Pour obtenir la liste des options d'installation, reportez-vous à la page Méthodes d'installation.

Vous ne pouvez pas installer manuellement les environnements invités pour les systèmes d'exploitation SUSE, CoreOS et Container-Optimized. Si vous avez besoin de l'un de ces systèmes d'exploitation, nous vous recommandons d'utiliser des images publiques, car toutes les images publiques intègrent un environnement invité.

Installer l'environnement invité

Méthodes d'installation

Il existe trois méthodes pour installer l'environnement invité. Choisissez l'une des options suivantes :

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 d'utilisateur avec une authentification SSH basée sur des clés.

CentOS/RHEL

  1. Assurez-vous que la version de votre système d'exploitation est compatible.
  2. Identifiez la version de CentOS/RHEL, puis créez le fichier de dépôt source /etc/yum.repos.d/google-cloud.repo :

    OS_RELEASE_FILE="/etc/redhat-release"
    if [ ! -f $OS_RELEASE_FILE ]; then
       OS_RELEASE_FILE="/etc/centos-release"
    fi
    DIST=$(cat $OS_RELEASE_FILE | grep -o '[0-9].*' | awk -F'.' '{print $1}')
    sudo tee /etc/yum.repos.d/google-cloud.repo << EOM
    [google-cloud-compute]
    name=Google Cloud Compute
    baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-compute-el${DIST}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    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é :

    declare -a PKG_LIST=(python-google-compute-engine \
    google-compute-engine-oslogin \
    google-compute-engine)
    for pkg in ${PKG_LIST[@]}; do
       sudo yum install -y $pkg
    done
    
  5. Redémarrez l'instance et inspectez son journal de console pour vous assurer que l'environnement invité se charge au démarrage.

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

Debian

  1. Assurez-vous 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, puis créez le fichier de liste source /etc/apt/sources.list.d/google-cloud.list :

    DIST=$(cat /etc/os-release | grep "VERSION=" | sed "s/\"\|(\|)\|VERSION=//g" \
    | awk '{print tolower($NF)}')
    sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM
    deb http://packages.cloud.google.com/apt google-compute-engine-${DIST}-stable main
    deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${DIST} main
    EOM
    
  4. Mettez à jour les listes de packages :

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

    declare -a PKG_LIST=(google-cloud-packages-archive-keyring \
    python-google-compute-engine \
    python3-google-compute-engine \
    google-compute-engine-oslogin \
    google-compute-engine)
    for pkg in ${PKG_LIST[@]}; do
       sudo apt install -y $pkg
    done
    
  6. Redémarrez l'instance et inspectez son journal de console pour vous assurer que l'environnement invité se charge au démarrage.

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

Ubuntu

  1. Assurez-vous 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é au sein du dépôt Universe.

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

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

    declare -a PKG_LIST=(python-google-compute-engine \
    python3-google-compute-engine \
    google-compute-engine-oslogin \
    gce-compute-image-packages)
    for pkg in ${PKG_LIST[@]}; do
       sudo apt install -y $pkg || echo "Not available: $pkg"
    done
    
  5. Redémarrez l'instance et inspectez son journal de console pour vous assurer que l'environnement invité se charge au démarrage.

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

Windows

Avant de commencer, assurez-vous 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 présentée dans les instructions ci-dessous nécessite une version de PowerShell supérieure à la version 3.0.

  1. Téléchargez et installez GooGet.

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    Invoke-WebRequest https://github.com/google/googet/releases/download/v2.13.0/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 ou indiquez 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
    
  4. Installez le package facultatif de l'environnement invité Windows.

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

    Utiliser 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 effectuer la mise à jour vers 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é, effectuez les étapes suivantes à partir de la console GCP ou de Cloud Shell.

Cette méthode n'explique que la procédure applicable aux distributions Linux. Pour Windows, choisissez l’une des deux autres méthodes d’installation.

Utilisez Cloud Shell pour exécuter cette procédure :

CentOS/RHEL

  1. Assurez-vous que la version de votre système d'exploitation est compatible.
  2. Installez la clé GPG du dépôt public :
  3. 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.

  4. 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. Cela permet de référencer plus facilement l'instance aux étapes suivantes.

      export PROB_INSTANCE_NAME=INSTANCE_NAME
      

      INSTANCE_NAME est 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"
      
  5. Associez le nouveau disque à l'instance de secours, puis installez son volume racine. Etant donné que cette procédure n'attache qu'un seul disque supplémentaire, l'identifiant d'appareil du nouveau disque est /dev/sdb. Les distributions CentOS et RHEL utilisent par défaut le premier volume de leur disque en tant que volume racine. L'identifiant de volume doit donc correspondre à /dev/sdb1. Pour les cas personnalisés, déterminez l'identifiant de volume à l'aide de lsblk.

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

    gcloud compute ssh rescue
    
  7. 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"
      if [ "$?" != "0" ]; then
      # Handle XFS filesystem cases (CentOS/RHEL 7):
      sudo mount -o nouuid "$DEV" "$NEW_DISK_MOUNT_POINT"
      fi
      
    2. Créez le script rc.local.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      declare -a PKG_LIST=(python-google-compute-engine \
      google-compute-engine-oslogin \
      google-compute-engine)
      declare -x YUM_SERVER="packages.cloud.google.com"
      declare -x REPO_FILE="/etc/yum.repos.d/google-cloud.repo"
      echo "== Installing a Linux guest environment for CentOS/RHEL =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL version..."
      OS_RELEASE_FILE="/etc/redhat-release"
      if [ ! -f "$OS_RELEASE_FILE" ]; then
         OS_RELEASE_FILE="/etc/centos-release"
      fi
      if [ ! -f "$OS_RELEASE_FILE" ]; then
         echo "ERROR: This system does not appear to be CentOS/RHEL."
         exit 1
      fi
      DIST=$(cat "$OS_RELEASE_FILE" | grep -o '[0-9].*' | awk -F'.' '{print $1}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine version of CentOS/RHEL."
         exit 1
      fi
      echo "Updating $REPO_FILE..."
      tee "$REPO_FILE" << EOM
      [google-cloud-compute]
      name=Google Cloud Compute
      baseurl=https://$YUM_SERVER/yum/repos/google-cloud-compute-el${DIST}-x86_64
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://$YUM_SERVER/yum/doc/yum-key.gpg
      https://$YUM_SERVER/yum/doc/rpm-package-key.gpg
      EOM
      echo "Running yum makecache..."
      yum makecache
      echo "Running yum updateinfo..."
      yum updateinfo
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running yum install $pkg..."
         yum install -y $pkg
         if [ "$?" != "0" ]; then
            echo "ERROR: Failed to install $pkg."
         fi
      done
      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 now
      EOF
      
    3. Déplacez le script rc.local vers le volume racine du nouveau disque, puis définissez les autorisations. Déplacez également tout script rc.local existant. Le script temporaire le remplacera par la suite.

      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.

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

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
    
  9. 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 Cloud Console :

    1. Accédez à la page des instances de VM.

      Accéder à la page "Instances de VM"

    2. Cliquez sur l'instance problématique, puis sur Cloner.
    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_INSTANCE_NAME]
    

    [REPLACEMENT_INSTANCE_NAME] est le nom que vous avez attribué à l'instance de remplacement.

    L'instance de remplacement redémarre également 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.

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

    Une fois que vous êtes satisfait du fonctionnement de l'instance de remplacement, vous pouvez arrêter ou supprimer l'instance problématique.

Debian

  1. Assurez-vous 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. Cela permet de référencer plus facilement l'instance aux étapes suivantes.

      export PROB_INSTANCE_NAME=INSTANCE_NAME
      

      INSTANCE_NAME est 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. Etant donné que cette procédure n'attache qu'un seul 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 cas personnalisés, 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
      declare -a PKG_LIST=(google-cloud-packages-archive-keyring \
      python-google-compute-engine \
      python3-google-compute-engine \
      google-compute-engine-oslogin \
      google-compute-engine)
      declare -x APT_SERVER="packages.cloud.google.com"
      declare -x REPO_FILE="/etc/apt/sources.list.d/google-cloud.list"
      echo "== Installing a Linux guest environment for Debian =="
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      DIST=$(cat /etc/os-release | grep "VERSION=" \
      | sed "s/\"\|(\|)\|VERSION=//g" | awk '{print tolower($NF)}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine Debian version."
         exit 1
      fi
      echo "Adding GPG key for $APT_SERVER."
      curl https://$APT_SERVER/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating $REPO_FILE..."
      tee "$REPO_FILE" << EOM
      deb http://$APT_SERVER/apt google-compute-engine-${DIST}-stable main
      deb http://$APT_SERVER/apt google-cloud-packages-archive-keyring-${DIST} main
      EOM
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running apt install $pkg..."
         apt install -y $pkg
         if [ "$?" != "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 now
      EOF
      
    3. Déplacez le script rc.local vers le volume racine du nouveau disque, puis définissez les autorisations. Déplacez également tout script rc.local existant. Le script temporaire le remplacera par la suite.

      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 Cloud Console :

    1. Accédez à la page des instances de VM.

      Accéder à la page "Instances de VM"

    2. Cliquez sur l'instance problématique, puis sur Cloner.
    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_INSTANCE_NAME
    

    REPLACEMENT_INSTANCE_NAME est le nom que vous avez attribué à l'instance de remplacement.

    L'instance de remplacement redémarre également 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 êtes satisfait du fonctionnement de l'instance de remplacement, vous pouvez arrêter ou supprimer l'instance problématique.

Ubuntu

  1. Assurez-vous que la version de votre système d'exploitation est compatible.
  2. Installez la clé GPG du dépôt public :
  3. 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.

  4. 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. Cela permet de référencer plus facilement l'instance aux étapes suivantes.

      export PROB_INSTANCE_NAME=INSTANCE_NAME
      

      INSTANCE_NAME est 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"
      
  5. Associez le nouveau disque à l'instance de secours, puis installez son volume racine. Etant donné que cette procédure n'attache qu'un seul 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 cas personnalisés, déterminez l'identifiant de volume à l'aide de lsblk.

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

    gcloud compute ssh rescue
    
  7. 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
      declare -a PKG_LIST=(python-google-compute-engine \
      python3-google-compute-engine \
      google-compute-engine-oslogin \
      gce-compute-image-packages)
      echo "== Installing a Linux guest environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Determining Ubuntu version..."
      DIST=$(cat /etc/os-release | grep "VERSION_ID=" \
      | sed "s/\"\|(\|)\|VERSION_ID=//g" | awk -F. '{print tolower($1)}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine Ubuntu version."
         exit 1
      fi
      if [ "$DIST" -lt "16" ]; then
         # Adjust package list for older Ubuntu:
         echo "Ubuntu version less than 16.04."
         declare -a PKG_LIST=(python-google-compute-engine \
         gce-compute-image-packages)
      fi
      echo "Ensuring Ubuntu universe repositories are enabled."
      apt-add-repository universe
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running apt install $pkg..."
         apt install -y $pkg
         if [ "$?" != "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 now
      EOF
      
    3. Déplacez le script rc.local vers le volume racine du nouveau disque, puis définissez les autorisations. Déplacez également tout script rc.local existant. Le script temporaire le remplacera par la suite.

      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.

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

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"

  9. 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 Cloud Console :

    1. Accédez à la page des instances de VM.

      Accéder à la page "Instances de VM"

    2. Cliquez sur l'instance problématique, puis sur Cloner.
    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_INSTANCE_NAME
    

    REPLACEMENT_INSTANCE_NAME est le nom que vous avez attribué à l'instance de remplacement.

    L'instance de remplacement redémarre également 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.

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

    Une fois que vous êtes satisfait du fonctionnement de l'instance de remplacement, vous pouvez arrêter ou supprimer l'instance problématique.

Valider l'environnement invité

Vous pouvez constater la présence d'un environnement invité en inspectant les journaux système de la console au démarrage d'une instance, ou en répertoriant les packages installés quand vous êtes connecté à l'instance.

Sortie attendue dans les journaux de la console associés à 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 Sortie attendue
CentOS/RHEL 7
Debian 9
Ubuntu 16.04 et versions ulté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
CentOS/RHEL 6
Ubuntu 14.04
upstart

google-accounts: INFO Starting Google Accounts daemon
google-ip-forwarding: INFO Starting Google Compute Engine Network Daemon
google-clock-skew: INFO Starting Google Clock Skew daemon
CoreOS systemd et ignition

systemd[1]: Starting Ignition (files)...
[finished] enabling unit "coreos-metadata-sshkeys@.service
[finished] enabling unit "oem-gce.service"
[finished] enabling unit "oem-cloudinit.service"
Container-Optimized OS 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
SUSE (SLES) 12 et versions ulté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

GCEWindowsAgent: GCE Agent Started
GCEMetadataScripts: Starting startup scripts

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

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page "Instances de VM"

    1. Cliquez sur 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 à l'aide du tableau ci-dessus.

gcloud

  1. Redémarrez ou réinitialisez l'instance.
  2. Exécutez la sous-commande gcloud compute get-serial-port-output dans l'outil de ligne de commande gcloud pour vous connecter. Exemple :

    gcloud compute instances get-serial-port-output [INSTANCE_NAME]
    

    [INSTANCE_NAME] est le nom de l'instance que vous devez examiner.

  3. Recherchez la sortie attendue à l'aide du tableau ci-dessus.

Services chargés dans l'environnement invité

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

Système d'exploitation Commande permettant de répertorier les services Sortie attendue
CentOS/RHEL 7
Debian 9
Ubuntu 16.04 et versions ultérieures

sudo systemctl list-unit-files \
| grep google | grep enabled

google-accounts-daemon.service      enabled
google-clock-skew-daemon.service    enabled
google-instance-setup.service       enabled
google-shutdown-scripts.service     enabled
google-startup-scripts.service      enabled
google-network-daemon.service       enabled
CentOS/RHEL 6
Ubuntu 14.04

initctl list | grep google

google-accounts-daemon              start/running
google-network-daemon               start/running
google-clock-skew-daemon            start/running
google-instance-setup               stop/waiting
google-startup-scripts              stop/waiting
google-shutdown-scripts             stop/waiting
CoreOS

sudo systemctl list-unit-files \
| grep \
"oem-cloudinit\|oem-gce\|coreos-metadata-ssh" \
| grep enabled

coreos-metadata-sshkeys@.service    enabled
oem-cloudinit.service               enabled
oem-gce.service                     enabled
Container-Optimized OS

sudo systemctl list-unit-files \
| grep google

var-lib-google.mount                disabled
google-accounts-daemon.service      disabled
google-clock-skew-daemon.service    disabled
google-instance-setup.service       disabled
google-ip-forwarding-daemon.service disabled
google-network-setup.service        disabled
google-shutdown-scripts.service     disabled
google-startup-scripts.service      disabled
var-lib-google-remount.service      static 
SUSE (SLES) 12 et versions ultérieures

sudo systemctl list-unit-files \
| grep google | grep enabled

google-accounts-daemon.service      enabled
google-network-daemon.service       enabled
google-clock-skew-daemon.service    enabled
google-instance-setup.service       enabled
google-shutdown-scripts.service     enabled
google-startup-scripts.service      enabled
Windows

Get-Service GCEAgent
Get-ScheduledTask GCEStartup

Running    GCEAgent   GCEAgent
\          GCEStartup Ready

Packages installés dans l'environnement invité

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

Système d'exploitation Commande permettant de répertorier les packages Sortie attendue
CentOS/RHEL 6 et 7

yum list installed | grep google-compute

google-compute-engine
google-compute-engine-oslogin.x86_64
python-google-compute-engine
Debian 9

apt list --installed | grep google-compute

google-compute-engine
google-compute-engine-oslogin
python-google-compute-engine
python3-google-compute-engine
Ubuntu 14.04

apt list --installed \
| grep "google-compute\|gce-compute-image-packages"

gce-compute-image-packages
google-compute-engine-oslogin
python-google-compute-engine
Ubuntu 16.04 et versions ultérieures

apt list --installed \
| grep "google-compute\|gce-compute-image-packages"

gce-compute-image-packages
google-compute-engine-oslogin
python-google-compute-engine
python3-google-compute-engine
SUSE (SLES) 12 et versions ultérieures

zypper se -i | grep package \
| grep "google-compute-engine\|gce\|ClientConfigGCE"

cloud-regionsrv-client-plugin-gce
google-compute-engine-init
python-gcemetadata
regionServiceClientConfigGCE
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

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Compute Engine