Como instalar o ambiente convidado


Nesta página, você aprende a instalar manualmente o ambiente de convidado para instâncias de máquina virtual (VM) que executam imagens personalizadas no Compute Engine.

Na maioria dos casos, se você usa VMs criadas por meio de imagens públicas fornecidas pelo Google, não é necessário instalar um ambiente de convidado. Para informações sobre quando usar o ambiente convidado, consulte Quando instalar ou atualizar manualmente o ambiente convidado.

Antes de instalar manualmente o ambiente de convidado, use o procedimento Validar o ambiente de convidado para verificar se esse ambiente está sendo executado na VM. Se o ambiente do convidado estiver disponível na VM, mas desatualizado, atualize o ambiente do convidado.

Antes de começar

Métodos de instalação

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

  • Ferramenta de importação. Essa é a opção recomendada. No entanto, lembre-se de que a ferramenta de importação não apenas instala o ambiente convidado, mas também faz outras atualizações de configuração na imagem, como configurar redes, configurar o carregador de inicialização e instalar a CLI do Google Cloud. Para instruções sobre como usá-la, consulte Como tornar uma imagem inicializável.

    A ferramenta de importação é compatível com uma grande variedade de sistemas operacionais e versões. Para mais informações, consulte Detalhes do sistema operacional.

  • Instalação manual. Escolha uma destas opções:

    A instalação manual do ambiente de convidado está disponível para os sistemas operacionais a seguir:

    • Ubuntu 16.04 ou posterior
    • CentOS 7 ou posterior
    • SUSE Linux Enterprise Server (SLES) 12 SP4 ou posterior e 15 SP1 ou posterior
    • Red Hat Enterprise Linux (RHEL) 7 ou posterior
    • Debian 9 ou posterior
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2
    • Lançamentos do canal semi-anual do Windows Server
    • SQL Server no Windows Server
    • Traga sua própria licença do Windows:
      • Windows 8
      • Windows 10

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. Se você precisar de um desses sistemas operacionais, recomendamos o uso de imagens públicas, pois um ambiente de convidado é incluído como parte principal de todas as imagens públicas.

Como instalar o ambiente convidado

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 de destino usando SSH. Caso contrário, instale o ambiente de convidado clonando o disco de inicialização dele 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 SSH funcional baseado em chave.

CentOS/RHEL

  1. Garanta que a versão do seu sistema operacional seja compatível.
  2. Determine a versão do CentOS/RHEL e crie o arquivo de 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 e inspecione o respectivo registro do console para garantir que o ambiente de convidado seja carregado assim que iniciar o backup.

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

Debian

  1. Garanta que a versão do seu sistema operacional seja compatível.
  2. Instale a chave GPG pública de 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 e 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 e inspecione o respectivo registro do console para garantir que o ambiente de convidado seja carregado assim que iniciar o backup.

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

Ubuntu

  1. Garanta que a versão do seu sistema operacional seja compatível.

  2. Ative o repositório Universe (em inglês). 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 e inspecione o respectivo registro do console para garantir que o ambiente de convidado seja carregado assim que iniciar o backup.

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

SLES

  1. Garanta que a versão do seu sistema operacional seja 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 e inspecione o respectivo registro do console para garantir que o ambiente de convidado seja carregado assim que iniciar o backup.

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

Windows

Antes de começar, tenha certeza que 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 nas instruções abaixo requer uma versão do PowerShell posterior à 3.0.

  1. Faça o download e instale GooGet.

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
    Invoke-WebRequest https://github.com/google/googet/releases/download/v2.13.0/googet.exe -OutFile $env:temp\googet.exe;
    & "$env:temp\googet.exe" -root C:\ProgramData\GooGet -noconfirm install -sources `
    https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable googet;
    Remove-Item "$env:temp\googet.exe"
    

    Durante a instalação, o GooGet adiciona conteúdo ao ambiente do sistema. Após a instalação, inicie um novo console do PowerShell ou 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.

Este método mostra o procedimento apenas para distribuições Linux. Para o Windows, use um dos outros dois métodos de instalação.

Use o Cloud Shell para executar este procedimento:

CentOS/RHEL

  1. Garanta que a versão do seu sistema operacional seja compatível.

  2. Crie uma nova instância que sirva 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. Assim, fica mais fácil consultá-la 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 apenas anexa um disco extra, o identificador de 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"
  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 =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL version..."
      eval $(grep VERSION_ID /etc/os-release)
      if [[ -z $VERSION_ID ]]; then
        echo "ERROR: Could not determine version of CentOS/RHEL."
        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. 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.

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

      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 também é 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 que você estiver satisfeito com o funcionamento da instância de substituição, será possível interromper ou excluir a instância problemática.

Debian

  1. Garanta que a versão do seu sistema operacional seja 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. Assim, fica mais fácil consultá-la 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 apenas anexa um disco extra, o identificador de 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"
  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. 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.

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

      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 também é 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 que você estiver satisfeito com o funcionamento da instância de substituição, será possível interromper ou excluir a instância problemática.

Ubuntu

  1. Garanta que a versão do seu sistema operacional seja 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. Assim, fica mais fácil consultá-la 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 apenas anexa um disco extra, o identificador de 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"
  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. 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.

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

      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 também é 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 que você estiver satisfeito com o funcionamento da instância de substituição, será possível interromper ou excluir a instância problemática.

Como atualizar o ambiente de convidado

Se você estiver recebendo uma mensagem informando que o ambiente de convidado está desatualizado, atualize os pacotes do sistema operacional.

CentOS/RHEL

Para atualizar os sistemas operacionais CentOS e RHEL, 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

Como validar o ambiente de convidado

A presença de um ambiente de 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 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
Debian
Ubuntu
SLES
Container-Optimized OS 89 e mais recente
systemd

GCEGuestAgent Info: GCE Agent Started (version YYYYMMDD.NN)
GCEMetadataScripts: 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 VMs.

    Acessar instâncias de VM

    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 instances get-serial-port-output para se conectar usando a CLI do Google Cloud. 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 mencionado na tabela acima.

Serviços carregados para o ambiente de convidado

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

Sistema operacional Comando para listar serviços Resposta esperada
CentOS/RHEL
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

Pacotes instalados para o ambiente de convidado

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

Sistema operacional Comando para listar pacotes Resposta esperada
CentOS/RHEL

rpm -qa --queryformat '%{NAME}\n' \
|grep -iE google\|gce | 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 -iE '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 -iE "google"

google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
SUSE (SLES)

rpm -qa --queryformat '%{NAME}\n' \
|grep -iE 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