Como instalar o ambiente convidado Linux

Nesta página, descrevemos como instalar o ambiente convidado Linux para o Compute Engine. As instâncias do Linux criadas por meio de imagens públicas fornecidas pelo Google incluem um ambiente convidado instalado pelo mantenedor do SO. Para mais detalhes sobre as imagens públicas fornecidas pelo Google, incluindo uma lista completa dessas imagens, consulte Imagens públicas.

O ambiente convidado é um conjunto de processos e configurações de instâncias do Linux para o Compute Engine que fornecem os principais recursos do Compute Engine.

As seguintes organizações criam e mantêm pacotes do ambiente convidado para distribuições específicas do Linux:

  • Canonical:
  • Google:
    • CentOS/Red Hat Enterprise Linux (RHEL) 6 e 7
    • Debian 9
  • SUSE:
    • SLES 12, SLES 15, SLES para SAP

O CoreOS fornece os seguintes recursos para ter compatibilidade com as funcionalidades do ambiente convidado:

Antes de começar

Conteúdo

Como instalar o ambiente convidado

Existem duas maneiras de instalar o ambiente convidado. Escolha uma das duas opções a seguir:

Instalar o ambiente convidado no local

Use este método para instalar o ambiente de convidado se você puder se conectar à instância de destino usando SSH. Se não conseguir se conectar à instância para instalar o ambiente de convidado, você poderá instalar o ambiente de convidado clonando o disco de inicialização e usando um script de inicialização.

Esse procedimento será útil para imagens importadas se você puder se conectar usando a autenticação SSH baseada em senha. Ele também poderá ser usado para reinstalar o ambiente convidado se você tiver pelo menos uma conta de usuário com SSH funcional baseado em chave.

CentOS/RHEL

Determine a versão do CentOS/RHEL e crie o arquivo de repositório de origem /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
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

Atualize as listas de pacotes:

sudo yum makecache
sudo yum updateinfo

Instale os pacotes do ambiente convidado:

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

Reinicie a instância e inspecione o respectivo registro do console para garantir que o ambiente convidado seja carregado assim que iniciar o backup.

Verifique se você pode se conectar à instância usando SSH.

Debian

Instale a chave pública GPG de repositório:

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Determine o nome da distribuição do Debian e crie o arquivo de lista de origem /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

Atualize as listas de pacotes:

sudo apt-get update

Instale os pacotes do ambiente convidado:

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

Reinicie a instância e inspecione o respectivo registro do console para garantir que o ambiente convidado seja carregado assim que iniciar o backup.

Verifique se você pode se conectar à instância usando SSH.

Ubuntu

A Canonical publica pacotes referentes ao ambiente convidado dela no repositório Universe. Primeiramente, ative o repositório Universe:

sudo apt-add-repository universe

Atualize as listas de pacotes:

sudo apt-get update

Instale os pacotes do ambiente convidado:

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

Reinicie a instância e inspecione o respectivo registro do console para garantir que o ambiente convidado seja carregado assim que iniciar o backup.

Verifique se você pode se conectar à instância usando SSH.

Clonar disco de inicialização e usar script de inicialização

Se não for possível se conectar manualmente a uma instância, instale o ambiente convidado usando este procedimento, que inclui as etapas a seguir que podem ser concluídas no console do GCP e no Cloud Shell.

  1. Crie outra instância, se necessário, para anexar o novo disco. Vamos chamá-la de instância de resgate.

  2. Pare a instância em que você precisa reinstalar o ambiente convidado. Vamos denominá-la instância problemática.

  3. Enquanto a instância está sendo parada, crie um instantâneo do disco de inicialização na instância problemática.

  4. Crie um novo disco permanente com base nesse instantâneo.

  5. Anexe o novo disco à instância de resgate e ative o volume raiz. Copie um script rc.local temporário, que tem por finalidade instalar o ambiente convidado no volume raiz.

  6. Separe o novo disco da instância de resgate e crie uma instância de substituição usando o novo disco.

  7. Inicie a instância de substituição.

  8. A instância de substituição é inicializada pela primeira vez e executa o script temporário rc.local. Esse script vai instalar o ambiente convidado, excluir-se e reinicializar.

  9. Confirme se a instância de substituição está operante.

  10. Opcionalmente, pare ou exclua a instância problemática.

Use o Cloud Shell para executar este procedimento:

CentOS/RHEL

  1. Crie uma nova instância para servir como a de resgate. Atribua a ela o nome resgate para que as instruções fiquem claras. Não é necessário executar o mesmo SO Linux da instância problemática. Nós validamos este procedimento com o Debian 9 como a instância de resgate.

  2. Pare a instância problemática e crie uma cópia do disco de inicialização correspondente.

    1. Defina um nome de variável para a instância problemática. Isso facilitará as etapas seguintes deste procedimento. Substitua INSTANCE_NAME pelo nome da instância problemática:
      PROB_INSTANCE_NAME=INSTANCE_NAME
    2. Pare a instância problemática:
      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Determine o nome do disco de inicialização:
      PROB_INSTANCE_DISK="$(gcloud compute instances describe "$PROB_INSTANCE_NAME" 
      --format='json' | jq -r '.disks[] | select(.boot == true) | .source')"
    4. Crie um instantâneo do disco de inicialização:
      DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" --snapshot-names "$DISK_SNAPSHOT"
    5. Crie um novo disco com base no instantâneo:
      NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      gcloud compute disks create "$NEW_DISK" --source-snapshot="$DISK_SNAPSHOT"
    6. Exclua o instantâneo:
      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  3. Anexe o novo disco à instância de resgate e ative o volume raiz. Como este procedimento apenas anexa um disco adicional, o identificador do dispositivo do novo disco será /dev/sdb. Por padrão, o CentOS/RHEL usa o primeiro volume no disco como raiz. Desse modo, o identificador do volume será /dev/sdb1. Em casos específicos, use lsblk para determinar o identificador do volume.

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

  4. Conecte-se à instância de resgate usando SSH:

    gcloud compute ssh rescue

  5. Execute estas etapas usando a instância de resgate:

    1. Ative o volume raiz do novo disco.

      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. Crie o script rc.local.

      cat <<'EOF' >/tmp/rc.local
      \#!/bin/bash
      declare -a PKG_LIST=(python-google-compute-engine \
      google-compute-engine-oslogin \
      google-compute-engine)
      declare -x YUM_SERVER="packages.cloud.google.com"
      declare -x REPO_FILE="/etc/yum.repos.d/google-cloud.repo"
      echo "== Installing a Linux Guest Environment for CentOS/RHEL =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL version..."
      OS_RELEASE_FILE="/etc/redhat-release"
      if [ ! -f "$OS_RELEASE_FILE" ]; then
         OS_RELEASE_FILE="/etc/centos-release"
      fi
      if [ ! -f "$OS_RELEASE_FILE" ]; then
         echo "ERROR: This system does not appear to be CentOS/RHEL."
         exit 1
      fi
      DIST=$(cat "$OS_RELEASE_FILE" | grep -o '[0-9].*' | awk -F'.' '{print $1}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine version of CentOS/RHEL."
         exit 1
      fi
      echo "Updating $REPO_FILE..."
      tee "$REPO_FILE" << EOM
      [google-cloud-compute]
      name=Google Cloud Compute
      baseurl=https://$YUM_SERVER/yum/repos/google-cloud-compute-el${DIST}-x86_64
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://$YUM_SERVER/yum/doc/yum-key.gpg
      https://$YUM_SERVER/yum/doc/rpm-package-key.gpg
      EOM
      echo "Running yum makecache..."
      yum makecache
      echo "Running yum updateinfo..."
      yum updateinfo
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running yum install $pkg..."
         yum install -y $pkg
         if [ "$?" != "0" ]; then
            echo "ERROR: Failed to install $pkg."
         fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.d/rc.local
      \# Move back any previous rc.local:
      if [ -f "/etc/moved-rc.local" ]; then
         echo "Restoring a previous rc.local script."
         mv "/etc/moved-rc.local" "/etc/rc.d/rc.local"
      fi
      echo "Restarting the instance..."
      reboot now
      EOF
    3. Mova o script rc.local para o volume raiz do novo disco e defina as permissões. Separe qualquer script rc.local existente. O script temporário o substituirá quando for concluído.

      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. Desative o volume raiz do novo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Saia da sessão SSH para a instância de resgate.

  6. Separe o novo disco da instância de resgate.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  7. Crie uma nova instância para servir como substituta. Ao criar a instância de substituição, especifique o novo disco como o de inicialização. É possível criar a instância de substituição usando o Console do Cloud:

    1. Acesse a página "Instâncias de VMs".

      Acessar a página "Instâncias de VMs"

    2. Clique na instância problemática e, em seguida, clique em Clonar.
    3. Especifique um nome para a instância de substituição. Na seção Disco de inicialização, clique em Alterar e, em seguida, clique em Discos existentes. Selecione o novo disco.
    4. Clique em Criar. A instância de substituição será iniciada após a criação.
  8. Aguarde a instância de substituição ser iniciada. Durante a inicialização, ela executará o script temporário rc.local, instalando o ambiente convidado Linux. Para ver o andamento desse script, inspecione nos registros do console as linhas emitidas pelo script rc.local temporário. Por exemplo, é possível fazer isso com gcloud, conforme mostrado abaixo. Altere REPLACEMENT_INSTANCE_NAME pelo nome que você atribuiu à instância de substituição.

    gcloud compute instances get-serial-port-output REPLACEMENT_INSTANCE_NAME
  9. A instância de substituição será outra vez reinicializada automaticamente quando o script rc.local temporário for concluído. Começando com a segunda reinicialização, é possível inspecionar o registro do console para garantir que o ambiente convidado seja carregado. Verifique se você pode se conectar à instância usando SSH.

  10. Depois que você estiver satisfeito com o funcionamento da instância de substituição, poderá parar ou excluir a instância problemática.

Debian

  1. Crie uma nova instância para servir como a de resgate. Atribua a ela o nome resgate para que as instruções fiquem claras. Não é necessário executar o mesmo SO Linux da instância problemática. Nós validamos este procedimento com o Debian 9 como a instância de resgate.

  2. Pare a instância problemática e crie uma cópia do disco de inicialização correspondente.

    1. Defina um nome de variável para a instância problemática. Isso facilitará as etapas seguintes deste procedimento. Substitua INSTANCE_NAME pelo nome da instância problemática:
      PROB_INSTANCE_NAME=INSTANCE_NAME
    2. Pare a instância problemática:
      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Determine o nome do disco de inicialização:
      PROB_INSTANCE_DISK="$(gcloud compute instances describe "$PROB_INSTANCE_NAME" 
      --format='json' | jq -r '.disks[] | select(.boot == true) | .source')"
    4. Crie um instantâneo do disco de inicialização:
      DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" --snapshot-names "$DISK_SNAPSHOT"
    5. Crie um novo disco com base no instantâneo:
      NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      gcloud compute disks create "$NEW_DISK" --source-snapshot="$DISK_SNAPSHOT"
    6. Exclua o instantâneo:
      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  3. Anexe o novo disco à instância de resgate e ative o volume raiz. Como este procedimento apenas anexa um disco adicional, o identificador do dispositivo do novo disco será /dev/sdb. Por padrão, o Debian usa o primeiro volume no disco como raiz. Desse modo, o identificador do volume será /dev/sdb1. Em casos específicos, use lsblk para determinar o identificador do volume.

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

  4. Conecte-se à instância de resgate usando SSH:

    gcloud compute ssh rescue

  5. Execute estas etapas usando a instância de resgate:

    1. Ative o volume raiz do novo disco.

      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. Crie o script rc.local.

      cat <<'EOF' >/tmp/rc.local
      \#!/bin/bash
      declare -a PKG_LIST=(google-cloud-packages-archive-keyring \
      python-google-compute-engine \
      python3-google-compute-engine \
      google-compute-engine-oslogin \
      google-compute-engine)
      declare -x APT_SERVER="packages.cloud.google.com"
      declare -x REPO_FILE="/etc/apt/sources.list.d/google-cloud.list"
      echo "== Installing a Linux Guest Environment for Debian =="
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      DIST=$(cat /etc/os-release | grep "VERSION=" \
      | sed "s/\"\|(\|)\|VERSION=//g" | awk '{print tolower($NF)}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine Debian version."
         exit 1
      fi
      echo "Adding GPG key for $APT_SERVER."
      curl https://$APT_SERVER/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating $REPO_FILE..."
      tee "$REPO_FILE" << EOM
      deb http://$APT_SERVER/apt google-compute-engine-${DIST}-stable main
      deb http://$APT_SERVER/apt google-cloud-packages-archive-keyring-${DIST} main
      EOM
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running apt install $pkg..."
         apt install -y $pkg
         if [ "$?" != "0" ]; then
            echo "ERROR: Failed to install $pkg."
         fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.local
      \# Move back any previous rc.local:
      if [ -f "/etc/moved-rc.local" ]; then
         echo "Restoring a previous rc.local script."
         mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot now
      EOF
    3. Mova o script rc.local para o volume raiz do novo disco e defina as permissões. Separe qualquer script rc.local existente. O script temporário o substituirá quando for concluído.

      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. Desative o volume raiz do novo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Saia da sessão SSH para a instância de resgate.

  6. Separe o novo disco da instância de resgate.

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

  7. Crie uma nova instância para servir como substituta. Ao criar a instância de substituição, especifique o novo disco como o de inicialização. É possível criar a instância de substituição usando o Console do Cloud:

    1. Acesse a página "Instâncias de VMs".

      Acessar a página "Instâncias de VMs"

    2. Clique na instância problemática e, em seguida, clique em Clonar.
    3. Especifique um nome para a instância de substituição. Na seção Disco de inicialização, clique em Alterar e, em seguida, clique em Discos existentes. Selecione o novo disco.
    4. Clique em Criar. A instância de substituição será iniciada após a criação.
  8. Aguarde a instância de substituição ser iniciada. Durante a inicialização, ela executará o script temporário rc.local, instalando o ambiente convidado Linux. Para ver o andamento desse script, inspecione nos registros do console as linhas emitidas pelo script rc.local temporário. Por exemplo, é possível fazer isso com gcloud, conforme mostrado abaixo. Altere REPLACEMENT_INSTANCE_NAME pelo nome que você atribuiu à instância de substituição.

    gcloud compute instances get-serial-port-output REPLACEMENT_INSTANCE_NAME

  9. A instância de substituição será outra vez reinicializada automaticamente quando o script rc.local temporário for concluído. Começando com a segunda reinicialização, é possível inspecionar o registro do console para garantir que o ambiente convidado seja carregado. Verifique se você pode se conectar à instância usando SSH.

  10. Depois que você estiver satisfeito com o funcionamento da instância de substituição, poderá parar ou excluir a instância problemática.

Ubuntu

  1. Crie uma nova instância para servir como a de resgate. Atribua a ela o nome resgate para que as instruções fiquem claras. Não é necessário executar o mesmo SO Linux da instância problemática. Nós validamos este procedimento com o Debian 9 como a instância de resgate.

  2. Pare a instância problemática e crie uma cópia do disco de inicialização correspondente.

    1. Defina um nome de variável para a instância problemática. Isso facilitará as etapas seguintes deste procedimento. Substitua INSTANCE_NAME pelo nome da instância problemática:
      PROB_INSTANCE_NAME=INSTANCE_NAME
    2. Pare a instância problemática:
      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Determine o nome do disco de inicialização:
      PROB_INSTANCE_DISK="$(gcloud compute instances describe "$PROB_INSTANCE_NAME" 
      --format='json' | jq -r '.disks[] | select(.boot == true) | .source')"
    4. Crie um instantâneo do disco de inicialização:
      DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" --snapshot-names "$DISK_SNAPSHOT"
    5. Crie um novo disco com base no instantâneo:
      NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      gcloud compute disks create "$NEW_DISK" --source-snapshot="$DISK_SNAPSHOT"
    6. Exclua o instantâneo:
      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  3. Anexe o novo disco à instância de resgate e ative o volume raiz. Como este procedimento apenas anexa um disco adicional, o identificador do dispositivo do novo disco será /dev/sdb. Por padrão, o Ubuntu marca o volume raiz como 1. Desse modo, o identificador do volume será /dev/sdb1. Em casos específicos, use lsblk para determinar o identificador do volume.

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

  4. Conecte-se à instância de resgate usando SSH:

    gcloud compute ssh rescue

  5. Execute estas etapas usando a instância de resgate:

    1. Ative o volume raiz do novo disco.

      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. Crie o script rc.local.

      cat <<'EOF' >/tmp/rc.local
      \#!/bin/bash
      declare -a PKG_LIST=(python-google-compute-engine \
      python3-google-compute-engine \
      google-compute-engine-oslogin \
      gce-compute-image-packages)
      echo "== Installing a Linux Guest Environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Determining Ubuntu version..."
      DIST=$(cat /etc/os-release | grep "VERSION_ID=" \
      | sed "s/\"\|(\|)\|VERSION_ID=//g" | awk -F. '{print tolower($1)}')
      if [ -z $DIST ]; then
         echo "ERROR: Could not determine Ubuntu version."
         exit 1
      fi
      if [ "$DIST" -lt "16" ]; then
         # Adjust package list for older Ubuntu:
         echo "Ubuntu version less than 16.04."
         declare -a PKG_LIST=(python-google-compute-engine \
         gce-compute-image-packages)
      fi
      echo "Ensuring Ubuntu universe repositories are enabled."
      apt-add-repository universe
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
         echo "Running apt install $pkg..."
         apt install -y $pkg
         if [ "$?" != "0" ]; then
            echo "ERROR: Failed to install $pkg."
         fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.local
      \# Move back any previous rc.local:
      if [ -f "/etc/moved-rc.local" ]; then
         echo "Restoring a previous rc.local script."
         mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot now
      EOF
    3. Mova o script rc.local para o volume raiz do novo disco e defina as permissões. Separe qualquer script rc.local existente. O script temporário o substituirá quando for concluído.

      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. Desative o volume raiz do novo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Saia da sessão SSH para a instância de resgate.

  6. Separe o novo disco da instância de resgate.

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

  7. Crie uma nova instância para servir como substituta. Ao criar a instância de substituição, especifique o novo disco como o de inicialização. É possível criar a instância de substituição usando o Console do Cloud:

    1. Acesse a página "Instâncias de VMs".

      Acessar a página "Instâncias de VMs"

    2. Clique na instância problemática e, em seguida, clique em Clonar.
    3. Especifique um nome para a instância de substituição. Na seção Disco de inicialização, clique em Alterar e, em seguida, clique em Discos existentes. Selecione o novo disco.
    4. Clique em Criar. A instância de substituição será iniciada após a criação.
  8. Aguarde a instância de substituição ser iniciada. Durante a inicialização, ela executará o script temporário rc.local, instalando o ambiente convidado Linux. Para ver o andamento desse script, inspecione nos registros do console as linhas emitidas pelo script rc.local temporário. Por exemplo, é possível fazer isso com gcloud, conforme mostrado abaixo. Altere REPLACEMENT_INSTANCE_NAME pelo nome que você atribuiu à instância de substituição.

    gcloud compute instances get-serial-port-output REPLACEMENT_INSTANCE_NAME

  9. A instância de substituição será outra vez reinicializada automaticamente quando o script rc.local temporário for concluído. Começando com a segunda reinicialização, é possível inspecionar o registro do console para garantir que o ambiente convidado seja carregado. Verifique se você pode se conectar à instância usando SSH.

  10. Depois que você estiver satisfeito com o funcionamento da instância de substituição, poderá parar ou excluir a instância problemática.

Validar o ambiente convidado

A presença de um ambiente convidado pode ser determinada pela inspeção de registros do sistema emitidos no console enquanto uma instância é iniciada ou pela listagem dos pacotes instalados durante a conexão com a instância.

Registros esperados do console para o ambiente convidado

Esta tabela resume o resultado esperado dos registros do console emitidos por instâncias com ambientes convidados ativos enquanto são inicializados.

Sistema operacional Gerenciamento de serviços 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 systemd e ignition

systemd[1]: Starting Ignition (files)...
[finished] enabling unit "coreos-metadata-sshkeys@.service
[finished] enabling unit "oem-gce.service"
[finished] enabling unit "oem-cloudinit.service"
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

Para ver os registros do console de uma instância, siga as etapas a seguir.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

    1. Clique na instância que você precisa examinar.
    2. Reinicie ou redefina a instância.
    3. Em Registros, clique em Porta serial 1 (console).
    4. Procure o resultado esperado mencionado na tabela acima.

gcloud

  1. Reinicie ou redefina a instância.
  2. Use o subcomando gcloud compute get-serial-port-output para conectar-se usando a ferramenta de linha de comando gcloud. Exemplo:

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

    em que [INSTANCE_NAME] é o nome da instância que você precisa examinar.

  3. Procure o resultado esperado mencionado na tabela acima.

Serviços carregados para o ambiente convidado

Esta tabela resume os serviços que precisam ser carregados nas instâncias com ambientes convidados ativos. O comando para listar serviços precisa ser executado após a conexão com a instância. Portanto, esta verificação somente poderá ser realizada se você tiver acesso a ela.

Sistema operacional Comando para listar serviços 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
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

Pacotes instalados para o ambiente convidado

Esta tabela resume os pacotes que precisam ser instalados nas instâncias com ambientes convidados ativos. O comando para listar pacotes instalados precisa ser executado após a conexão com a instância. Portanto, esta verificação somente poderá ser realizada se você tiver acesso a ela.

Sistema operacional Comando para listar pacotes Resultado esperado
CentOS/RHEL 6 e 7

yum list installed | grep google-compute

google-compute-engine.noarch
google-compute-engine-oslogin.x86_64
python-google-compute-engine.noarch
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

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine