Instala el entorno de invitado

En esta página, se describe cómo instalar de forma manual el entorno de invitado para instancias de VM que se ejecutan en Compute Engine.

En la mayoría de los casos, si usas las instancias de VM creadas con las imágenes públicas que proporciona Google, no debes instalar de forma manual un entorno de invitado.

Para determinar si debes instalar de forma manual el entorno de invitado, puedes realizar las siguientes verificaciones:

Antes de comenzar

Contenido

Compatibilidad con el sistema operativo

La instalación manual del entorno de invitado está disponible para los siguientes sistemas operativos:

  • Ubuntu 14.04 o superior
  • CentOS 6 y 7
  • Red Hat Enterprise Linux (RHEL) 6 y 7
  • Debian 9
  • Windows Server 2019
  • Windows Server 1809 y 1803
  • Windows Server 1709
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2008 R2
  • SQL Server en Windows Server
  • Usa tu propia licencia de Windows(Beta):
    • Windows 7
    • Windows 10

Google recomienda que uses la herramienta de importación para instalar el entorno de invitado. Para obtener una lista de opciones de instalación, revisa la sección de Métodos de instalación.

No puedes instalar de forma manual entornos invitados para los sistemas operativos SUSE, CoreOS y Container-Optimized. 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

Métodos de instalación

Existen tres formas de instalar el entorno de invitado. Selecciona una de las siguientes tres opciones:

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

  1. Asegúrate de que la versión del sistema operativo sea compatible.
  2. Determina la versión de CentOS/RHEL y crea el archivo del repositorio de origen, /etc/yum.repos.d/google-cloud.repo:

    OS_RELEASE_FILE="/etc/redhat-release"
    if [ ! -f $OS_RELEASE_FILE ]; then
       OS_RELEASE_FILE="/etc/centos-release"
    fi
    DIST=$(cat $OS_RELEASE_FILE | grep -o '[0-9].*' | awk -F'.' '{print $1}')
    sudo tee /etc/yum.repos.d/google-cloud.repo << EOM
    [google-cloud-compute]
    name=Google Cloud Compute
    baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-compute-el${DIST}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
           https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  3. Actualiza las listas de paquetes:

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

    declare -a PKG_LIST=(python-google-compute-engine \
    google-compute-engine-oslogin \
    google-compute-engine)
    for pkg in ${PKG_LIST[@]}; do
       sudo yum install -y $pkg
    done
    
  5. Reinicia la instancia y, luego, inspecciona el registro de la consola para asegurarte de que el entorno de invitado se cargue tan pronto 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:

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

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

    declare -a PKG_LIST=(google-cloud-packages-archive-keyring \
    python-google-compute-engine \
    python3-google-compute-engine \
    google-compute-engine-oslogin \
    google-compute-engine)
    for pkg in ${PKG_LIST[@]}; do
       sudo apt install -y $pkg
    done
    
  6. Reinicia la instancia y, luego, inspecciona el registro de la consola para asegurarte de que el entorno de invitado se cargue tan pronto 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-get update
    
  4. Instala los paquetes del entorno de invitado:

    declare -a PKG_LIST=(python-google-compute-engine \
    python3-google-compute-engine \
    google-compute-engine-oslogin \
    gce-compute-image-packages)
    for pkg in ${PKG_LIST[@]}; do
       sudo apt install -y $pkg || echo "Not available: $pkg"
    done
    
  5. Reinicia la instancia y, luego, inspecciona el registro de la consola para asegurarte de que el entorno de invitado se cargue tan pronto 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 mensaje de PowerShell elevado versión 3.0 o superior. El comando Invoke-WebRequest en las siguientes instrucciones 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.13.0/googet.exe -OutFile $env:temp\googet.exe
    & "$env:temp\googet.exe" -root C:\ProgramData\GooGet -noconfirm install -sources \
    https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable googet
    Remove-Item "$env:temp\googet.exe"
    

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

    googet -noconfirm install google-compute-engine-windows \
    google-compute-engine-sysprep google-compute-engine-metadata-scripts \
    google-compute-engine-vss
    
  4. Instala el paquete opcional del entorno de invitado de Windows.

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

    Usa el comando de 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 de forma manual el entorno de invitado, instálalo con este procedimiento, que incluye los siguientes pasos que se pueden realizar en GCP Console y 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:

CentOS/RHEL

  1. Asegúrate de que la versión del sistema operativo sea compatible.
  2. Instala la clave GPG pública del repositorio:
  3. 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.

  4. 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 de la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=INSTANCE_NAME
      

      donde INSTANCE_NAME es 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"
      
  5. 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 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. En los casos personalizados, usa lsblk para determinar el identificador de volumen.

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

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

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      declare -a PKG_LIST=(python-google-compute-engine \
      google-compute-engine-oslogin \
      google-compute-engine)
      declare -x YUM_SERVER="packages.cloud.google.com"
      declare -x REPO_FILE="/etc/yum.repos.d/google-cloud.repo"
      echo "== Installing a Linux guest environment for CentOS/RHEL =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL version..."
      OS_RELEASE_FILE="/etc/redhat-release"
      if [ ! -f "$OS_RELEASE_FILE" ]; then
         OS_RELEASE_FILE="/etc/centos-release"
      fi
      if [ ! -f "$OS_RELEASE_FILE" ]; then
         echo "ERROR: This system does not appear to be CentOS/RHEL."
         exit 1
      fi
      DIST=$(cat "$OS_RELEASE_FILE" | grep -o '[0-9].*' | awk -F'.' '{print $1}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine version of CentOS/RHEL."
         exit 1
      fi
      echo "Updating $REPO_FILE..."
      tee "$REPO_FILE" << EOM
      [google-cloud-compute]
      name=Google Cloud Compute
      baseurl=https://$YUM_SERVER/yum/repos/google-cloud-compute-el${DIST}-x86_64
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://$YUM_SERVER/yum/doc/yum-key.gpg
      https://$YUM_SERVER/yum/doc/rpm-package-key.gpg
      EOM
      echo "Running yum makecache..."
      yum makecache
      echo "Running yum updateinfo..."
      yum updateinfo
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running yum install $pkg..."
         yum install -y $pkg
         if [ "$?" != "0" ]; then
            echo "ERROR: Failed to install $pkg."
         fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.d/rc.local
      # Move back any previous rc.local:
      if [ -f "/etc/moved-rc.local" ]; then
         echo "Restoring a previous rc.local script."
         mv "/etc/moved-rc.local" "/etc/rc.d/rc.local"
      fi
      echo "Restarting the instance..."
      reboot now
      EOF
      
    3. Mueve la secuencia de comandos rc.local al volumen raíz del disco nuevo y configura los permisos. Mueve también cualquier secuencia de comandos rc.local existente. 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.

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

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

    1. Ve a la página Instancias de VM

      Ir a la página Instancias de VM

    2. Haz clic en la instancia problemática y, luego, en Clonar.
    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, luego, instala el entorno de invitado. Si deseas ver el progreso de esta secuencia de comandos, inspecciona los registros de la consola en busca de las 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_INSTANCE_NAME]
    

    donde [REPLACEMENT_INSTANCE_NAME] es el nombre que le asignaste a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia de forma automática una vez que 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 de invitado.

  10. 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 de la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=INSTANCE_NAME
      

      donde INSTANCE_NAME es 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. En los casos personalizados, 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
      declare -a PKG_LIST=(google-cloud-packages-archive-keyring \
      python-google-compute-engine \
      python3-google-compute-engine \
      google-compute-engine-oslogin \
      google-compute-engine)
      declare -x APT_SERVER="packages.cloud.google.com"
      declare -x REPO_FILE="/etc/apt/sources.list.d/google-cloud.list"
      echo "== Installing a Linux guest environment for Debian =="
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      DIST=$(cat /etc/os-release | grep "VERSION=" \
      | sed "s/\"\|(\|)\|VERSION=//g" | awk '{print tolower($NF)}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine Debian version."
         exit 1
      fi
      echo "Adding GPG key for $APT_SERVER."
      curl https://$APT_SERVER/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating $REPO_FILE..."
      tee "$REPO_FILE" << EOM
      deb http://$APT_SERVER/apt google-compute-engine-${DIST}-stable main
      deb http://$APT_SERVER/apt google-cloud-packages-archive-keyring-${DIST} main
      EOM
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running apt install $pkg..."
         apt install -y $pkg
         if [ "$?" != "0" ]; then
            echo "ERROR: Failed to install $pkg."
         fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [ -f "/etc/moved-rc.local" ]; then
         echo "Restoring a previous rc.local script."
         mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot now
      EOF
      
    3. Mueve la secuencia de comandos rc.local al volumen raíz del disco nuevo y configura los permisos. Mueve también cualquier secuencia de comandos rc.local existente. 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 Cloud Console con los siguientes pasos:

    1. Ve a la página Instancias de VM

      Ir a la página Instancias de VM

    2. Haz clic en la instancia problemática y, luego, en Clonar.
    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, luego, instala el entorno de invitado. Si deseas ver el progreso de esta secuencia de comandos, inspecciona los registros de la consola en busca de las 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_INSTANCE_NAME
    

    donde REPLACEMENT_INSTANCE_NAME es el nombre que le asignaste a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia de forma automática una vez que 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 de 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. Instala la clave GPG pública del repositorio:
  3. 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.

  4. 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 de la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=INSTANCE_NAME
      

      donde INSTANCE_NAME es 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"
      
  5. 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. En los casos personalizados, usa lsblk para determinar el identificador de volumen.

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

    gcloud compute ssh rescue
    
  7. 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
      declare -a PKG_LIST=(python-google-compute-engine \
      python3-google-compute-engine \
      google-compute-engine-oslogin \
      gce-compute-image-packages)
      echo "== Installing a Linux guest environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Determining Ubuntu version..."
      DIST=$(cat /etc/os-release | grep "VERSION_ID=" \
      | sed "s/\"\|(\|)\|VERSION_ID=//g" | awk -F. '{print tolower($1)}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine Ubuntu version."
         exit 1
      fi
      if [ "$DIST" -lt "16" ]; then
         # Adjust package list for older Ubuntu:
         echo "Ubuntu version less than 16.04."
         declare -a PKG_LIST=(python-google-compute-engine \
         gce-compute-image-packages)
      fi
      echo "Ensuring Ubuntu universe repositories are enabled."
      apt-add-repository universe
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running apt install $pkg..."
         apt install -y $pkg
         if [ "$?" != "0" ]; then
            echo "ERROR: Failed to install $pkg."
         fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [ -f "/etc/moved-rc.local" ]; then
         echo "Restoring a previous rc.local script."
         mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot now
      EOF
      
    3. Mueve la secuencia de comandos rc.local al volumen raíz del disco nuevo y configura los permisos. Mueve también cualquier secuencia de comandos rc.local existente. 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.

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

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

  9. 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 Cloud Console con los siguientes pasos:

    1. Ve a la página Instancias de VM

      Ir a la página Instancias de VM

    2. Haz clic en la instancia problemática y, luego, en Clonar.
    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, luego, instala el entorno de invitado. Si deseas ver el progreso de esta secuencia de comandos, inspecciona los registros de la consola en busca de las 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_INSTANCE_NAME
    

    donde REPLACEMENT_INSTANCE_NAME es el nombre que le asignaste a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia de forma automática una vez que 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 de invitado.

  10. 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.

Valida el entorno de invitado

Para determinar la presencia de un entorno de 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 7
Debian 9
Ubuntu 16.04+
systemd

Started Google Compute Engine Accounts Daemon
Started Google Compute Engine Network Daemon
Started Google Compute Engine Clock Skew Daemon
Started Google Compute Engine Instance Setup
Started Google Compute Engine Startup Scripts
Started Google Compute Engine Shutdown Scripts
CentOS/RHEL 6
Ubuntu 14.04
upstart

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

systemd[1]: Starting Ignition (files)...
[finished] enabling unit "coreos-metadata-sshkeys@.service
[finished] enabling unit "oem-gce.service"
[finished] enabling unit "oem-cloudinit.service"
Container-Optimized OS systemd

Started Google Compute Engine Accounts Daemon
Started Google Compute Engine Network Daemon
Started Google Compute Engine Clock Skew Daemon
Started Google Compute Engine Instance Setup
Started Google Compute Engine Startup Scripts
Started Google Compute Engine Shutdown Scripts
SUSE (SLES) 12+ systemd

Started Google Compute Engine Accounts Daemon
Started Google Compute Engine Network Daemon
Started Google Compute Engine Clock Skew Daemon
Started Google Compute Engine Instance Setup
Started Google Compute Engine Startup Scripts
Started Google Compute Engine Shutdown Scripts
Windows

GCEWindowsAgent: GCE Agent Started
GCEMetadataScripts: Starting startup scripts

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

Console

  1. Ve a la página Instancias de VM

    Ir a la página 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 get-serial-port-output para conectarte con la herramienta de línea de comandos de gcloud. Por ejemplo:

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

    donde [INSTANCE_NAME] es 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 7
Debian 9
Ubuntu 16.04+

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

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

initctl list | grep google

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

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

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

sudo systemctl list-unit-files \
| grep google

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

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

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

Get-Service GCEAgent
Get-ScheduledTask GCEStartup

Running    GCEAgent   GCEAgent
\          GCEStartup Ready

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 6 y 7

yum list installed | grep google-compute

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

apt list --installed | grep google-compute

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

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

gce-compute-image-packages
google-compute-engine-oslogin
python-google-compute-engine
Ubuntu 16.04+

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

gce-compute-image-packages
google-compute-engine-oslogin
python-google-compute-engine
python3-google-compute-engine
SUSE (SLES) 12+

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

cloud-regionsrv-client-plugin-gce
google-compute-engine-init
python-gcemetadata
regionServiceClientConfigGCE
Windows

googet installed

certgen
googet
google-compute-engine-auto-updater
google-compute-engine-driver-gga
google-compute-engine-driver-netkvm
google-compute-engine-driver-pvpanic
google-compute-engine-driver-vioscsi
google-compute-engine-metadata-scripts
google-compute-engine-powershell
google-compute-engine-sysprep
google-compute-engine-vss
google-compute-engine-windows

Qué sigue

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine