Instale o ambiente convidado


Esta página descreve como instalar manualmente o ambiente convidado para instâncias de máquina virtual (VM) que executam imagens personalizadas no Compute Engine.

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

Antes de instalar manualmente o ambiente convidado, use o procedimento Validar o ambiente convidado para verificar se o ambiente convidado está em execução na sua VM. Se o ambiente convidado estiver disponível na sua VM, mas estiver desatualizado, atualize o ambiente convidado .

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

Métodos de instalação

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

  • Ferramenta de importação . Esta é 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 configuração de redes, configuração do bootloader e instalação da CLI do Google Cloud. Para obter instruções sobre como usar a ferramenta de importação, consulte Tornando uma imagem inicializável .

    A ferramenta de importação oferece suporte a uma ampla variedade de sistemas operacionais e versões. Para obter mais informações, consulte detalhes do sistema operacional .

  • Instalação manual . Escolha um dos seguintes:

Sistemas operacionais suportados

Você pode instalar manualmente o ambiente convidado em VMs que usam versões de imagem do sistema operacional que estão no ciclo de vida de disponibilidade geral (GA) ou no estágio do ciclo de vida de suporte estendido . Para revisar uma lista de versões de imagens do SO e o estágio do ciclo de vida delas no Compute Engine, consulte Detalhes do sistema operacional .

Limitações

Você não pode instalar manualmente ou usar a ferramenta de importação para instalar ambientes convidados para Fedora CoreOS e sistemas operacionais otimizados para Container. Se você precisar de um desses sistemas operacionais, recomendamos usar imagens públicas , pois um ambiente convidado é incluído como parte central de todas as imagens públicas.

Instalando o ambiente convidado

Instale o ambiente convidado no local

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

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

CentOS/RHEL/Rocky

  1. Certifique-se de que a versão do seu sistema operacional seja suportada .
  2. Determine a versão do CentOS/RHEL/Rocky Linux e crie o arquivo 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. Atualizar listas de pacotes:

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

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. Reinicie a instância e inspecione o log do console para garantir que o ambiente convidado seja carregado durante a inicialização do backup.

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

Debian

  1. Certifique-se de que a versão do seu sistema operacional seja 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 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. Atualizar listas de pacotes:

    sudo apt update
  5. Instale os pacotes do ambiente 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 log do console para garantir que o ambiente convidado seja carregado durante a inicialização do backup.

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

Ubuntu

  1. Certifique-se de que a versão do seu sistema operacional seja suportada .

  2. Habilite o repositório Universe . A Canonical publica pacotes para seu ambiente convidado no repositório Universe.

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

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

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. Reinicie a instância e inspecione o log do console para garantir que o ambiente convidado seja carregado durante a inicialização do backup.

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

SLES

  1. Certifique-se de que a versão do seu sistema operacional seja suportada .

  2. Ative o Módulo Nuvem Pública .

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

    sudo zypper refresh
  4. Instale os pacotes do ambiente 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 log do console para garantir que o ambiente convidado seja carregado durante a inicialização do backup.

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

Windows

Antes de começar, certifique-se de que a versão do seu sistema operacional seja compatível .

Para instalar o ambiente convidado do Windows , execute os seguintes comandos 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 superior a 3.0.

  1. Baixe 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, GooGet adiciona conteúdo ao ambiente do sistema. Após a conclusão da 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 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 de ambiente convidado do Windows.

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

    Usando o comando googet .

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

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

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

    Para visualizar comandos adicionais, execute googet help .

Clone o disco de inicialização e use o script de inicialização

Se você não conseguir se conectar a uma instância para instalar manualmente o ambiente convidado, instale o ambiente convidado usando este procedimento, que inclui as etapas a seguir que podem ser concluídas no Google Cloud console ou Cloud Shell.

Este método mostra o procedimento apenas para distribuições Linux. Para 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 de linha de comando jq . Você pode usar esse processador para filtrar a saída da CLI gcloud. O Cloud Shell tem jq pré-instalado.

CentOS/RHEL/Rocky

  1. Certifique-se de que a versão do seu sistema operacional seja suportada .

  2. Crie uma nova instância para servir como instância de resgate. Nomeie esta instância como resgate . Esta instância de resgate não precisa executar o mesmo sistema operacional 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 seu disco de inicialização.

    1. Defina um nome de variável para a instância problemática. Isso facilita a referência à instância em etapas 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 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 instantâneo 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 instantâneo.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Anexe o novo disco à instância de resgate e monte o volume raiz da instância de resgate. Como este procedimento anexa apenas um disco adicional, o identificador de dispositivo do novo disco é /dev/sdb . CentOS/RHEL/Rocky Linux usa o primeiro volume em um disco como volume raiz por padrão, portanto, o identificador do volume deve ser /dev/sdb1 . Para casos customizados, use lsblk para determinar o identificador de volume.

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

    gcloud compute ssh rescue
  6. Execute as etapas a seguir na instância de resgate.

    1. Monte 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. Mova qualquer script rc.local existente para o lado. O script temporário irá substituí-lo quando terminar.

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

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

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crie uma instância para servir como substituição. Ao criar a instância de substituição, especifique o novo disco como disco de inicialização. Você pode criar a instância de substituição usando o Google Cloud Console:

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

      Acesse as instâncias de VM

    2. Clique na instância problemática e em 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 Discos existentes . Selecione o novo disco.

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

    À medida que a instância de substituição é iniciada, o script rc.local temporário é executado e instala o ambiente convidado. Para observar o progresso deste script, inspecione os logs do console em busca de linhas emitidas pelo script rc.local temporário. Para visualizar os logs, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

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

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

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

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

Debian

  1. Certifique-se de que a versão do seu sistema operacional seja compatível

  2. Crie uma nova instância para servir como instância de resgate. Nomeie esta instância como resgate . Esta instância de resgate não precisa executar o mesmo sistema operacional 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 seu disco de inicialização.

    1. Defina um nome de variável para a instância problemática. Isso facilita a referência à instância em etapas 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 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 instantâneo 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 instantâneo.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Anexe o novo disco à instância de resgate e monte o volume raiz da instância de resgate. Como este procedimento anexa apenas um disco adicional, o identificador de dispositivo do novo disco é /dev/sdb . O Debian usa o primeiro volume em um disco como volume raiz por padrão, então o identificador do volume deve ser /dev/sdb1 . Para casos customizados, use lsblk para determinar o identificador de volume.

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

    gcloud compute ssh rescue
  6. Execute as etapas a seguir na instância de resgate.

    1. Monte 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. Mova qualquer script rc.local existente para o lado. O script temporário irá substituí-lo quando terminar.

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

  7. Desconecte 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 disco de inicialização. Você pode criar a instância de substituição usando o Google Cloud Console:

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

      Acesse as instâncias de VM

    2. Clique na instância problemática e em 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 Discos existentes . Selecione o novo disco.

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

    À medida que a instância de substituição é iniciada, o script rc.local temporário é executado e instala o ambiente convidado. Para observar o progresso deste script, inspecione os logs do console em busca de linhas emitidas pelo script rc.local temporário. Para visualizar os logs, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

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

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

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

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

Ubuntu

  1. Certifique-se de que a versão do seu sistema operacional seja compatível

  2. Crie uma nova instância para servir como instância de resgate. Nomeie esta instância como resgate . Esta instância de resgate não precisa executar o mesmo sistema operacional 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 seu disco de inicialização.

    1. Defina um nome de variável para a instância problemática. Isso facilita a referência à instância em etapas 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 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 instantâneo 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 instantâneo.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Anexe o novo disco à instância de resgate e monte o volume raiz da instância de resgate. Como este procedimento anexa apenas um disco adicional, o identificador de dispositivo do novo disco é /dev/sdb . O Ubuntu rotula seu volume raiz como 1 por padrão, então o identificador do volume deve ser /dev/sdb1 . Para casos customizados, use lsblk para determinar o identificador de volume.

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

    gcloud compute ssh rescue
  6. Execute as etapas a seguir na instância de resgate.

    1. Monte 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. Mova qualquer script rc.local existente para o lado. O script temporário irá substituí-lo quando terminar.

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

  7. Desconecte 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 disco de inicialização. Você pode criar a instância de substituição usando o Google Cloud Console:

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

      Acesse as instâncias de VM

    2. Clique na instância problemática e em 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 Discos existentes . Selecione o novo disco.

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

    À medida que a instância de substituição é iniciada, o script rc.local temporário é executado e instala o ambiente convidado. Para observar o progresso deste script, inspecione os logs do console em busca de linhas emitidas pelo script rc.local temporário. Para visualizar os logs, execute o seguinte comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

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

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

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

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

Atualizando o ambiente convidado

Se você receber uma mensagem informando que o ambiente convidado está desatualizado, atualize os pacotes do seu 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 os sistemas operacionais Windows, execute o seguinte comando:

googet update

Validando o ambiente convidado

A presença de um ambiente convidado pode ser determinada inspecionando os logs do sistema emitidos para o console enquanto uma instância é inicializada ou listando os pacotes instalados enquanto conectado à instância.

Logs de console esperados para o ambiente convidado

Esta tabela resume a saída esperada para logs de console emitidos por instâncias com ambientes convidados em funcionamento à medida que são inicializadas.

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

Console

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

    Acesse as instâncias de VM

    1. Clique na instância que você deseja examinar.
    2. Reinicie ou redefina a instância .
    3. Em Logs , clique em Porta serial 1 (console) .
    4. Procure a saída esperada referenciando a 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. Por exemplo:

    gcloud compute instances get-serial-port-output VM_NAME

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

  3. Procure a saída esperada referenciando a tabela acima.

Serviços carregados para o ambiente convidado

Esta tabela resume os serviços que devem ser carregados em instâncias com ambientes convidados em funcionamento. O comando para listar serviços deve ser executado após a conexão com a instância, portanto esta verificação só poderá ser realizada se você tiver acesso a ela.

Sistema operacional 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 contêiner
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+
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 convidado

Esta tabela resume os pacotes que devem ser instalados em instâncias com ambientes convidados funcionais. O comando para listar os pacotes instalados deve ser executado após a conexão com a instância, portanto esta verificação só poderá ser realizada se você tiver acesso a ela.

Sistema operacional 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 vem a seguir