Installazione dell'ambiente guest


Questa pagina descrive come installare manualmente l'ambiente guest per le istanze di macchine virtuali (VM) che eseguono immagini personalizzate su Compute Engine.

Nella maggior parte dei casi, se utilizzi VM create utilizzando immagini pubbliche fornite da Google, non devi installare un ambiente guest. Per informazioni su quando utilizzare l'ambiente guest, vedi Quando installare o aggiornare manualmente l'ambiente guest.

Prima di installare manualmente l'ambiente guest, utilizza la procedura Convalida l'ambiente guest per verificare se l'ambiente guest è in esecuzione sulla VM. Se l'ambiente guest è disponibile nella tua VM ma è obsoleto, aggiorna l'ambiente guest.

Prima di iniziare

Metodi di installazione

Ci sono diversi modi per installare l'ambiente guest. Scegli una delle seguenti opzioni:

  • Strumento di importazione. È l'opzione consigliata. Tuttavia, tieni presente che lo strumento di importazione non solo installa l'ambiente guest, ma esegue anche altri aggiornamenti di configurazione nell'immagine, come configurare le reti, configurare il bootloader e installare l'interfaccia a riga di comando di Google Cloud. Per istruzioni su come utilizzare lo strumento di importazione, consulta Rendere un'immagine avviabile.

    Lo strumento di importazione supporta un'ampia gamma di sistemi operativi e versioni. Per scoprire di più, consulta i dettagli del sistema operativo.

  • Installazione manuale. Scegliere una delle opzioni seguenti:

    L'installazione manuale dell'ambiente guest è disponibile per i seguenti sistemi operativi:

    • Ubuntu 16.04 o versioni successive
    • CentOS 7 o versioni successive
    • SUSE Linux Enterprise Server (SLES) 12 SP4 o versioni successive e 15 SP1 o versioni successive
    • Red Hat Enterprise Linux (RHEL) 7 o versioni successive
    • Debian 9 o versioni successive
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2
    • Rilascio di canali semestrali di Windows Server
    • SQL Server su Windows Server
    • Windows ha la tua licenza:
      • Windows 8
      • Windows 10

Limitazioni

Non puoi installare o utilizzare manualmente lo strumento di importazione per installare ambienti ospite per Fedora CoreOS e i sistemi operativi ottimizzati per i container. Se hai bisogno di uno di questi sistemi operativi, ti consigliamo di utilizzare immagini pubbliche, perché un ambiente ospite è incluso come parte principale di tutte le immagini pubbliche.

Installazione dell'ambiente guest

Installa l'ambiente guest in loco

Utilizza questo metodo per installare l'ambiente guest se puoi connetterti all'istanza di destinazione utilizzando SSH. Se non puoi connetterti all'istanza per installare l'ambiente guest, puoi installarlo clonando il disco di avvio e utilizzando uno script di avvio.

Questa procedura è utile per le immagini importate se puoi connetterti utilizzando l'autenticazione basata su password SSH. Può essere utilizzata anche per reinstallare l'ambiente guest se hai almeno un account utente con SSH basato su chiave funzionale.

CentOS/RHEL

  1. Assicurati che la versione del tuo sistema operativo sia supportata.
  2. Determina la versione di CentOS/RHEL e crea il file di repository di origine, /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. Aggiorna gli elenchi di pacchetti:

    sudo yum makecache
    sudo yum updateinfo
    
  4. Installa i pacchetti dell'ambiente guest:

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. Riavvia l'istanza e controlla il log della console per assicurarti che l'ambiente guest si carichi all'avvio.

  6. Verifica di poter eseguire la connessione all'istanza mediante SSH.

Debian

  1. Assicurati che la versione del tuo sistema operativo sia supportata.
  2. Installa la chiave GPG del repository pubblico:

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. Determina il nome della distribuzione Debian e crea il file dell'elenco di origine, /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. Aggiorna gli elenchi di pacchetti:

    sudo apt update
  5. Installa i pacchetti dell'ambiente guest:

    sudo apt install -y google-cloud-packages-archive-keyring
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. Riavvia l'istanza e controlla il log della console per assicurarti che l'ambiente guest si carichi all'avvio.

  7. Verifica di poter eseguire la connessione all'istanza mediante SSH.

Ubuntu

  1. Assicurati che la versione del tuo sistema operativo sia supportata.

  2. Abilita il repository Universe. Canonical pubblica pacchetti per il proprio ambiente guest nel repository Universe.

    sudo apt-add-repository universe
  3. Aggiorna gli elenchi di pacchetti:

    sudo apt update
  4. Installa i pacchetti dell'ambiente guest:

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. Riavvia l'istanza e controlla il log della console per assicurarti che l'ambiente guest si carichi all'avvio.

  6. Verifica di poter eseguire la connessione all'istanza mediante SSH.

SLES

  1. Assicurati che la versione del tuo sistema operativo sia supportata.

  2. Attiva il Public Cloud Module.

    product=$(sudo SUSEConnect --list-extensions | grep -o "sle-module-public-cloud.*")
    [[ -n "$product" ]] && sudo SUSEConnect -p "$product"
    
  3. Aggiorna gli elenchi di pacchetti:

    sudo zypper refresh
  4. Installa i pacchetti dell'ambiente guest:

    sudo zypper install -y google-guest-{agent,configs,oslogin} \
    google-osconfig-agent
    sudo systemctl enable /usr/lib/systemd/system/google-*
    
  5. Riavvia l'istanza e controlla il log della console per assicurarti che l'ambiente guest si carichi all'avvio.

  6. Verifica di poter eseguire la connessione all'istanza mediante SSH.

Windows

Prima di iniziare, assicurati che la versione del tuo sistema operativo sia supportata.

Per installare l'ambiente guest Windows, esegui i comandi riportati di seguito in un prompt di PowerShell con versione 3.0 o successiva. Il comando Invoke-WebRequest nelle istruzioni riportate di seguito richiede una versione di PowerShell superiore alla 3.0.

  1. Scarica e installa 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 l'installazione, GooGet aggiunge contenuti all'ambiente di sistema. Al termine dell'installazione, avvia una nuova console di PowerShell o fornisci il percorso completo del file googet.exe (C:\ProgramData\GooGet\googet.exe).

  2. Apri una nuova console e aggiungi il repository google-compute-engine-stable.

    googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
  3. Installa i pacchetti principali dell'ambiente guest 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. Installa il pacchetto di ambienti guest Windows facoltativo.

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

    Usando il comando googet.

    Per visualizzare i pacchetti disponibili, esegui il comando googet available.

    Per visualizzare i pacchetti installati, esegui il comando googet installed.

    Per eseguire l'aggiornamento alla versione più recente del pacchetto, esegui il comando googet update.

    Per visualizzare altri comandi, esegui googet help.

Clona il disco di avvio e utilizza lo script di avvio

Se non riesci a connetterti a un'istanza per installare manualmente l'ambiente guest, installalo seguendo questa procedura che include i passaggi seguenti che possono essere completati in Google Cloud Console o Cloud Shell.

Questo metodo mostra la procedura solo per le distribuzioni Linux. Per Windows, utilizza uno degli altri due metodi di installazione.

Utilizza Cloud Shell per eseguire questa procedura:

CentOS/RHEL

  1. Assicurati che la versione del sistema operativo sia supportata.

  2. Crea una nuova istanza da utilizzare come istanza di recupero. Assegna un nome a rescue per questa istanza. Questa istanza di recupero non deve eseguire lo stesso sistema operativo Linux dell'istanza problematica. Questo esempio utilizza Debian 9 sull'istanza di recupero.

  3. Arresta l'istanza problematica e crea una copia del suo disco di avvio.

    1. Imposta un nome variabile per l'istanza problematica. In questo modo è più semplice fare riferimento all'istanza nei passaggi successivi.

      export PROB_INSTANCE_NAME=VM_NAME

      Sostituisci VM_NAME con il nome dell'istanza problematica.

    2. Arresta l'istanza problematica.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Recupera il nome del disco di avvio per l'istanza del problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crea uno snapshot del disco di avvio.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crea un nuovo disco dallo snapshot.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Elimina lo snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Collega il nuovo disco all'istanza di recupero e monta il volume root per l'istanza di recupero. Poiché questa procedura collega un solo disco aggiuntivo, l'identificatore del dispositivo del nuovo disco è /dev/sdb. CentOS/RHEL utilizza il primo volume su un disco come volume principale per impostazione predefinita, quindi l'identificatore del volume deve essere /dev/sdb1. Per i casi personalizzati, utilizza lsblk per determinare l'identificatore di volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Connettiti all'istanza di recupero utilizzando SSH:

    gcloud compute ssh rescue
  6. Esegui i passaggi seguenti nell'istanza di recupero.

    1. Monta il volume root del nuovo 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. Crea lo script rc.local.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for CentOS/RHEL =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL version..."
      eval $(grep VERSION_ID /etc/os-release)
      if [[ -z $VERSION_ID ]]; then
        echo "ERROR: Could not determine version of CentOS/RHEL."
        exit 1
      fi
      echo "Updating repo file..."
      tee "/etc/yum.repos.d/google-cloud.repo" << EOM
      [google-compute-engine]
      name=Google Compute Engine
      baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
      enabled=1
      gpgcheck=1
      repo_gpgcheck=0
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
      https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      EOM
      echo "Running yum makecache..."
      yum makecache
      echo "Running yum updateinfo..."
      yum updateinfo
      echo "Running yum install google-compute-engine..."
      yum install -y google-compute-engine
      rpm -q google-compute-engine
      if [[ $? -ne 0 ]]; then
        echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.d/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
        echo "Restoring a previous rc.local script."
        mv "/etc/moved-rc.local" "/etc/rc.d/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Sposta lo script rc.local nel volume principale del nuovo disco e imposta le autorizzazioni. Sposta qualsiasi script rc.local esistente. Lo script temporaneo la sostituirà al termine.

      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. Smonta il volume root del nuovo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    5. Esci dalla sessione SSH per recuperare l'istanza.

  7. Scollega il nuovo disco dall'istanza di recupero.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crea un'istanza da sostituire. Quando crei l'istanza di sostituzione, specifica il nuovo disco come disco di avvio. Puoi creare l'istanza di sostituzione utilizzando Google Cloud Console:

    1. In Google Cloud Console, vai alla pagina Istanze VM.

      Vai alle istanze VM

    2. Fai clic sull'istanza problematica e poi su Crea simile.

    3. Specifica un nome per l'istanza di sostituzione. Nella sezione Disco di avvio, fai clic su Cambia e poi su Dischi esistenti. Seleziona il nuovo disco.

    4. Fai clic su Crea. L'istanza di sostituzione inizia automaticamente dopo la creazione.

    All'avvio dell'istanza di sostituzione, lo script rc.local temporaneo viene eseguito e installa l'ambiente guest. Per controllare l'avanzamento di questo script, controlla i log della console per individuare eventuali righe emesse dallo script temporaneo rc.local. Per visualizzare i log, esegui questo comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Sostituisci REPLACEMENT_VM_NAME con il nome che hai assegnato all'istanza di sostituzione.

    L'istanza sostitutiva si riavvia automaticamente anche al termine dello script rc.local temporaneo. Durante il secondo riavvio, puoi controllare il log della console per assicurarti che l'ambiente guest venga caricato.

  9. Verifica di poter eseguire la connessione all'istanza mediante SSH.

    Quando hai la certezza che l'istanza di sostituzione sia funzionante, puoi interrompere o eliminare l'istanza problematica.

Debian

  1. Assicurati che la versione del sistema operativo sia supportata

  2. Crea una nuova istanza da utilizzare come istanza di recupero. Assegna un nome a rescue per questa istanza. Questa istanza di recupero non deve eseguire lo stesso sistema operativo Linux dell'istanza problematica. Questo esempio utilizza Debian 9 sull'istanza di recupero.

  3. Arresta l'istanza problematica e crea una copia del suo disco di avvio.

    1. Imposta un nome variabile per l'istanza problematica. Questo rende più semplice fare riferimento all'istanza nei passaggi successivi.

      export PROB_INSTANCE_NAME=VM_NAME

      Sostituisci VM_NAME con il nome dell'istanza problematica.

    2. Arresta l'istanza problematica.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Recupera il nome del disco di avvio per l'istanza del problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crea uno snapshot del disco di avvio.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crea un nuovo disco dallo snapshot.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Elimina lo snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Collega il nuovo disco all'istanza di recupero e monta il volume root per l'istanza di recupero. Poiché questa procedura collega un solo disco aggiuntivo, l'identificatore del dispositivo del nuovo disco è /dev/sdb. Debian utilizza il primo volume su un disco come volume principale per impostazione predefinita, quindi l'identificatore del volume deve essere /dev/sdb1. Per i casi personalizzati, utilizza lsblk per determinare l'identificatore di volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Connettiti all'istanza di recupero utilizzando SSH:

    gcloud compute ssh rescue
  6. Esegui i passaggi seguenti nell'istanza di recupero.

    1. Monta il volume root del nuovo 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. Crea lo 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. Sposta lo script rc.local nel volume principale del nuovo disco e imposta le autorizzazioni. Sposta qualsiasi script rc.local esistente. Lo script temporaneo la sostituirà al termine.

      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. Smonta il volume root del nuovo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Esci dalla sessione SSH per recuperare l'istanza.

  7. Scollega il nuovo disco dall'istanza di recupero.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crea una nuova istanza da sostituire. Quando crei l'istanza di sostituzione, specifica il nuovo disco come disco di avvio. Puoi creare l'istanza di sostituzione utilizzando Google Cloud Console:

    1. In Google Cloud Console, vai alla pagina Istanze VM.

      Vai alle istanze VM

    2. Fai clic sull'istanza problematica e poi su Crea simile.

    3. Specifica un nome per l'istanza di sostituzione. Nella sezione Disco di avvio, fai clic su Cambia e poi su Dischi esistenti. Seleziona il nuovo disco.

    4. Fai clic su Crea. L'istanza di sostituzione inizia automaticamente dopo la creazione.

    All'avvio dell'istanza di sostituzione, lo script rc.local temporaneo viene eseguito e installa l'ambiente guest. Per controllare l'avanzamento di questo script, controlla i log della console per individuare eventuali righe emesse dallo script temporaneo rc.local. Per visualizzare i log, esegui questo comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Sostituisci REPLACEMENT_VM_NAME con il nome che hai assegnato all'istanza di sostituzione.

    L'istanza sostitutiva si riavvia automaticamente anche al termine dello script rc.local temporaneo. Durante il secondo riavvio, puoi controllare il log della console per assicurarti che l'ambiente guest venga caricato.

  9. Verifica di poter eseguire la connessione all'istanza mediante SSH.

    Quando hai la certezza che l'istanza di sostituzione sia funzionante, puoi interrompere o eliminare l'istanza problematica.

Ubuntu

  1. Assicurati che la versione del sistema operativo sia supportata

  2. Crea una nuova istanza da utilizzare come istanza di recupero. Assegna un nome a rescue per questa istanza. Questa istanza di recupero non deve eseguire lo stesso sistema operativo Linux dell'istanza problematica. Questo esempio utilizza Debian 9 sull'istanza di recupero.

  3. Arresta l'istanza problematica e crea una copia del suo disco di avvio.

    1. Imposta un nome variabile per l'istanza problematica. Questo semplifica il riferimento all'istanza nei passaggi successivi.

      export PROB_INSTANCE_NAME=VM_NAME

      Sostituisci VM_NAME con il nome dell'istanza problematica.

    2. Arresta l'istanza problematica.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Recupera il nome del disco di avvio per l'istanza del problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Crea uno snapshot del disco di avvio.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Crea un nuovo disco dallo snapshot.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Elimina lo snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Collega il nuovo disco all'istanza di recupero e monta il volume root per l'istanza di recupero. Poiché questa procedura collega un solo disco aggiuntivo, l'identificatore del dispositivo del nuovo disco è /dev/sdb. Ubuntu classifica il volume principale 1 per impostazione predefinita, quindi l'identificatore di volume deve essere /dev/sdb1. Per i casi personalizzati, utilizza lsblk per determinare l'identificatore di volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Connettiti all'istanza di recupero utilizzando SSH:

    gcloud compute ssh rescue
  6. Esegui i passaggi seguenti nell'istanza di recupero.

    1. Monta il volume root del nuovo 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. Crea lo 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. Sposta lo script rc.local nel volume principale del nuovo disco e imposta le autorizzazioni. Sposta qualsiasi script rc.local esistente. Lo script temporaneo la sostituirà al termine.

      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. Smonta il volume root del nuovo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Esci dalla sessione SSH per recuperare l'istanza.

  7. Scollega il nuovo disco dall'istanza di recupero.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Crea una nuova istanza da sostituire. Quando crei l'istanza di sostituzione, specifica il nuovo disco come disco di avvio. Puoi creare l'istanza di sostituzione utilizzando Google Cloud Console:

    1. In Google Cloud Console, vai alla pagina Istanze VM.

      Vai alle istanze VM

    2. Fai clic sull'istanza problematica e poi su Crea simile.

    3. Specifica un nome per l'istanza di sostituzione. Nella sezione Disco di avvio, fai clic su Cambia e poi su Dischi esistenti. Seleziona il nuovo disco.

    4. Fai clic su Crea. L'istanza di sostituzione inizia automaticamente dopo la creazione.

    All'avvio dell'istanza di sostituzione, lo script rc.local temporaneo viene eseguito e installa l'ambiente guest. Per controllare l'avanzamento di questo script, controlla i log della console per individuare eventuali righe emesse dallo script temporaneo rc.local. Per visualizzare i log, esegui questo comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Sostituisci REPLACEMENT_VM_NAME con il nome che hai assegnato all'istanza di sostituzione.

    L'istanza sostitutiva si riavvia automaticamente anche al termine dello script rc.local temporaneo. Durante il secondo riavvio, puoi controllare il log della console per assicurarti che l'ambiente guest venga caricato.

  9. Verifica di poter eseguire la connessione all'istanza mediante SSH.

    Quando hai la certezza che l'istanza di sostituzione sia funzionante, puoi interrompere o eliminare l'istanza problematica.

Aggiornamento dell'ambiente guest

Se viene visualizzato un messaggio che indica che l'ambiente guest è obsoleto, aggiorna i pacchetti per il tuo sistema operativo.

CentOS/RHEL

Per aggiornare i sistemi operativi CentOS e RHEL, esegui i comandi seguenti:

sudo yum makecache
sudo yum install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Debian

Per aggiornare i sistemi operativi Debian, esegui i seguenti comandi:

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Ubuntu

Per aggiornare i sistemi operativi Ubuntu, esegui questi comandi:

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

SLES

Per aggiornare i sistemi operativi SLES, esegui questi comandi:

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

Windows

Per aggiornare i sistemi operativi Windows, esegui il comando seguente:

googet update

Convalida dell'ambiente guest

La presenza di un ambiente guest può essere determinata esaminando i log di sistema emessi nella console durante l'avvio di un'istanza o elencando i pacchetti installati durante la connessione all'istanza.

Log della console previsti per l'ambiente guest

Questa tabella riassume l'output previsto per i log della console emessi da istanze con ambienti guest funzionanti all'avvio.

Sistema operativo Gestione servizio Output previsto
CentOS/RHEL
Debian
Ubuntu
SLES
Container-Optimized OS 89 e versioni successive
sistemato

GCEGuestAgent Info: GCE Agent Started (version YYYYMMDD.NN)
GCEMetadataScripts: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)
Container-Optimized OS 85 e versioni precedenti sistemato

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)

Per visualizzare i log della console per un'istanza, segui questi passaggi.

Console

  1. In Google Cloud Console, vai alla pagina Istanze VM.

    Vai alle istanze VM

    1. Fai clic sull'istanza che vuoi esaminare.
    2. Riavvia o reimposta l'istanza.
    3. In Log, fai clic su Porta seriale 1 (console).
    4. Cerca l'output previsto che fa riferimento alla tabella sopra.

gcloud

  1. Riavvia o reimposta l'istanza.
  2. Utilizza il sottocomando gcloud compute instances get-serial-port-output per connetterti tramite l'interfaccia a riga di comando di Google Cloud. Ad esempio:

    gcloud compute instances get-serial-port-output VM_NAME

    Sostituisci VM_NAME con il nome dell'istanza che devi esaminare.

  3. Cerca l'output previsto che fa riferimento alla tabella sopra.

Servizi caricati per l'ambiente guest

Questa tabella riassume i servizi che devono essere caricati sulle istanze con ambienti guest funzionanti. Il comando per elencare i servizi deve essere eseguito dopo la connessione all'istanza, quindi questo controllo può essere eseguito solo se hai accesso all'istanza.

Sistema operativo Comando per elencare i servizi Output previsto
CentOS/RHEL
Debian

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

google-disk-expand.service             enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Ubuntu

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

google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Container-Optimized OS

sudo systemctl list-unit-files \
| grep google

var-lib-google.mount                   disabled
google-guest-agent.service             disabled
google-osconfig-agent.service          disabled
google-osconfig-init.service           disabled
google-oslogin-cache.service           static
google-shutdown-scripts.service        disabled
google-startup-scripts.service         disabled
var-lib-google-remount.service         static
google-oslogin-cache.timer             disabled 
SLES 12+

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

Pacchetti installati per l'ambiente guest

Questa tabella riassume i pacchetti da installare sulle istanze con ambienti guest funzionanti. Il comando per elencare i pacchetti installati deve essere eseguito dopo la connessione all'istanza, quindi questo controllo può essere eseguito solo se hai accesso all'istanza.

Sistema operativo Comando per elencare i pacchetti Output previsto
CentOS/RHEL

rpm -qa --queryformat '%{NAME}\n' \
|grep -iE google\|gce | grep -iE \
'google|gce'

google-osconfig-agent
google-compute-engine-oslogin
google-guest-agent
gce-disk-expand
google-cloud-sdk
google-compute-engine
Debian

apt list --installed \
| grep -iE 'google'

gce-disk-expand
google-cloud-packages-archive-keyring
google-cloud-sdk
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
Ubuntu

apt list --installed \
| grep -iE "google"

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

rpm -qa --queryformat '%{NAME}\n' \
|grep -iE google

google-guest-configs
google-osconfig-agent
google-guest-oslogin
google-guest-agent
Windows

googet installed

certgen
googet
google-compute-engine-auto-updater
google-compute-engine-driver-gga
google-compute-engine-driver-netkvm
google-compute-engine-driver-pvpanic
google-compute-engine-driver-vioscsi
google-compute-engine-metadata-scripts
google-compute-engine-powershell
google-compute-engine-sysprep
google-compute-engine-vss
google-compute-engine-windows
google-osconfig-agent

Passaggi successivi