Instalar o ambiente de convidado


Nesta página, explicamos como instalar manualmente o ambiente de convidado em instâncias de máquina virtual (VM). O ambiente convidado é um conjunto de scripts, daemons e binários que as instâncias precisam para serem executadas no Compute Engine. Para mais informações, consulte Ambiente convidado.

Na maioria dos casos, se você usa imagens públicas do SO fornecidas pelo Google, o ambiente de convidado é incluído automaticamente. Para uma lista completa de imagens do SO que incluem automaticamente o ambiente convidado, consulte Detalhes do sistema operacional.

Se o ambiente convidado não estiver instalado ou estiver desatualizado, instale ou atualize-o. Para identificar esses cenários, consulte Quando instalar ou atualizar o ambiente convidado.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação verifica sua identidade para acesso a serviços e APIs do Google Cloud . Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    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. Instale a CLI do Google Cloud. Após a instalação, inicialize a CLI do Google Cloud executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

    2. Set a default region and zone.

Quando instalar ou atualizar o ambiente convidado

Na maioria dos casos, não é necessário instalar ou atualizar manualmente o ambiente convidado. Consulte as seções a seguir para saber quando é necessário instalar ou atualizar manualmente.

Verificar os requisitos de instalação

Antes de instalar o ambiente de convidado, use o procedimento Validar o ambiente de convidado para verificar se ele está sendo executado na instância. Se o ambiente de convidado estiver disponível na instância, mas estiver desatualizado, atualize-o.

Talvez seja necessário instalar o ambiente de convidado nas seguintes situações:

  • A imagem do SO fornecida pelo Google não tem o ambiente convidado instalado.

  • Você importa uma imagem personalizada ou um disco virtual para o Compute Engine e escolhe impedir a instalação automática do ambiente convidado.

    Ao importar discos virtuais ou imagens personalizadas, você pode permitir que o Compute Engine instale o ambiente convidado para você. No entanto, se você optar por não instalar o ambiente convidado durante o processo de importação, será preciso fazer a instalação manual.

  • Você migra VMs para o Compute Engine usando o Migrate to Virtual Machines.

Para instalar o ambiente convidado, consulte Métodos de instalação.

Verificar os requisitos de atualização

Talvez seja necessário atualizar o ambiente de convidado nas seguintes situações:

Para atualizar o ambiente de convidado, consulte Atualizar o ambiente de convidado.

Métodos de instalação

É possível instalar o ambiente de convidado de várias maneiras. Escolha uma das seguintes opções:

Sistemas operacionais compatíveis

É possível instalar ou atualizar o ambiente convidado em VMs que usam versões de imagens do SO no ciclo de vida de disponibilidade geral (GA) ou no estágio de ciclo de vida de suporte estendido.

Para conferir uma lista de versões de imagens do SO e o estágio do ciclo de vida delas no Compute Engine, consulte Detalhes do sistema operacional.

Limitações

Não é possível instalar ou usar manualmente a ferramenta de importação para instalar ambientes convidados para Fedora CoreOS e sistemas operacionais otimizados para contêineres (COS). Para o COS, o Google recomenda usar as imagens públicas fornecidas pelo Google, que incluem o ambiente de convidado como um componente principal.

Instalar o ambiente de convidado

Para instalar manualmente o ambiente convidado, selecione um dos seguintes métodos, dependendo da sua capacidade de se conectar à instância:

Instalar o ambiente de convidado no local

Use este método para instalar o ambiente de convidado se for possível se conectar à instância alvo usando SSH. Se não for possível se conectar à instância para instalar o ambiente de convidado, instale o ambiente de convidado clonando seu 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 de convidado se você tiver pelo menos uma conta de usuário com um SSH funcional baseado em chave.

CentOS/RHEL/Rocky

  1. Verifique se a versão do seu sistema operacional é compatível.
  2. Determine a versão do CentOS/RHEL/Rocky Linux. Em seguida, crie o arquivo do repositório de origem, /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. Atualize as listas de pacotes:

    sudo yum makecache
    sudo yum updateinfo
    
  4. Instale os pacotes do ambiente de convidado:

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. Reinicie a instância. Em seguida, inspecione o registro do console para garantir que o ambiente de convidado seja carregado assim que iniciar o backup.

  6. Conecte-se à instância usando SSH para verificar. Para instruções detalhadas, consulte conectar-se à instância usando SSH.

Debian

  1. Verifique se a versão do seu sistema operacional é compatível.
  2. Instale a chave GPG pública do repositório:

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. Determine o nome da distribuição Debian. Em seguida, crie o arquivo da lista de fontes, /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. Atualize as listas de pacotes:

    sudo apt update
  5. Instale os pacotes do ambiente de convidado:

    sudo apt install -y google-cloud-packages-archive-keyring
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. Reinicie a instância. Em seguida, inspecione o registro do console para garantir que o ambiente de convidado seja carregado assim que iniciar o backup.

  7. Conecte-se à instância usando SSH para verificar. Para instruções detalhadas, consulte conectar-se à instância usando SSH.

Ubuntu

  1. Verifique se a versão do seu sistema operacional é compatível.

  2. Ative o repositório Universe. A Canonical publica pacotes referentes ao ambiente de convidado dela no repositório Universe.

    sudo apt-add-repository universe
  3. Atualize as listas de pacotes:

    sudo apt update
  4. Instale os pacotes do ambiente de convidado:

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. Reinicie a instância. Em seguida, inspecione o registro do console para garantir que o ambiente de convidado seja carregado assim que iniciar o backup.

  6. Conecte-se à instância usando SSH para verificar. Para instruções detalhadas, consulte conectar-se à instância usando SSH.

SLES

  1. Verifique se a versão do seu sistema operacional é compatível.

  2. Ative o Módulo de nuvem pública

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

    sudo zypper refresh
  4. Instale os pacotes do ambiente de convidado:

    sudo zypper install -y google-guest-{agent,configs,oslogin} \
    google-osconfig-agent
    sudo systemctl enable /usr/lib/systemd/system/google-*
    
  5. Reinicie a instância. Em seguida, inspecione o registro do console para garantir que o ambiente de convidado seja carregado assim que iniciar o backup.

  6. Conecte-se à instância usando SSH para verificar. Para instruções detalhadas, consulte conectar-se à instância usando SSH.

Windows

Antes de começar, verifique se a versão do seu sistema operacional é compatível.

Para instalar o ambiente de convidado do Windows, execute os comandos a seguir em um prompt elevado do PowerShell, versão 3.0 ou superior. O comando Invoke-WebRequest exige o PowerShell versão 3.0 ou mais recente.

  1. Faça o download e instale 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 a instalação, o GooGet adiciona conteúdo ao ambiente do sistema. Após a instalação, inicie um novo console do PowerShell. Como alternativa, forneça o caminho completo para o arquivo googet.exe (C:\ProgramData\GooGet\googet.exe).

  2. Abra um novo console e adicione o repositório google-compute-engine-stable.

    googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
  3. Instale os principais pacotes do ambiente de convidado do 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. Instale o pacote opcional do ambiente de convidado do Windows.

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

    Uso do comando googet.

    Para ver os pacotes disponíveis, execute o comando googet available.

    Para ver os pacotes instalados, execute o comando googet installed.

    Para atualizar para a versão mais recente do pacote, execute o comando googet update.

    Para ver outros comandos, execute googet help.

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

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

Esse método se aplica apenas a distribuições Linux. Para o Windows, use um dos outros dois métodos de instalação.

Use o Cloud Shell para executar este procedimento. Para executar esse procedimento se você não estiver usando o Cloud Shell, instale o processador JSON da linha de comando jq. Esse processador filtra a saída da CLI gcloud. O Cloud Shell tem o jq pré-instalado.

CentOS/RHEL/Rocky

  1. Verifique se a versão do seu sistema operacional é compatível.

  2. Crie uma nova instância para servir como a de resgate. Dê o nome de rescue a ela. Ela não precisa executar o mesmo SO Linux da instância problemática. Neste exemplo, é usado o Debian 9 na instância de resgate.

  3. 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. Essa variável simplifica a referência à instância nas etapas posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Substitua VM_NAME pelo nome da instância problemática.

    2. Interrompa a instância problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Consiga o nome do disco de inicialização da instância com problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crie um snapshot do disco de inicialização.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crie um novo disco a partir do snapshot.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Exclua o snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Anexe o novo disco à instância de resgate e ative o volume raiz dela. Como esse procedimento anexa apenas um disco extra, o identificador de dispositivo do novo disco é /dev/sdb. Por padrão, o CentOS/RHEL/Rocky Linux usa o primeiro volume em um disco como raiz. Portanto, o identificador do volume será /dev/sdb1. Em configurações personalizadas, use lsblk para determinar o identificador do volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conecte-se à instância de resgate usando SSH:

    gcloud compute ssh rescue
  6. Siga as próximas etapas na instância de resgate.

    1. Ative o volume raiz do novo 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. Crie o script 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. Faça backup do arquivo rc.local atual, mova o script temporário rc.local para o disco montado e defina as permissões para que o script temporário seja executado na inicialização. O script temporário substitui o script original quando a inicialização é concluída. Para isso, execute o seguinte 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. 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.

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

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crie uma instância que sirva 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 Google Cloud :

    1. No console do Google Cloud , acesse a página Instâncias de VM.

      Acessar instâncias de VM

    2. Clique na instância problemática e, em seguida, selecione Criar semelhante.

    3. Especifique um nome para a instância de substituição. Na seção Disco de inicialização, clique em Alterar e, em seguida, em Discos existentes. Selecione o novo disco.

    4. Clique em Criar. A instância de substituição é iniciada automaticamente depois de criada.

    Quando a instância de substituição é inicializada, o script temporário rc.local é executado e instala o ambiente de convidado. Para ver o andamento desse script, inspecione nos registros do console as linhas emitidas pelo script temporário rc.local. Para ver os registros, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Substitua REPLACEMENT_VM_NAME pelo nome atribuído à instância substituta.

    A instância de substituição é reinicializada automaticamente quando o script temporário rc.local é concluído. Durante a segunda reinicialização, é possível inspecionar o registro do console para garantir que o ambiente de convidado seja carregado.

  9. Verifique se é possível se conectar à instância usando SSH.

    Depois de verificar se a instância de substituição está funcionando, você pode parar ou excluir a instância problemática.

Debian

  1. Verifique se a versão do seu sistema operacional é compatível.

  2. Crie uma nova instância para servir como a de resgate. Dê o nome de rescue a ela. Ela não precisa executar o mesmo SO Linux da instância problemática. Neste exemplo, é usado o Debian 9 na instância de resgate.

  3. Interrompa 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. Essa variável simplifica a referência à instância nas etapas posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Substitua VM_NAME pelo nome da instância problemática.

    2. Interrompa a instância problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Consiga o nome do disco de inicialização da instância com problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crie um snapshot do disco de inicialização.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crie um novo disco a partir do snapshot.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Exclua o snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Anexe o novo disco à instância de resgate e ative o volume raiz dela. Como esse procedimento anexa apenas um disco extra, o identificador de dispositivo do novo disco é /dev/sdb. Por padrão, o Debian usa o primeiro volume no disco como raiz. Portanto, o identificador do volume será /dev/sdb1. Em configurações personalizadas, use lsblk para determinar o identificador do volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conecte-se à instância de resgate usando SSH:

    gcloud compute ssh rescue
  6. Siga as próximas etapas na instância de resgate.

    1. Ative o volume raiz do novo 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. Crie o script 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. Faça backup do arquivo rc.local atual, mova o script temporário rc.local para o disco montado e defina as permissões para que o script temporário seja executado na inicialização. O script temporário substitui o script original quando a inicialização é concluída. Para isso, execute o seguinte 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. 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.

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

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. 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 Google Cloud :

    1. No console do Google Cloud , acesse a página Instâncias de VM.

      Acessar instâncias de VM

    2. Clique na instância problemática e, em seguida, selecione Criar semelhante.

    3. Especifique um nome para a instância de substituição. Na seção Disco de inicialização, clique em Alterar e, em seguida, em Discos existentes. Selecione o novo disco.

    4. Clique em Criar. A instância de substituição é iniciada automaticamente depois de criada.

    Quando a instância de substituição é inicializada, o script temporário rc.local é executado e instala o ambiente de convidado. Para ver o andamento desse script, inspecione nos registros do console as linhas emitidas pelo script temporário rc.local. Para ver os registros, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Substitua REPLACEMENT_VM_NAME pelo nome atribuído à instância substituta.

    A instância de substituição é reinicializada automaticamente quando o script temporário rc.local é concluído. Durante a segunda reinicialização, é possível inspecionar o registro do console para garantir que o ambiente de convidado seja carregado.

  9. Verifique se é possível se conectar à instância usando SSH.

    Depois de verificar se a instância de substituição está funcionando, você pode parar ou excluir a instância problemática.

Ubuntu

  1. Verifique se a versão do seu sistema operacional é compatível.

  2. Crie uma nova instância para servir como a de resgate. Dê o nome de rescue a ela. Ela não precisa executar o mesmo SO Linux da instância problemática. Neste exemplo, é usado o Debian 9 na instância de resgate.

  3. Interrompa 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. Essa variável simplifica a referência à instância nas etapas posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Substitua VM_NAME pelo nome da instância problemática.

    2. Interrompa a instância problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Consiga o nome do disco de inicialização da instância com problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crie um snapshot do disco de inicialização.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crie um novo disco a partir do snapshot.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Exclua o snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Anexe o novo disco à instância de resgate e ative o volume raiz dela. Como esse procedimento anexa apenas um disco extra, o identificador de dispositivo do novo disco é /dev/sdb. Por padrão, o Ubuntu marca o volume raiz como 1. Desse modo, o identificador do volume será /dev/sdb1. Em configurações personalizadas, use lsblk para determinar o identificador do volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conecte-se à instância de resgate usando SSH:

    gcloud compute ssh rescue
  6. Siga as próximas etapas na instância de resgate.

    1. Ative o volume raiz do novo 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. Crie o script 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. Faça backup do arquivo rc.local atual, mova o script temporário rc.local para o disco montado e defina as permissões para que o script temporário seja executado na inicialização. O script temporário substitui o original quando a inicialização é concluída. Para fazer isso, execute o seguinte 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. 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.

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

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. 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 Google Cloud :

    1. No console do Google Cloud , acesse a página Instâncias de VM.

      Acessar instâncias de VM

    2. Clique na instância problemática e, em seguida, selecione Criar semelhante.

    3. Especifique um nome para a instância de substituição. Na seção Disco de inicialização, clique em Alterar e, em seguida, em Discos existentes. Selecione o novo disco.

    4. Clique em Criar. A instância de substituição é iniciada automaticamente depois de criada.

    Quando a instância de substituição é inicializada, o script temporário rc.local é executado e instala o ambiente de convidado. Para ver o andamento desse script, inspecione nos registros do console as linhas emitidas pelo script temporário rc.local. Para ver os registros, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Substitua REPLACEMENT_VM_NAME pelo nome atribuído à instância substituta.

    A instância de substituição é reinicializada automaticamente quando o script temporário rc.local é concluído. Durante a segunda reinicialização, é possível inspecionar o registro do console para garantir que o ambiente de convidado seja carregado.

  9. Verifique se é possível se conectar à instância usando SSH.

    Depois de verificar se a instância de substituição está funcionando, você pode interromper ou excluir a instância problemática.

Atualizar o ambiente de convidado

Se você receber uma mensagem informando que o ambiente de convidado está desatualizado, atualize os pacotes do sistema operacional da seguinte maneira:

CentOS/RHEL/Rocky

Para atualizar os sistemas operacionais CentOS, RHEL e Rocky Linux, execute os seguintes comandos:

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

Debian

Para atualizar os sistemas operacionais Debian, execute os seguintes comandos:

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

Ubuntu

Para atualizar os sistemas operacionais Ubuntu, execute os seguintes comandos:

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

SLES

Para atualizar os sistemas operacionais SLES, execute os seguintes comandos:

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

Windows

Para atualizar sistemas operacionais Windows, execute o seguinte comando:

googet update

Validar o ambiente de convidado

Para verificar se um ambiente de convidado está instalado, inspecione os registros do sistema emitidos no console enquanto uma instância é inicializada ou liste os pacotes instalados durante a conexão com a instância.

Conferir os registros esperados do console para o ambiente de convidado

Nesta tabela, você vê o resumo do resultado esperado dos registros do console emitidos por instâncias com ambientes de convidado ativos durante a inicialização.

Sistema operacional Gerenciamento de serviços Resposta esperada
CentOS/RHEL/Rocky Linux
Debian
Ubuntu
SLES
Container-Optimized OS 89 e mais recente
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 e 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 os registros do console de uma instância, siga estas etapas.

Console

  1. No console do Google Cloud , acesse a página Instâncias de VM.

    Acessar instâncias de VM

    1. Selecione a 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 na tabela que precede estas etapas.

gcloud

  1. Reinicie ou redefina a instância.
  2. Use o subcomando gcloud compute instances get-serial-port-output para se conectar usando a Google Cloud CLI. Exemplo:

    gcloud compute instances get-serial-port-output VM_NAME

    Substitua VM_NAME pelo nome da instância que você precisa examinar.

  3. Procure o resultado esperado na tabela que precede estas etapas.

Ver serviços carregados por versão do sistema operacional

Nesta tabela, você vê o resumo dos serviços que precisam ser carregados nas instâncias com ambientes de convidado ativos. Você precisa executar o comando para listar serviços após se conectar à instância. Portanto, você só poderá fazer essa verificação se tiver acesso à instância.

Sistema operacional Comando para listar serviços Resposta esperada
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 ou versões mais recentes
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 pacotes instalados por versão do sistema operacional

Nesta tabela, você vê o resumo dos pacotes que precisam ser instalados nas instâncias com ambientes de convidado ativos. É preciso executar o comando para listar pacotes instalados depois de se conectar à instância. Portanto, só é possível fazer essa verificação se você tiver acesso à instância.

Para mais informações sobre esses pacotes, consulte Componentes do ambiente convidado.

Sistema operacional Comando para listar pacotes Resposta esperada
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

A seguir