Instalar el entorno de invitado


En esta página se explica cómo instalar manualmente el entorno invitado en instancias de máquinas virtuales (VM). El entorno de invitado es un conjunto de secuencias de comandos, daemons y archivos binarios que las instancias necesitan para ejecutarse en Compute Engine. Para obtener más información, consulta Entorno de invitado.

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

Si el entorno invitado no está instalado o está obsoleto, instálalo o actualízalo. Para identificar estos casos, consulta Cuándo instalar o actualizar el entorno de invitado.

Antes de empezar

  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos 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 la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

Cuándo instalar o actualizar el entorno de invitado

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

Comprobar los requisitos de instalación

Antes de instalar el entorno invitado, sigue el procedimiento para validar el entorno invitado y comprueba si se ejecuta en tu instancia. Si el entorno de invitado está disponible en tu instancia, pero está obsoleto, actualiza el entorno de invitado.

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

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

  • Importa una imagen personalizada o un disco virtual en Compute Engine y elige evitar la instalación automática del entorno invitado.

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

  • Migra las VMs a Compute Engine con Migrate to Virtual Machines.

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

Comprobar los requisitos de las actualizaciones

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

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

Métodos de instalación

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

Sistemas operativos compatibles

Puedes instalar o actualizar el entorno de invitado en las VMs que usen versiones de imágenes de SO en la fase del ciclo de vida de disponibilidad general (GA) o en la fase del ciclo de vida de asistencia ampliada.

Para consultar una lista de versiones de imágenes de SO y su fase del ciclo de vida en Compute Engine, consulta Detalles del sistema operativo.

Limitaciones

No puedes instalar manualmente ni usar la herramienta de importación para instalar entornos invitados en los sistemas operativos Fedora CoreOS y Container-Optimized OS (COS). En el caso de COS, Google recomienda usar las imágenes públicas proporcionadas por Google, que incluyen el entorno de invitado como componente principal.

Instalar el entorno de invitado

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

Instalar el entorno de invitado en el mismo lugar

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, puedes instalar el entorno invitado clonando su disco de arranque y usando una secuencia de comandos de inicio.

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

CentOS/RHEL/Rocky

  1. Comprueba que la versión de tu sistema operativo sea compatible.
  2. Determina la versión de CentOS, RHEL o Rocky Linux. A continuación, 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. A continuación, inspecciona su registro de la consola para asegurarte de que el entorno de invitado se carga cuando se reinicia.

  6. Conéctate a la instancia mediante SSH para verificarlo. Para obtener instrucciones detalladas, consulta el artículo sobre cómo conectarse a la instancia mediante SSH.

Debian

  1. Comprueba 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. A continuación, crea el archivo de lista de fuentes: /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. A continuación, inspecciona su registro de la consola para asegurarte de que el entorno de invitado se carga cuando se reinicia.

  7. Conéctate a la instancia mediante SSH para verificarlo. Para obtener instrucciones detalladas, consulta el artículo sobre cómo conectarse a la instancia mediante SSH.

Ubuntu

  1. Comprueba que la versión de tu 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. A continuación, inspecciona su registro de la consola para asegurarte de que el entorno de invitado se carga cuando se reinicia.

  6. Conéctate a la instancia mediante SSH para verificarlo. Para obtener instrucciones detalladas, consulta el artículo sobre cómo conectarse a la instancia mediante SSH.

SLES

  1. Comprueba 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. A continuación, inspecciona su registro de la consola para asegurarte de que el entorno de invitado se carga cuando se reinicia.

  6. Conéctate a la instancia mediante SSH para verificarlo. Para obtener instrucciones detalladas, consulta el artículo sobre cómo conectarse a la instancia mediante SSH.

Windows

Antes de empezar, comprueba que tu versión del sistema operativo sea compatible.

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

  1. Descarga e 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 añade contenido al entorno del sistema. Una vez completada la instalación, inicia una nueva consola de PowerShell. También puedes proporcionar la ruta completa del archivo googet.exe (C:\ProgramData\GooGet\googet.exe).

  2. Abre una nueva consola y añade 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 de 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 de invitado de Windows.

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

    Usar 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 versión más reciente del paquete, ejecuta el comando googet update.

    Para ver más comandos, ejecuta googet help.

Clonar el disco de arranque y usar una secuencia de comandos de inicio

Si no puedes conectarte a una instancia para instalar manualmente el entorno invitado, sigue este procedimiento para instalarlo. Incluye los siguientes pasos, que puedes completar en la Google Cloud consola 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 jq procesador JSON de línea de comandos. Este procesador filtra la salida de la CLI de gcloud. Cloud Shell tiene jq preinstalado.

CentOS/RHEL/Rocky

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

  2. Crea una instancia que sirva como instancia de recuperación. Asigna el nombre rescue a esta instancia. Esta instancia de recuperación no tiene por qué ejecutar el mismo SO Linux que la instancia problemática. En este ejemplo se usa Debian 9 en la instancia de rescate.

  3. Detén la instancia que da problemas y crea una copia de su disco de arranque.

    1. Asigna un nombre de variable a la instancia problemática. Esta variable simplifica la referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Sustituye VM_NAME por el nombre de la instancia que da problemas.

    2. Detén la instancia que da problemas.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtén el nombre del disco de arranque de 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 captura 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 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. Elimina la captura:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Conecta el nuevo disco a la instancia de rescate y monta el volumen raíz de la instancia de rescate. Como este procedimiento solo vincula un disco adicional, el identificador del dispositivo del nuevo disco es /dev/sdb. CentOS, RHEL y Rocky Linux usan el primer volumen de un disco como volumen raíz de forma predeterminada. Por lo tanto, el identificador de volumen debe 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 rescate mediante SSH:

    gcloud compute ssh rescue
  6. Sigue estos pasos en la instancia de rescate.

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

      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, mueve el archivo temporal rc.local al disco montado y define los permisos para que el archivo temporal se pueda ejecutar al arrancar. La secuencia de comandos temporal sustituye a la original cuando termina de iniciarse. 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. Desmonta el volumen raíz del nuevo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    5. Cierra la sesión SSH de la instancia de rescate.

  7. Desconecta el nuevo disco de la instancia de rescate.

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

    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 que da problemas y, a continuación, en Crear similar.

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

    4. Haz clic en Crear. La instancia de sustitución se inicia automáticamente después de crearse.

    Mientras se inicia la instancia de sustitución, se ejecuta la secuencia de comandos temporal rc.local e instala el entorno de invitado. Para ver el progreso de esta secuencia de comandos, inspecciona los registros de la consola para ver las líneas emitidas por 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

    Sustituye REPLACEMENT_VM_NAME por el nombre que hayas asignado a la instancia de sustitución.

    La instancia de sustitución se reinicia automáticamente 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 carga el entorno invitado.

  9. Comprueba que puedes conectarte a la instancia mediante SSH.

    Una vez que hayas verificado que la instancia de sustitución funciona correctamente, puedes detener o eliminar la instancia problemática.

Debian

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

  2. Crea una instancia que sirva como instancia de recuperación. Asigna el nombre rescue a esta instancia. Esta instancia de recuperación no tiene por qué ejecutar el mismo SO Linux que la instancia problemática. En este ejemplo se usa Debian 9 en la instancia de rescate.

  3. Detén la instancia que da problemas y crea una copia de su disco de arranque.

    1. Asigna un nombre de variable a la instancia problemática. Esta variable simplifica la referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Sustituye VM_NAME por el nombre de la instancia que da problemas.

    2. Detén la instancia que da problemas.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtén el nombre del disco de arranque de 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 captura 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 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. Elimina la captura:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Conecta el nuevo disco a la instancia de rescate y monta el volumen raíz de la instancia de rescate. Como este procedimiento solo vincula un disco adicional, el identificador del dispositivo del nuevo disco es /dev/sdb. Debian usa el primer volumen de un disco como volumen raíz de forma predeterminada, por lo que el identificador de volumen debe 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 rescate mediante SSH:

    gcloud compute ssh rescue
  6. Sigue estos pasos en la instancia de rescate.

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

      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, mueve el archivo temporal rc.local al disco montado y define los permisos para que el archivo temporal se pueda ejecutar al arrancar. La secuencia de comandos temporal sustituye a la original cuando termina de iniciarse. 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. Desmonta el volumen raíz del nuevo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Cierra la sesión SSH de la instancia de rescate.

  7. Desconecta el nuevo disco de la instancia de rescate.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crea una instancia que sustituya a la anterior. Cuando crees la instancia de sustitución, especifica el nuevo disco como disco de arranque. Puedes crear la instancia de sustitución con la Google Cloud consola:

    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 que da problemas y, a continuación, en Crear similar.

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

    4. Haz clic en Crear. La instancia de sustitución se inicia automáticamente después de crearse.

    Mientras se inicia la instancia de sustitución, se ejecuta la secuencia de comandos temporal rc.local e instala el entorno de invitado. Para ver el progreso de esta secuencia de comandos, inspecciona los registros de la consola para ver las líneas emitidas por 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

    Sustituye REPLACEMENT_VM_NAME por el nombre que asignaste a la instancia de sustitución.

    La instancia de sustitución se reinicia automáticamente 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 carga el entorno invitado.

  9. Comprueba que puedes conectarte a la instancia mediante SSH.

    Una vez que hayas verificado que la instancia de sustitución funciona correctamente, puedes detener o eliminar la instancia problemática.

Ubuntu

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

  2. Crea una instancia que sirva como instancia de recuperación. Asigna el nombre rescue a esta instancia. Esta instancia de recuperación no tiene por qué ejecutar el mismo SO Linux que la instancia problemática. En este ejemplo se usa Debian 9 en la instancia de rescate.

  3. Detén la instancia que da problemas y crea una copia de su disco de arranque.

    1. Asigna un nombre de variable a la instancia problemática. Esta variable simplifica la referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Sustituye VM_NAME por el nombre de la instancia que da problemas.

    2. Detén la instancia que da problemas.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtén el nombre del disco de arranque de 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 captura 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 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. Elimina la captura:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Conecta el nuevo disco a la instancia de rescate y monta el volumen raíz de la instancia de rescate. Como este procedimiento solo vincula un disco adicional, el identificador del dispositivo del nuevo disco es /dev/sdb. Ubuntu etiqueta su volumen raíz 1 de forma predeterminada, por lo que el identificador de volumen debe 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 rescate mediante SSH:

    gcloud compute ssh rescue
  6. Sigue estos pasos en la instancia de rescate.

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

      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, mueve el archivo temporal rc.local al disco montado y define los permisos para que el archivo temporal se pueda ejecutar al arrancar. La secuencia de comandos temporal sustituye a la original cuando termina de iniciarse. 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. Desmonta el volumen raíz del nuevo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Cierra la sesión SSH de la instancia de rescate.

  7. Desconecta el nuevo disco de la instancia de rescate.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crea una instancia que sustituya a la anterior. Cuando crees la instancia de sustitución, especifica el nuevo disco como disco de arranque. Puedes crear la instancia de sustitución con la Google Cloud consola:

    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 que da problemas y, a continuación, en Crear similar.

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

    4. Haz clic en Crear. La instancia de sustitución se inicia automáticamente después de crearse.

    Mientras se inicia la instancia de sustitución, se ejecuta la secuencia de comandos temporal rc.local e instala el entorno de invitado. Para ver el progreso de esta secuencia de comandos, inspecciona los registros de la consola para ver las líneas emitidas por 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

    Sustituye REPLACEMENT_VM_NAME por el nombre que hayas asignado a la instancia de sustitución.

    La instancia de sustitución se reinicia automáticamente 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 carga el entorno invitado.

  9. Comprueba que puedes conectarte a la instancia mediante SSH.

    Una vez que hayas verificado que la instancia de sustitución funciona correctamente, puedes detener o eliminar la instancia problemática.

Actualizar el entorno de invitado

Si recibes un mensaje que indica que el entorno invitado está obsoleto, actualiza los paquetes de 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

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

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

Ubuntu

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

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

Validar el entorno de invitado

Puedes comprobar si se ha instalado un entorno invitado inspeccionando los registros del sistema que se emiten en la consola mientras se inicia una instancia o enumerando los paquetes instalados mientras estás conectado a la instancia.

Ver los registros de consola esperados del entorno invitado

En esta tabla se resume la salida esperada de los registros de consola emitidos por las instancias con entornos de invitado que funcionan correctamente al iniciarse.

Sistema operativo Gestión de servicios 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)

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

Consola

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

    Ir a instancias de VM

    1. Selecciona la instancia que quieras examinar.
    2. Reinicia o restablece la instancia.
    3. En Registros, haz clic en Puerto 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

    Sustituye VM_NAME por el nombre de la instancia que quieras examinar.

  3. Busca el resultado esperado en la tabla que precede a estos pasos.

Ver los servicios cargados por versión del sistema operativo

En esta tabla se resumen los servicios que se deben cargar en las instancias con entornos de invitado operativos. Debes ejecutar el comando para enumerar los servicios después de conectarte a la instancia. Por lo tanto, solo puedes realizar esta comprobación si tienes acceso a la instancia.

Sistema operativo Comando para mostrar 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+
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

Ver los paquetes instalados por versión del sistema operativo

En esta tabla se resumen los paquetes que se deben instalar en las instancias con entornos de invitado operativos. Debes ejecutar el comando para enumerar los paquetes instalados después de conectarte a la instancia. Por lo tanto, solo puedes realizar esta comprobación si tienes acceso a la instancia.

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

Sistema operativo Comando para enumerar 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

Siguientes pasos