Como instalar o ambiente de convidado

Nesta página, você aprende a instalar manualmente o ambiente de convidado para instâncias de VM em execução no Compute Engine.

Na maioria dos casos, se você usa instâncias de VM criadas por meio de imagens públicas fornecidas pelo Google, não é necessário instalar manualmente um ambiente de 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 instância. Se o ambiente do convidado estiver disponível na instância, mas desatualizado, atualize o ambiente do convidado.

Caso contrário, determine se você precisa instalar manualmente o ambiente de convidado analisando Quando instalar manualmente o ambiente de convidado.

Antes de começar

Índice

Compatibilidade com sistemas operacionais

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

  • Ubuntu 14.04 ou posterior
  • CentOS 6 e 7
  • Red Hat Enterprise Linux (RHEL) 6 e 7
  • Debian 9
  • Windows Server 2019
  • Windows Server 1809 e 1803
  • Windows Server 1709
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2008 R2
  • SQL Server on Windows Server
  • O Windows inclui sua própria licença (Beta):
    • Windows 7
    • Windows 10

A Google recomenda que você use a ferramenta de importação para instalar o ambiente de convidado. Para ver a lista de opções de instalação, consulte Métodos de instalação.

Não é possível instalar ambientes de convidado manualmente para sistemas operacionais SUSE, CoreOS e otimizados para contêiner. 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 de convidado

Métodos de instalação

Há três maneiras de instalar o ambiente de convidado. Escolha uma das seguintes opções:

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:

    OS_RELEASE_FILE="/etc/redhat-release"
    if [ ! -f $OS_RELEASE_FILE ]; then
      OS_RELEASE_FILE="/etc/centos-release"
    fi
    DIST=$(cat $OS_RELEASE_FILE | grep -o '[0-9].*' | awk -F'.' '{print $1}')
    sudo tee /etc/yum.repos.d/google-cloud.repo << EOM
    [google-cloud-compute]
    name=Google Cloud Compute
    baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${DIST}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    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:

    declare -a PKG_LIST=(python-google-compute-engine
    google-compute-engine-oslogin
    google-compute-engine)
    for pkg in ${PKG_LIST[@]}; do
      sudo yum install -y ${pkg}
    done
    
  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:

    DIST=$(cat /etc/os-release | grep "VERSION=" | sed "s/\"\|(\|)\|VERSION=//g" \
    | awk '{print tolower($NF)}')
    sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM
    deb http://packages.cloud.google.com/apt google-compute-engine-${DIST}-stable main
    deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${DIST} main
    EOM
    
  4. Atualize as listas de pacotes:

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

    declare -a PKG_LIST=(google-cloud-packages-archive-keyring
    python-google-compute-engine
    python3-google-compute-engine
    google-compute-engine-oslogin
    google-compute-engine)
    for pkg in ${PKG_LIST[@]}; do
      sudo apt install -y ${pkg}
    done
    
  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-get update
  4. Instale os pacotes do ambiente de convidado:

    declare -a PKG_LIST=(python-google-compute-engine
    python3-google-compute-engine
    google-compute-engine-oslogin
    gce-compute-image-packages)
    for pkg in ${PKG_LIST[@]}; do
      sudo apt install -y ${pkg} || echo "Not available: ${pkg}"
    done
    
  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, garanta que a versão do seu sistema operacional seja 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 (em inglês). 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
    
  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, instale o ambiente de convidado usando este procedimento, que inclui as etapas a seguir. É possível concluí-las no Console do GCP e 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. Instale a chave GPG pública de repositório:
  3. 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.

  4. 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=instance-name

      em que o instance-name é o 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"
  5. 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"
  6. Conecte-se à instância de resgate usando SSH:

    gcloud compute ssh rescue
  7. 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"
    if [ "$?" != "0" ]; then
    # Handle XFS filesystem cases (CentOS/RHEL 7):
    sudo mount -o nouuid "$DEV" "$NEW_DISK_MOUNT_POINT"
    fi
    
    1. Crie o script rc.local.
    cat <<'EOF' >/tmp/rc.local
    #!/bin/bash
    declare -a PKG_LIST=(python-google-compute-engine
    google-compute-engine-oslogin
    google-compute-engine)
    declare -x YUM_SERVER="packages.cloud.google.com"
    declare -x REPO_FILE="/etc/yum.repos.d/google-cloud.repo"
    echo "== Installing a Linux guest environment for CentOS/RHEL =="
    sleep 30 # Wait for network.
    echo "Determining CentOS/RHEL version..."
    OS_RELEASE_FILE="/etc/redhat-release"
    if [ ! -f "$OS_RELEASE_FILE" ]; then
       OS_RELEASE_FILE="/etc/centos-release"
    fi
    if [ ! -f "$OS_RELEASE_FILE" ]; then
       echo "ERROR: This system does not appear to be CentOS/RHEL."
       exit 1
    fi
    DIST=$(cat "$OS_RELEASE_FILE" | grep -o '[0-9].*' | awk -F'.' '{print $1}')
    if [ -z $DIST ]; then
       echo "ERROR: Could not determine version of CentOS/RHEL."
       exit 1
    fi
    echo "Updating $REPO_FILE..."
    tee "$REPO_FILE" << EOM
    [google-cloud-compute]
    name=Google Cloud Compute
    baseurl=https://$YUM_SERVER/yum/repos/google-compute-engine-el${DIST}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://$YUM_SERVER/yum/doc/yum-key.gpg
    https://$YUM_SERVER/yum/doc/rpm-package-key.gpg
    EOM
    echo "Running yum makecache..."
    yum makecache
    echo "Running yum updateinfo..."
    yum updateinfo
    echo "Installing packages..."
    for pkg in ${PKG_LIST[@]}; do
       echo "Running yum install ${pkg}..."
       yum install -y ${pkg}
       if [ "$?" != "0" ]; then
          echo "ERROR: Failed to install ${pkg}."
       fi
    done
    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 now
    EOF
    
    1. 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"
      
    2. Desative o volume raiz do novo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    3. Saia da sessão SSH da instância de resgate.

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

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  9. 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 GCP:

    1. Acesse a página "Instâncias de VM".

      Acessar a página "Instâncias de VM"

    2. Clique na instância problemática e, em seguida, em Clonar.
    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-instance-name

    em que replacement-instance-name é o nome que você atribuiu à instância de substituição.

    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.

  10. 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 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=instance-name

      em que o instance-name é o 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
      declare -a PKG_LIST=(google-cloud-packages-archive-keyring
      python-google-compute-engine
      python3-google-compute-engine
      google-compute-engine-oslogin
      google-compute-engine)
      declare -x APT_SERVER="packages.cloud.google.com"
      declare -x REPO_FILE="/etc/apt/sources.list.d/google-cloud.list"
      echo "== Installing a Linux guest environment for Debian =="
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      DIST=$(cat /etc/os-release | grep "VERSION=" \
      | sed "s/\"\|(\|)\|VERSION=//g" | awk '{print tolower($NF)}')
      if [ -z $DIST ]; then
       echo "ERROR: Could not determine Debian version."
       exit 1
      fi
      echo "Adding GPG key for $APT_SERVER."
      curl https://$APT_SERVER/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating $REPO_FILE..."
      tee "$REPO_FILE" << EOM
      deb http://$APT_SERVER/apt google-compute-engine-${DIST}-stable main
      deb http://$APT_SERVER/apt google-cloud-packages-archive-keyring-${DIST} main
      EOM
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
       echo "Running apt install ${pkg}..."
       apt install -y ${pkg}
       if [ "$?" != "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 now
      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 da 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 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 GCP:

    1. Acesse a página "Instâncias de VM".

      Acessar a página "Instâncias de VM"

    2. Clique na instância problemática e, em seguida, em Clonar.
    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-instance-name

    em que replacement-instance-name é o nome que você atribuiu à instância de substituição.

    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. Instale a chave GPG pública de repositório:
  3. 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.

  4. 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=instance-name

      em que o instance-name é o 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"
  5. 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"
  6. Conecte-se à instância de resgate usando SSH:

    gcloud compute ssh rescue
  7. 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
      declare -a PKG_LIST=(python-google-compute-engine
      python3-google-compute-engine
      google-compute-engine-oslogin
      gce-compute-image-packages)
      echo "== Installing a Linux guest environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Determining Ubuntu version..."
      DIST=$(cat /etc/os-release | grep "VERSION_ID=" \
      | sed "s/\"\|(\|)\|VERSION_ID=//g" | awk -F. '{print tolower($1)}')
      if [ -z $DIST ]; then
       echo "ERROR: Could not determine Ubuntu version."
       exit 1
      fi
      if [ "$DIST" -lt "16" ]; then
       # Adjust package list for older Ubuntu:
       echo "Ubuntu version less than 16.04."
       declare -a PKG_LIST=(python-google-compute-engine \
       gce-compute-image-packages)
      fi
      echo "Ensuring Ubuntu universe repositories are enabled."
      apt-add-repository universe
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
       echo "Running apt install ${pkg}..."
       apt install -y ${pkg}
       if [ "$?" != "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 now
      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 da instância de resgate.

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

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  9. Crie uma nova 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 GCP:

    1. Acesse a página "Instâncias de VM".

      Acessar a página "Instâncias de VM"

    2. Clique na instância problemática e, em seguida, em Clonar.
    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-instance-name

    em que replacement-instance-name é o nome que você atribuiu à instância de substituição.

    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.

  10. 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 python*-google-compute-engine

Debian/Ubuntu

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

sudo apt-get update
sudo apt install google-compute-engine google-compute-engine-oslogin python*-google-compute-engine

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 Resultado esperado
CentOS/RHEL 7
Debian 9Ubuntu 16.04+
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
CentOS/RHEL 6
Ubuntu 14.04
upstart

google-accounts: INFO Starting Google Accounts daemon
google-ip-forwarding: INFO Starting Google Compute Engine Network Daemon
google-clock-skew: INFO Starting Google Clock Skew daemon
CoreOS systemd e ignition

systemd[1]: Starting Ignition (files)...
[finished] enabling unit "coreos-metadata-sshkeys@.service
[finished] enabling unit "oem-gce.service"
[finished] enabling unit "oem-cloudinit.service"
Container-Optimized OS 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
SUSE (SLES) 12+ 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

GCEWindowsAgent: GCE Agent Started
GCEMetadataScripts: Starting startup scripts

Para ver os registros do console de uma instância, siga estas etapas.

Console

  1. Acesse a página "Instâncias de VM".

    Acessar a página "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 get-serial-port-output para se conectar usando a ferramenta de linha de comando gcloud. Por exemplo:

    gcloud compute instances get-serial-port-output [INSTANCE_NAME]

    em que instance-name for o 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 Resultado esperado
CentOS/RHEL 7
Debian 9Ubuntu 16.04+

sudo systemctl list-unit-files \
| grep google | grep enabled

google-accounts-daemon.service      enabled
google-clock-skew-daemon.service    enabled
google-instance-setup.service       enabled
google-shutdown-scripts.service     enabled
google-startup-scripts.service      enabled
google-network-daemon.service       enabled
CentOS/RHEL 6
Ubuntu 14.04

initctl list | grep google

google-accounts-daemon              start/running
google-network-daemon               start/running
google-clock-skew-daemon            start/running
google-instance-setup               stop/waiting
google-startup-scripts              stop/waiting
google-shutdown-scripts             stop/waiting
CoreOS

sudo systemctl list-unit-files \
| grep \
"oem-cloudinit\|oem-gce\|coreos-metadata-ssh" \
| grep enabled

coreos-metadata-sshkeys@.service    enabled
oem-cloudinit.service               enabled
oem-gce.service                     enabled
Container-Optimized OS

sudo systemctl list-unit-files \
| grep google

var-lib-google.mount                disabled
google-accounts-daemon.service      disabled
google-clock-skew-daemon.service    disabled
google-instance-setup.service       disabled
google-ip-forwarding-daemon.service disabled
google-network-setup.service        disabled
google-shutdown-scripts.service     disabled
google-startup-scripts.service      disabled
var-lib-google-remount.service      static 
SUSE (SLES) 12+

sudo systemctl list-unit-files \
| grep google | grep enabled

google-accounts-daemon.service      enabled
google-network-daemon.service       enabled
google-clock-skew-daemon.service    enabled
google-instance-setup.service       enabled
google-shutdown-scripts.service     enabled
google-startup-scripts.service      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 Resultado esperado
CentOS/RHEL 6 e 7

yum list installed | grep google-compute

google-compute-engine
google-compute-engine-oslogin.x86_64
python-google-compute-engine
Debian 9

apt list --installed | grep google-compute

google-compute-engine
google-compute-engine-oslogin
python-google-compute-engine
python3-google-compute-engine
Ubuntu 14.04

apt list --installed \
| grep "google-compute\|gce-compute-image-packages"

gce-compute-image-packages
google-compute-engine-oslogin
python-google-compute-engine
Ubuntu 16.04+

apt list --installed \
| grep "google-compute\|gce-compute-image-packages"

gce-compute-image-packages
google-compute-engine-oslogin
python-google-compute-engine
python3-google-compute-engine
SUSE (SLES) 12+

zypper se -i | grep package \
| grep "google-compute-engine\|gce\|ClientConfigGCE"

cloud-regionsrv-client-plugin-gce
google-compute-engine-init
python-gcemetadata
regionServiceClientConfigGCE
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

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine