Instale o ambiente convidado


Esta página explica como instalar manualmente o ambiente de convidado em instâncias de máquinas virtuais (VMs). O ambiente convidado é uma coleção de scripts, daemons e ficheiros binários que as instâncias requerem para serem executadas no Compute Engine. Para mais informações, consulte o artigo Ambiente de convidado.

Na maioria dos casos, se usar imagens de SO públicas fornecidas pela Google, o ambiente convidado é incluído automaticamente. Para ver uma lista completa das imagens do SO que incluem automaticamente o ambiente convidado, consulte os Detalhes do sistema operativo.

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

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-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 Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

Quando instalar ou atualizar o ambiente convidado

Na maioria dos casos, não precisa de instalar nem atualizar manualmente o ambiente convidado. Reveja as secções seguintes para saber quando pode ter de instalar ou atualizar manualmente.

Verifique os requisitos de instalação

Antes de instalar o ambiente convidado, use o procedimento Validar o ambiente convidado para verificar se o ambiente convidado é executado na sua instância. Se o ambiente convidado estiver disponível na sua instância, mas estiver desatualizado, atualize o ambiente convidado.

Pode ter de instalar o ambiente convidado nas seguintes situações:

  • A imagem do SO fornecida pela Google necessária não tem o ambiente de convidado instalado.

  • Importe uma imagem personalizada ou um disco virtual para o Compute Engine e opte por impedir a instalação automática do ambiente convidado.

    Quando importa discos virtuais ou imagens personalizadas, pode permitir que o Compute Engine instale o ambiente convidado por si. No entanto, se optar por não instalar o ambiente convidado durante o processo de importação, tem de o instalar manualmente.

  • Migre VMs para o Compute Engine através do Migrate to Virtual Machines.

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

Verifique os requisitos de atualização

Pode ter de atualizar o ambiente convidado nas seguintes situações:

Para atualizar o ambiente convidado, consulte o artigo Atualize o ambiente convidado.

Métodos de instalação

Pode instalar o ambiente convidado de várias formas. Escolha uma das seguintes opções:

Sistemas operativos compatíveis

Pode instalar ou atualizar o ambiente de convidado em VMs que usam versões de imagens do SO no ciclo de vida de disponibilidade geral (AG) ou na fase do ciclo de vida de apoio técnico alargado.

Para rever uma lista das versões de imagens do SO e a respetiva fase do ciclo de vida no Compute Engine, consulte os detalhes do sistema operativo.

Limitações

Não pode instalar nem usar manualmente a ferramenta de importação para instalar ambientes de convidados para os sistemas operativos Fedora CoreOS e otimizado para contentores (COS). Para o COS, a Google recomenda a utilização das imagens públicas fornecidas pela Google, que incluem o ambiente convidado como um componente essencial.

Instale o ambiente convidado

Para instalar manualmente o ambiente convidado, selecione um dos seguintes métodos, consoante a sua capacidade de estabelecer ligação à instância:

Instale o ambiente convidado no local

Use este método para instalar o ambiente convidado se conseguir estabelecer ligação à instância de destino através de SSH. Se não conseguir estabelecer ligação à instância para instalar o ambiente convidado, pode, em alternativa, instalar o ambiente convidado clonando o respetivo disco de arranque e usando um script de arranque.

Este procedimento é útil para imagens importadas se puder estabelecer ligação através da autenticação baseada em palavra-passe SSH. Também pode usá-lo para reinstalar o ambiente de convidado se tiver, pelo menos, uma conta de utilizador com um SSH baseado em chave funcional.

CentOS/RHEL/Rocky

  1. Confirme se a versão do seu sistema operativo é suportada.
  2. Determine a versão do CentOS/RHEL/Rocky Linux. Em seguida, crie o ficheiro 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 registo da consola para garantir que o ambiente de convidado é carregado quando é reiniciado.

  6. Ligue-se à instância através de SSH para validar. Para instruções detalhadas, consulte o artigo sobre como ligar à instância através de SSH.

Debian

  1. Confirme se a versão do seu sistema operativo é suportada.
  2. Instale a chave GPG do repositório público:

    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 ficheiro de lista de origem, /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 registo da consola para garantir que o ambiente de convidado é carregado quando é reiniciado.

  7. Ligue-se à instância através de SSH para validar. Para instruções detalhadas, consulte o artigo sobre como ligar à instância através de SSH.

Ubuntu

  1. Confirme se a versão do seu sistema operativo é suportada.

  2. Ative o repositório Universe. A Canonical publica pacotes para o respetivo ambiente de convidados 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 registo da consola para garantir que o ambiente de convidado é carregado quando é reiniciado.

  6. Ligue-se à instância através de SSH para validar. Para instruções detalhadas, consulte o artigo sobre como ligar à instância através de SSH.

SLES

  1. Confirme se a versão do seu sistema operativo é suportada.

  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 registo da consola para garantir que o ambiente de convidado é carregado quando é reiniciado.

  6. Ligue-se à instância através de SSH para validar. Para instruções detalhadas, consulte o artigo sobre como ligar à instância através de SSH.

Windows

Antes de começar, verifique se a versão do seu sistema operativo é suportada.

Para instalar o ambiente convidado do Windows, execute os seguintes comandos numa versão 3.0 ou superior do PowerShell com privilégios elevados. O comando Invoke-WebRequest requer a versão 3.0 ou superior do PowerShell.

  1. Transfira e instale a app 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 conclusão da instalação, inicie uma nova consola do PowerShell. Em alternativa, indique o caminho completo para o ficheiro googet.exe (C:\ProgramData\GooGet\googet.exe).

  2. Abra uma nova consola 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 pacotes principais 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 de ambiente de convidado do Windows opcional.

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

    Usando o 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 comandos adicionais, execute googet help.

Clone o disco de arranque e use o script de arranque

Se não conseguir estabelecer ligação a uma instância para instalar manualmente o ambiente convidado, instale o ambiente convidado através deste procedimento, que inclui os seguintes passos que pode concluir na Google Cloud consola ou no Cloud Shell.

Este método aplica-se 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 este procedimento se não estiver a usar a Cloud Shell, instale o jq processador JSON de linha de comandos. Este processador filtra o resultado da CLI gcloud. O Cloud Shell tem o jq pré-instalado.

CentOS/RHEL/Rocky

  1. Confirme se a versão do seu sistema operativo é suportada.

  2. Crie uma nova instância para servir como instância de recuperação. Dê o nome resgate a esta instância. Esta instância de recuperação não tem de executar o mesmo SO Linux que a instância problemática. Este exemplo usa o Debian 9 na instância de resgate.

  3. Pare a instância problemática e crie uma cópia do respetivo disco de arranque.

    1. Defina um nome de variável para a instância problemática. Esta variável simplifica a referência à instância em passos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

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

    2. Pare a instância problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenha o nome do disco de arranque da instância com problemas.

      export 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 arranque.

      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 da captura de ecrã.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Associe o novo disco à instância de resgate e monte o volume raiz para a instância de resgate. Uma vez que este procedimento anexa apenas um disco adicional, o identificador do dispositivo do novo disco é /dev/sdb. O CentOS/RHEL/Rocky Linux usa o primeiro volume num disco como o volume de raiz por predefinição. Por isso, o identificador do volume deve ser /dev/sdb1. Para configurações personalizadas, use o lsblk para determinar o identificador de volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Estabeleça ligação à instância de recuperação através de SSH:

    gcloud compute ssh rescue
  6. Execute os seguintes passos na instância de recuperação.

    1. Monte o volume de 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 uma cópia de segurança do ficheiro rc.local existente, mova o script rc.local temporário para o disco montado e defina as autorizações para que o script temporário seja executável no arranque. O script temporário substitui o script original quando terminar o arranque. Para o fazer, 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. Desmonte 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 recuperação.

  7. Desassocie o novo disco da instância de recuperação.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crie uma instância para servir como substituição. Quando criar a instância de substituição, especifique o novo disco como o disco de arranque. Pode criar a instância de substituição através da Google Cloud consola:

    1. Na Google Cloud consola, aceda à página Instâncias de VM.

      Aceder às instâncias de VM

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

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

    4. Clique em Criar. A instância de substituição é iniciada automaticamente após a sua criação.

    À medida que a instância de substituição é iniciada, o script rc.local temporário é executado e instala o ambiente convidado. Para ver o progresso deste script, inspecione os registos da consola para ver as linhas emitidas pelo script rc.local temporário. Para ver os registos, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Substitua REPLACEMENT_VM_NAME pelo nome que atribuiu à instância de substituição.

    A instância de substituição é reiniciada automaticamente quando o script rc.local temporário termina. Durante o segundo reinício, pode inspecionar o registo da consola para se certificar de que o ambiente convidado é carregado.

  9. Confirme se consegue estabelecer ligação à instância através de SSH.

    Depois de verificar se a instância de substituição está funcional, pode parar ou eliminar a instância problemática.

Debian

  1. Confirme se a versão do seu sistema operativo é suportada

  2. Crie uma nova instância para servir como instância de recuperação. Dê o nome resgate a esta instância. Esta instância de recuperação não tem de executar o mesmo SO Linux que a instância problemática. Este exemplo usa o Debian 9 na instância de recuperação.

  3. Pare a instância problemática e crie uma cópia do respetivo disco de arranque.

    1. Defina um nome de variável para a instância problemática. Esta variável simplifica a referência à instância em passos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

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

    2. Pare a instância problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenha o nome do disco de arranque da instância com problemas.

      export 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 arranque.

      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 da captura de ecrã.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Associe o novo disco à instância de resgate e monte o volume raiz para a instância de resgate. Uma vez que este procedimento anexa apenas um disco adicional, o identificador do dispositivo do novo disco é /dev/sdb. O Debian usa o primeiro volume num disco como o volume raiz por predefinição. Por isso, o identificador do volume deve ser /dev/sdb1. Para configurações personalizadas, use o lsblk para determinar o identificador de volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Estabeleça ligação à instância de recuperação através de SSH:

    gcloud compute ssh rescue
  6. Execute os seguintes passos na instância de recuperação.

    1. Monte o volume de 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 uma cópia de segurança do ficheiro rc.local existente, mova o script rc.local temporário para o disco montado e defina as autorizações para que o script temporário seja executável no arranque. O script temporário substitui o script original quando terminar o arranque. Para o fazer, 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. Desmonte 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 recuperação.

  7. Desassocie o novo disco da instância de recuperação.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crie uma nova instância para servir como substituição. Quando criar a instância de substituição, especifique o novo disco como o disco de arranque. Pode criar a instância de substituição através da Google Cloud consola:

    1. Na Google Cloud consola, aceda à página Instâncias de VM.

      Aceder às instâncias de VM

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

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

    4. Clique em Criar. A instância de substituição é iniciada automaticamente após a sua criação.

    À medida que a instância de substituição é iniciada, o script rc.local temporário é executado e instala o ambiente convidado. Para ver o progresso deste script, inspecione os registos da consola para ver as linhas emitidas pelo script rc.local temporário. Para ver os registos, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Substitua REPLACEMENT_VM_NAME pelo nome que atribuiu à instância de substituição.

    A instância de substituição é reiniciada automaticamente quando o script rc.local temporário termina. Durante o segundo reinício, pode inspecionar o registo da consola para se certificar de que o ambiente convidado é carregado.

  9. Confirme se consegue estabelecer ligação à instância através de SSH.

    Depois de verificar se a instância de substituição está funcional, pode parar ou eliminar a instância problemática.

Ubuntu

  1. Confirme se a versão do seu sistema operativo é suportada

  2. Crie uma nova instância para servir como instância de recuperação. Dê o nome resgate a esta instância. Esta instância de recuperação não tem de executar o mesmo SO Linux que a instância problemática. Este exemplo usa o Debian 9 na instância de recuperação.

  3. Pare a instância problemática e crie uma cópia do respetivo disco de arranque.

    1. Defina um nome de variável para a instância problemática. Esta variável simplifica a referência à instância em passos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

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

    2. Pare a instância problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenha o nome do disco de arranque da instância com problemas.

      export 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 arranque.

      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 da captura de ecrã.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Associe o novo disco à instância de resgate e monte o volume raiz para a instância de resgate. Uma vez que este procedimento anexa apenas um disco adicional, o identificador do dispositivo do novo disco é /dev/sdb. Por predefinição, o Ubuntu etiqueta o volume raiz como 1. Por conseguinte, o identificador de volume deve ser /dev/sdb1. Para configurações personalizadas, use lsblk para determinar o identificador de volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Estabeleça ligação à instância de recuperação através de SSH:

    gcloud compute ssh rescue
  6. Execute os seguintes passos na instância de recuperação.

    1. Monte o volume de 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 uma cópia de segurança do ficheiro rc.local existente, mova o script rc.local temporário para o disco montado e defina as autorizações para que o script temporário seja executável no arranque. O script temporário substitui o script original quando terminar o arranque. Para o fazer, 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. Desmonte 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 recuperação.

  7. Desassocie o novo disco da instância de recuperação.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crie uma nova instância para servir como substituição. Quando criar a instância de substituição, especifique o novo disco como o disco de arranque. Pode criar a instância de substituição através da Google Cloud consola:

    1. Na Google Cloud consola, aceda à página Instâncias de VM.

      Aceder às instâncias de VM

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

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

    4. Clique em Criar. A instância de substituição é iniciada automaticamente após a sua criação.

    À medida que a instância de substituição é iniciada, o script rc.local temporário é executado e instala o ambiente convidado. Para ver o progresso deste script, inspecione os registos da consola para ver as linhas emitidas pelo script rc.local temporário. Para ver os registos, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Substitua REPLACEMENT_VM_NAME pelo nome que atribuiu à instância de substituição.

    A instância de substituição é reiniciada automaticamente quando o script rc.local temporário termina. Durante o segundo reinício, pode inspecionar o registo da consola para se certificar de que o ambiente convidado é carregado.

  9. Confirme se consegue estabelecer ligação à instância através de SSH.

    Depois de verificar se a instância de substituição está funcional, pode parar ou eliminar a instância problemática.

Atualize o ambiente convidado

Se receber uma mensagem a indicar que o ambiente convidado está desatualizado, atualize os pacotes do seu sistema operativo da seguinte forma:

CentOS/RHEL/Rocky

Para atualizar os sistemas operativos 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 operativos 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 operativos 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 operativos SLES, execute os seguintes comandos:

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

Windows

Para atualizar os sistemas operativos Windows, execute o seguinte comando:

googet update

Valide o ambiente convidado

Pode verificar se um ambiente convidado está instalado inspecionando os registos do sistema emitidos para a consola enquanto uma instância é iniciada ou listando os pacotes instalados enquanto estiver ligada à instância.

Veja os registos da consola esperados para o ambiente de convidado

Esta tabela resume o resultado esperado para os registos da consola emitidos por instâncias com ambientes de convidados funcionais à medida que são iniciados.

Sistema operativo Gestão de serviços Resultado esperado
CentOS/RHEL/Rocky Linux
Debian
Ubuntu
SLES
SO otimizado para contentores 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)
SO otimizado para contentores 85 e mais antigo 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 registos da consola de uma instância, siga estes passos.

Consola

  1. Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

    1. Selecione a instância que precisa de examinar.
    2. Reinicie ou reponha a instância.
    3. Em Registos, clique em Porta de série 1 (consola).
    4. Pesquise o resultado esperado na tabela que precede estes passos.

gcloud

  1. Reinicie ou reponha a instância.
  2. Use o subcomando gcloud compute instances get-serial-port-output para se ligar através da Google Cloud CLI. Por exemplo:

    gcloud compute instances get-serial-port-output VM_NAME

    Substitua VM_NAME pelo nome da instância que tem de examinar.

  3. Pesquise o resultado esperado na tabela que precede estes passos.

Veja os serviços carregados por versão do sistema operativo

Esta tabela resume os serviços que devem ser carregados em instâncias com ambientes de convidado funcionais. Tem de executar o comando para listar os serviços depois de se ligar à instância. Por conseguinte, só pode realizar esta verificação se tiver acesso à instância.

Sistema operativo Comando para listar serviços Resultado esperado
CentOS/RHEL/Rocky Linux
Debian
sudo systemctl list-unit-files \
| grep google | grep enabled
google-disk-expand.service             enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Ubuntu
sudo systemctl list-unit-files \
| grep google | grep enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
SO otimizado para contentores
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 superior
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

Veja os pacotes instalados por versão do sistema operativo

Esta tabela resume os pacotes que devem ser instalados em instâncias com ambientes de convidado funcionais. Tem de executar o comando para listar os pacotes instalados depois de se ligar à instância. Por conseguinte, só pode realizar esta verificação se tiver acesso à instância.

Para mais informações acerca destes pacotes, consulte o artigo Componentes do ambiente de convidados.

Sistema operativo Comando para listar pacotes Resultado esperado
CentOS/RHEL/Rocky Linux
rpm -qa --queryformat '%{NAME}\n' \
| grep -iE 'google|gce'
google-osconfig-agent
google-compute-engine-oslogin
google-guest-agent
gce-disk-expand
google-cloud-sdk
google-compute-engine
Debian
apt list --installed \
| grep -i google
gce-disk-expand
google-cloud-packages-archive-keyring
google-cloud-sdk
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
Ubuntu
apt list --installed \
| grep -i google
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
SUSE (SLES)
rpm -qa --queryformat '%{NAME}\n' \
| grep -i google
google-guest-configs
google-osconfig-agent
google-guest-oslogin
google-guest-agent
Windows
googet installed
certgen
googet
google-compute-engine-auto-updater
google-compute-engine-driver-gga
google-compute-engine-driver-netkvm
google-compute-engine-driver-pvpanic
google-compute-engine-driver-vioscsi
google-compute-engine-metadata-scripts
google-compute-engine-powershell
google-compute-engine-sysprep
google-compute-engine-vss
google-compute-engine-windows
google-osconfig-agent

O que se segue?