Instalar el entorno invitado


En esta página, se explica cómo instalar de forma manual el entorno de invitado en instancias de máquina virtual (VM). El entorno invitado es una colección de secuencias de comandos, daemons y objetos binarios que las instancias requieren para ejecutarse en Compute Engine. Para obtener más información, consulta Entorno invitado.

En la mayoría de los casos, si usas imágenes públicas de SO proporcionadas por Google, el entorno invitado se incluye automáticamente. Para obtener una lista completa de las imágenes del SO que incluyen automáticamente el entorno invitado, consulta Detalles de los sistemas operativos.

Si el entorno invitado no está instalado o está desactualizado, instálalo o actualízalo. Para identificar estas situaciones, consulta Cuándo instalar o actualizar el entorno invitado.

Antes de comenzar

  • Si aún no lo hiciste, configura la autenticación. La autenticación verifica tu identidad para acceder a los servicios y las APIs 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. Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI ejecutando el siguiente comando:

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

    2. Set a default region and zone.

Cuándo instalar o actualizar el entorno invitado

En la mayoría de los casos, no es necesario instalar o actualizar el entorno invitado de forma manual. Revisa las siguientes secciones para saber cuándo es posible que debas instalar o actualizar manualmente.

Verifica los requisitos de instalación

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

Es posible que debas instalar el entorno de invitado en las siguientes situaciones:

  • La imagen de SO proporcionada por Google que necesitas no tiene instalado el entorno de invitado.

  • Importas una imagen personalizada o un disco virtual a Compute Engine y eliges evitar la instalación automática del entorno invitado.

    Cuando importas discos virtuales o imágenes personalizadas, puedes permitir que Compute Engine instale el entorno invitado por ti. Sin embargo, si decides no instalar el entorno invitado durante el proceso de importación, debes instalarlo de forma manual.

  • Migras VMs a Compute Engine con Migrate to Virtual Machines.

Para instalar el entorno invitado, consulta Métodos de instalación.

Verifica los requisitos de actualización

Es posible que debas actualizar el entorno invitado en las siguientes situaciones:

Para actualizar el entorno invitado, consulta Actualiza el entorno invitado.

Métodos de instalación

Puedes instalar el entorno invitado de varias maneras. Elige una de las siguientes opciones:

Sistemas operativos compatibles

Puedes instalar o actualizar el entorno invitado en las VMs que usan versiones de imágenes del SO en el ciclo de vida de disponibilidad general (AG) o en la etapa de 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 (COS). En el caso de COS, Google recomienda usar las imágenes públicas que proporciona Google, que incluyen el entorno invitado como un componente principal.

Instalar el entorno invitado

Para instalar manualmente el entorno invitado, selecciona uno de los siguientes métodos, según tu capacidad para conectarte a la instancia:

Instala el entorno de invitado in situ

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

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

CentOS/RHEL/Rocky

  1. Verifica que la versión de tu sistema operativo sea compatible.
  2. Determina la versión de CentOS/RHEL/Rocky Linux. Luego, crea el archivo del 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. 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. Conéctate a la instancia con SSH para verificarlo. Para obtener instrucciones detalladas, consulta Conéctate a la instancia a través de SSH.

Debian

  1. Verifica que la versión de tu sistema operativo sea compatible.
  2. Instala la clave GPG del repositorio público:

    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. Luego, 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. 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. Conéctate a la instancia con SSH para verificarlo. Para obtener instrucciones detalladas, consulta Conéctate a la instancia a través de SSH.

Ubuntu

  1. Verifica que la versión de tu sistema operativo sea compatible.

  2. Habilita el repositorio Universe. Canonical publica paquetes para su entorno invitado en el repositorio de 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. 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. Conéctate a la instancia con SSH para verificarlo. Para obtener instrucciones detalladas, consulta Conéctate a la instancia a través de SSH.

SLES

  1. Verifica que la versión de tu 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. 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. Conéctate a la instancia con SSH para verificarlo. Para obtener instrucciones detalladas, consulta Conéctate a la instancia a través de SSH.

Windows

Antes de comenzar, verifica que la versión de tu 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 requiere PowerShell versión 3.0 o posterior.

  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 que se complete la instalación, inicia una consola nueva de PowerShell. Como alternativa, 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 puedes completar en la consola de Google Cloud o en Cloud Shell.

Este método solo se aplica a las distribuciones de Linux. En Windows, usa uno de los otros dos métodos de instalación.

Usa Cloud Shell para ejecutar este procedimiento. Para ejecutar este procedimiento si no usas Cloud Shell, instala el procesador JSON de la línea de comandos de jq. Este procesador filtra el resultado de gcloud CLI. Cloud Shell tiene jq preinstalado.

CentOS/RHEL/Rocky

  1. Verifica que tu 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. Esta variable simplifica 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 tanto, el identificador de volumen debería ser /dev/sdb1. Para las configuraciones personalizadas, usa lsblk para 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. Crea una copia de seguridad del archivo rc.local existente, mueve la secuencia de comandos rc.local temporal a su lugar en el disco conectado y establece los permisos para que la secuencia de comandos temporal se pueda ejecutar durante el arranque. La secuencia de comandos temporal reemplaza la secuencia de comandos original cuando finaliza el arranque. Para ello, ejecuta el siguiente comando:

      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 Google Cloud consola, 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.

    Después de verificar que la instancia de reemplazo es funcional, puedes detener o borrar la instancia problemática.

Debian

  1. Verifica que tu 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. Esta variable simplifica 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 forma predeterminada; por lo tanto, el identificador de volumen debería ser /dev/sdb1. Para las configuraciones personalizadas, usa lsblk para 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. Crea una copia de seguridad del archivo rc.local existente, mueve la secuencia de comandos rc.local temporal a su lugar en el disco conectado y establece los permisos para que la secuencia de comandos temporal se pueda ejecutar durante el arranque. La secuencia de comandos temporal reemplaza la secuencia de comandos original cuando finaliza el arranque. Para ello, ejecuta el siguiente comando:

      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 Google Cloud consola, 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.

    Después de verificar que la instancia de reemplazo es funcional, puedes detener o borrar la instancia problemática.

Ubuntu

  1. Verifica que tu 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. Esta variable simplifica 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 forma predeterminada; por lo tanto, el identificador de volumen debería ser /dev/sdb1. Para configuraciones personalizadas, usa lsblk para 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. Crea una copia de seguridad del archivo rc.local existente, mueve la secuencia de comandos rc.local temporal a su lugar en el disco conectado y establece los permisos para que la secuencia de comandos temporal se pueda ejecutar durante el arranque. La secuencia de comandos temporal reemplaza la secuencia de comandos original cuando finaliza el arranque. Para ello, ejecuta el siguiente comando:

      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 Google Cloud consola, 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.

    Después de verificar 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 de la siguiente manera:

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 de invitado

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

Consulta los registros esperados de la consola para el entorno 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 Google Cloud consola, ve a la página Instancias de VM.

    Ir a Instancias de VM

    1. Selecciona la instancia que necesitas examinar.
    2. Reinicia o restablece la instancia.
    3. En Registros, haz clic en Puerto en serie 1 (consola).
    4. Busca el resultado esperado en la tabla que precede a estos pasos.

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. Busca el resultado esperado en la tabla que precede a estos pasos.

Consulta los servicios cargados por versión del sistema operativo

En esta tabla, se muestra un resumen de los servicios que se deben cargar en las instancias con entornos invitados activos. Debes ejecutar el comando para mostrar la lista de los servicios después de conectarte a la instancia. Por lo tanto, solo puedes realizar esta verificación si tienes acceso a la instancia.

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

Consulta los paquetes instalados por versión del sistema operativo

En esta tabla, se muestra un resumen de los paquetes que se deben instalar en las instancias con entornos invitados activos. Debes ejecutar el comando para mostrar la lista de los paquetes instalados después de conectarte a la instancia. Por lo tanto, solo puedes realizar esta verificación si tienes acceso a la instancia.

Para obtener más información sobre estos paquetes, consulta Componentes del entorno invitado.

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