Instalar el entorno invitado


En esta página, se describe cómo instalar de forma manual el entorno de invitado para instancias de máquinas virtuales (VM) que ejecutan imágenes personalizadas en Compute Engine.

En la mayoría de los casos, si usas las VM creadas con las imágenes públicas que proporciona Google, no debes instalar un entorno invitado. Para obtener información sobre cuándo usar el entorno invitado, consulta Cuándo instalar o actualizar de forma manual el entorno invitado.

Antes de instalar de forma manual el entorno invitado, usa el procedimiento Valida el entorno invitado para comprobar si el entorno invitado se está ejecutando en tu VM. Si el entorno invitado está disponible en la VM, pero está desactualizado, actualiza el entorno invitado.

Antes de comenzar

  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

Métodos de instalación

Hay varias formas de instalar el entorno invitado. Elige una de las siguientes opciones:

Sistemas operativos compatibles

Puedes instalar de forma manual el entorno invitado en VMs que usan versiones de imagen de SO que se encuentran en el ciclo de vida de disponibilidad general (GA) o en la etapa del ciclo de vida de asistencia extendida. Para revisar una lista de las versiones de imagen de SO y su etapa del ciclo de vida en Compute Engine, consulta Detalles del sistema operativo.

Limitaciones

No puedes instalar o usar de forma manual la herramienta de importación para instalar entornos invitados de los sistemas operativos Fedora CoreOS y optimizados para contenedores. Si necesitas uno de estos sistemas operativos, te recomendamos que uses las imágenes públicas, dado que un entorno de invitado se incluye como una parte principal de todas las imágenes públicas.

Instala el entorno de invitado

Instala el entorno de invitado in situ

Usa este método para instalar el entorno de invitado si puedes conectarte a la instancia de destino mediante SSH. Si no puedes hacerlo, clona el disco de arranque y usa una secuencia de comandos de inicio para lograrlo.

Este procedimiento resulta útil para imágenes importadas si puedes conectarte mediante la autenticación basada en contraseña de SSH. También se puede usar para reinstalar el entorno de invitado si tienes al menos una cuenta de usuario con SSH funcional basado en claves.

CentOS/RHEL/Rocky

  1. Asegúrate de que la versión del sistema operativo sea compatible.
  2. Determina la versión de CentOS/RHEL/Rocky Linux y crea el archivo de repositorio de origen, /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. Actualiza las listas de paquetes:

    sudo yum makecache
    sudo yum updateinfo
    
  4. Instala los paquetes del entorno de invitado:

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. Reinicia la instancia y, luego, inspecciona el registro de la consola para asegurarte de que el entorno invitado se cargue cuando comience a crearse la copia de seguridad.

  6. Verifica si puedes conectarte a la instancia mediante SSH.

Debian

  1. Asegúrate de que la versión del sistema operativo sea compatible.
  2. Instala la clave GPG pública del repositorio:

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. Determina el nombre de la distribución de Debian y crea el archivo de lista de origen /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. Actualiza las listas de paquetes:

    sudo apt update
  5. Instala los paquetes del entorno de invitado:

    sudo apt install -y google-cloud-packages-archive-keyring
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. Reinicia la instancia y, luego, inspecciona el registro de la consola para asegurarte de que el entorno invitado se cargue cuando comience a crearse la copia de seguridad.

  7. Verifica si puedes conectarte a la instancia mediante SSH.

Ubuntu

  1. Asegúrate de que la versión del sistema operativo sea compatible.

  2. Habilita el repositorio Universe. Canonical publica paquetes para su entorno de invitado en el repositorio Universe.

    sudo apt-add-repository universe
  3. Actualiza las listas de paquetes:

    sudo apt update
  4. Instala los paquetes del entorno de invitado:

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. Reinicia la instancia y, luego, inspecciona el registro de la consola para asegurarte de que el entorno invitado se cargue cuando comience a crearse la copia de seguridad.

  6. Verifica si puedes conectarte a la instancia mediante SSH.

SLES

  1. Asegúrate de que la versión del sistema operativo sea compatible.

  2. Activa el Módulo de nube pública.

    product=$(sudo SUSEConnect --list-extensions | grep -o "sle-module-public-cloud.*")
    [[ -n "$product" ]] && sudo SUSEConnect -p "$product"
    
  3. Actualiza las listas de paquetes:

    sudo zypper refresh
  4. Instala los paquetes del entorno de invitado:

    sudo zypper install -y google-guest-{agent,configs,oslogin} \
    google-osconfig-agent
    sudo systemctl enable /usr/lib/systemd/system/google-*
    
  5. Reinicia la instancia y, luego, inspecciona el registro de la consola para asegurarte de que el entorno invitado se cargue cuando comience a crearse la copia de seguridad.

  6. Verifica si puedes conectarte a la instancia mediante SSH.

Windows

Antes de comenzar, asegúrate de que la versión del sistema operativo sea compatible.

Para instalar el entorno de invitado de Windows, ejecuta los siguientes comandos en un símbolo del sistema de PowerShell elevado versión 3.0 o superior. El comando Invoke-WebRequest en las instrucciones a continuación requiere una versión de PowerShell superior a 3.0.

  1. Descarga y, luego, instala 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"
    

    Durante la instalación, GooGet agrega contenido al entorno del sistema. Una vez completada la instalación, inicia una nueva consola de PowerShell o proporciona la ruta de acceso completa al archivo googet.exe (C:\ ProgramData \ GooGet \ googet.exe).

  2. Abre una consola nueva y agrega el repositorio google-compute-engine-stable.

    googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
  3. Instala los paquetes principales del entorno invitado de 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. Instala el paquete opcional del entorno invitado de Windows.

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

    Usa el comando googet.

    Para ver los paquetes disponibles, ejecuta el comando googet available.

    Para ver los paquetes instalados, ejecuta el comando googet installed.

    Para actualizar a la última versión del paquete, ejecuta el comando googet update.

    Para ver los comandos adicionales, ejecuta googet help.

Clona el disco de arranque y usa una secuencia de comandos de inicio

Si no puedes conectarte a una instancia para instalar el entorno invitado de forma manual, instálalo con este procedimiento, que incluye los siguientes pasos que se pueden realizar en Google Cloud Console o Cloud Shell.

Este método muestra el procedimiento solo para distribuciones de Linux. En Windows, usa uno de los otros dos métodos de instalación.

Usa Cloud Shell para ejecutar este procedimiento. Si no usas Cloud Shell, instala el procesador JSON de la línea de comandos de jq. Puedes usar este procesador para filtrar el resultado de gcloud CLI. Cloud Shell tiene jq preinstalado.

CentOS/RHEL/Rocky

  1. Asegúrate de que la versión del sistema operativo sea compatible.

  2. Crea una instancia nueva para que funcione como la instancia de recuperación. Nombra esta instancia como recuperación. Esta instancia de recuperación no necesita ejecutar el mismo SO Linux que la instancia problemática. En este ejemplo, se usa Debian 9 en la instancia de recuperación.

  3. Detén la instancia problemática y crea una copia de su disco de arranque.

    1. Establece un nombre de variable para la instancia problemática. Esto facilita la referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Reemplaza VM_NAME con el nombre de la instancia problemática.

    2. Detén la instancia problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtén el nombre del disco de arranque para la instancia problemática.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crea una instantánea del disco de arranque.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crea un disco nuevo a partir de la instantánea.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Borra la instantánea:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Vincula el disco nuevo a la instancia de recuperación y activa el volumen raíz de la instancia de recuperación. Dado que este procedimiento solo vincula un disco adicional, el identificador de dispositivo del disco nuevo es /dev/sdb. CentOS/RHEL/Rocky Linux usa el primer volumen de un disco como el volumen raíz de forma predeterminada, por lo que el identificador de volumen debería ser /dev/sdb1. Para casos personalizados, usa lsblk a fin de determinar el identificador de volumen.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conéctate a la instancia de recuperación mediante SSH:

    gcloud compute ssh rescue
  6. Realiza los siguientes pasos en la instancia de recuperación.

    1. Activa el volumen raíz del disco nuevo.

      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. Crea la secuencia de comandos 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. Mueve la secuencia de comandos rc.local al volumen raíz del disco nuevo y establece los permisos. Mueve cualquier secuencia de comandos rc.local existente a un lado. La secuencia de comandos temporal la reemplazará cuando finalice.

      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. Desactiva el volumen raíz del disco nuevo.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    5. Sal de la sesión SSH en la instancia de recuperación.

  7. Desvincula el disco nuevo de la instancia de recuperación.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crea una instancia para que sirva como reemplazo. Cuando crees la instancia de reemplazo, especifica el disco nuevo como el disco de arranque. Puedes crear la instancia de reemplazo con la consola de Google Cloud:

    1. En la consola de Google Cloud, ve a la página Instancias de VM.

      Ir a Instancias de VM

    2. Haz clic en la instancia problemática y, luego, en Crear similar.

    3. Especifica un nombre para la instancia de reemplazo. En la sección Disco de arranque, haz clic en Cambiar y, luego, en Discos existentes. Selecciona el disco nuevo.

    4. Haz clic en Crear. Una vez que se crea, la instancia de reemplazo se inicia de forma automática.

    A medida que se inicia la instancia de reemplazo, la secuencia de comandos temporal rc.local ejecuta y, también, instala el entorno invitado. Para mirar el progreso de esta secuencia de comandos, inspecciona los registros de la consola en busca de líneas que emite la secuencia de comandos temporal rc.local. Para ver los registros, ejecuta el siguiente comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Reemplaza REPLACEMENT_VM_NAME por el nombre que le asignaste a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia de manera automática cuando finaliza la secuencia de comandos temporal rc.local. Durante el segundo reinicio, puedes inspeccionar el registro de la consola para asegurarte de que se cargue el entorno invitado.

  9. Verifica si puedes conectarte a la instancia mediante SSH.

    Cuando estés seguro de que la instancia de reemplazo es funcional, puedes detener o borrar la instancia problemática.

Debian

  1. Asegúrate de que la versión del sistema operativo sea compatible.

  2. Crea una instancia nueva para que funcione como la instancia de recuperación. Nombra esta instancia como recuperación. Esta instancia de recuperación no necesita ejecutar el mismo SO Linux que la instancia problemática. En este ejemplo, se usa Debian 9 en la instancia de recuperación.

  3. Detén la instancia problemática y crea una copia de su disco de arranque.

    1. Establece un nombre de variable para la instancia problemática. Esto facilita la referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Reemplaza VM_NAME con el nombre de la instancia problemática.

    2. Detén la instancia problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtén el nombre del disco de arranque para la instancia problemática.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crea una instantánea del disco de arranque.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crea un disco nuevo a partir de la instantánea.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Borra la instantánea:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Vincula el disco nuevo a la instancia de recuperación y activa el volumen raíz de la instancia de recuperación. Dado que este procedimiento solo vincula un disco adicional, el identificador de dispositivo del disco nuevo es /dev/sdb. Debian usa el primer volumen de un disco como el volumen raíz de manera predeterminada, por lo que el identificador de volumen debería ser /dev/sdb1. Para casos personalizados, usa lsblk a fin de determinar el identificador de volumen.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conéctate a la instancia de recuperación mediante SSH:

    gcloud compute ssh rescue
  6. Realiza los siguientes pasos en la instancia de recuperación.

    1. Activa el volumen raíz del disco nuevo.

      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. Crea la secuencia de comandos 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. Mueve la secuencia de comandos rc.local al volumen raíz del disco nuevo y establece los permisos. Mueve cualquier secuencia de comandos rc.local existente a un lado. La secuencia de comandos temporal la reemplazará cuando finalice.

      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. Desactiva el volumen raíz del disco nuevo.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Sal de la sesión SSH en la instancia de recuperación.

  7. Desvincula el disco nuevo de la instancia de recuperación.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crea una instancia nueva para que funcione como la instancia de reemplazo. Cuando crees la instancia de reemplazo, especifica el disco nuevo como el disco de arranque. Puedes crear la instancia de reemplazo con la consola de Google Cloud:

    1. En la consola de Google Cloud, ve a la página Instancias de VM.

      Ir a Instancias de VM

    2. Haz clic en la instancia problemática y, luego, en Crear similar.

    3. Especifica un nombre para la instancia de reemplazo. En la sección Disco de arranque, haz clic en Cambiar y, luego, en Discos existentes. Selecciona el disco nuevo.

    4. Haz clic en Crear. Una vez que se crea, la instancia de reemplazo se inicia de forma automática.

    A medida que se inicia la instancia de reemplazo, la secuencia de comandos temporal rc.local ejecuta y, también, instala el entorno invitado. Para mirar el progreso de esta secuencia de comandos, inspecciona los registros de la consola en busca de líneas que emite la secuencia de comandos temporal rc.local. Para ver los registros, ejecuta el siguiente comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Reemplaza REPLACEMENT_VM_NAME por el nombre que le asignaste a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia de manera automática cuando finaliza la secuencia de comandos temporal rc.local. Durante el segundo reinicio, puedes inspeccionar el registro de la consola para asegurarte de que se cargue el entorno invitado.

  9. Verifica si puedes conectarte a la instancia mediante SSH.

    Cuando estés seguro de que la instancia de reemplazo es funcional, puedes detener o borrar la instancia problemática.

Ubuntu

  1. Asegúrate de que la versión del sistema operativo sea compatible.

  2. Crea una instancia nueva para que funcione como la instancia de recuperación. Nombra esta instancia como recuperación. Esta instancia de recuperación no necesita ejecutar el mismo SO Linux que la instancia problemática. En este ejemplo, se usa Debian 9 en la instancia de recuperación.

  3. Detén la instancia problemática y crea una copia de su disco de arranque.

    1. Establece un nombre de variable para la instancia problemática. Esto facilita la referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Reemplaza VM_NAME con el nombre de la instancia problemática.

    2. Detén la instancia problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtén el nombre del disco de arranque para la instancia problemática.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crea una instantánea del disco de arranque.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crea un disco nuevo a partir de la instantánea.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Borra la instantánea:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Vincula el disco nuevo a la instancia de recuperación y activa el volumen raíz de la instancia de recuperación. Dado que este procedimiento solo vincula un disco adicional, el identificador de dispositivo del disco nuevo es /dev/sdb. Ubuntu etiqueta su volumen raíz 1 de manera predeterminada, por lo que el identificador de volumen debería ser /dev/sdb1. Para casos personalizados, usa lsblk a fin de determinar el identificador de volumen.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conéctate a la instancia de recuperación mediante SSH:

    gcloud compute ssh rescue
  6. Realiza los siguientes pasos en la instancia de recuperación.

    1. Activa el volumen raíz del disco nuevo.

      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. Crea la secuencia de comandos 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. Mueve la secuencia de comandos rc.local al volumen raíz del disco nuevo y establece los permisos. Mueve cualquier secuencia de comandos rc.local existente a un lado. La secuencia de comandos temporal la reemplazará cuando finalice.

      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. Desactiva el volumen raíz del disco nuevo.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Sal de la sesión SSH en la instancia de recuperación.

  7. Desvincula el disco nuevo de la instancia de recuperación.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crea una instancia nueva para que funcione como la instancia de reemplazo. Cuando crees la instancia de reemplazo, especifica el disco nuevo como el disco de arranque. Puedes crear la instancia de reemplazo con la consola de Google Cloud:

    1. En la consola de Google Cloud, ve a la página Instancias de VM.

      Ir a Instancias de VM

    2. Haz clic en la instancia problemática y, luego, en Crear similar.

    3. Especifica un nombre para la instancia de reemplazo. En la sección Disco de arranque, haz clic en Cambiar y, luego, en Discos existentes. Selecciona el disco nuevo.

    4. Haz clic en Crear. Una vez que se crea, la instancia de reemplazo se inicia de forma automática.

    A medida que se inicia la instancia de reemplazo, la secuencia de comandos temporal rc.local ejecuta y, también, instala el entorno invitado. Para mirar el progreso de esta secuencia de comandos, inspecciona los registros de la consola en busca de líneas que emite la secuencia de comandos temporal rc.local. Para ver los registros, ejecuta el siguiente comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Reemplaza REPLACEMENT_VM_NAME por el nombre que le asignaste a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia de manera automática cuando finaliza la secuencia de comandos temporal rc.local. Durante el segundo reinicio, puedes inspeccionar el registro de la consola para asegurarte de que se cargue el entorno invitado.

  9. Verifica si puedes conectarte a la instancia mediante SSH.

    Cuando estés seguro de que la instancia de reemplazo es funcional, puedes detener o borrar la instancia problemática.

Actualiza el entorno invitado

Si recibes un mensaje que notifica que el entorno invitado está desactualizado, actualiza los paquetes para tu sistema operativo.

CentOS/RHEL/Rocky

Para actualizar los sistemas operativos CentOS, RHEL y Rocky Linux, ejecuta los siguientes comandos:

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

Debian

Ejecuta los siguientes comandos para actualizar los sistemas operativos de Debian:

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

Ubuntu

Ejecuta los siguientes comandos para actualizar los sistemas operativos de Ubuntu:

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

SLES

Para actualizar los sistemas operativos SLES, ejecuta los siguientes comandos:

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

Windows

Para actualizar los sistemas operativos Windows, ejecuta el siguiente comando:

googet update

Valida el entorno invitado

Para determinar la presencia de un entorno invitado, puedes inspeccionar los registros del sistema que se emiten a la consola cuando se inicia una instancia o crear una lista de los paquetes instalados cuando te conectas a la instancia.

Registros esperados de la consola para el entorno de invitado

En esta tabla se muestra un resumen del resultado esperado de los registros de la consola que emiten las instancias con entornos invitados activos cuando se inician.

Sistema operativo Administración de servicio Resultado esperado
CentOS/RHEL/Rocky Linux
Debian
Ubuntu
SLES
Container-Optimized OS 89 y versiones posteriores
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 y versiones anteriores 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)

Si deseas ver los registros de la consola de una instancia, sigue estos pasos.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

    1. Haz clic en la instancia que debes examinar.
    2. Reinicia o restablece la instancia.
    3. En Registros, haz clic en Puerto en serie 1 (consola).
    4. Usa la tabla anterior como referencia para buscar el resultado esperado.

gcloud

  1. Reinicia o restablece la instancia.
  2. Usa el subcomando gcloud compute instances get-serial-port-output para conectarte con Google Cloud CLI. Por ejemplo:

    gcloud compute instances get-serial-port-output VM_NAME

    Reemplaza VM_NAME por el nombre de la instancia que debes examinar.

  3. Usa la tabla anterior como referencia para buscar el resultado esperado.

Servicios cargados para el entorno de invitado

En esta tabla, se muestra un resumen de los servicios que se deben cargar en las instancias con entornos invitados activos. El comando para mostrar la lista de los servicios se debe ejecutar después de que te conectas a la instancia; por lo tanto, esta verificación solo se puede realizar si tienes acceso a ella.

Sistema operativo Comando para mostrar la lista de los servicios Resultado esperado
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 o posterior
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

Paquetes instalados para el entorno de invitado

En esta tabla, se muestra un resumen de los paquetes que se deben instalar en las instancias con entornos invitados activos. El comando para mostrar la lista de los paquetes instalados se debe ejecutar después de que te conectas a la instancia; por lo tanto, esta verificación solo se puede realizar si tienes acceso a ella.

Sistema operativo Comando para mostrar la lista de los paquetes Resultado esperado
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

Qué sigue