Instalar o ambiente de 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

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da 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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

Métodos de instalação

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

Sistemas operacionais compatíveis

É possível instalar manualmente o ambiente convidado em VMs que usam versões de imagem 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 imagem 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. 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/Rocky

  1. Garanta que a versão do seu sistema operacional seja compatível.
  2. Determine a versão do CentOS/RHEL/Rocky Linux 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.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 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. Se você não estiver usando o Cloud Shell, instale o processador JSON da linha de comando jq. Use esse processador para filtrar a saída da CLI gcloud. O Cloud Shell tem o jq pré-instalado.

CentOS/RHEL/Rocky

  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/Rocky Linux usa o primeiro volume em um 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/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. 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/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

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/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 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/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

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/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