Menginstal lingkungan tamu


Halaman ini menjelaskan cara menginstal lingkungan tamu secara manual untuk instance virtual machine (VM) yang menjalankan image kustom di Compute Engine.

Pada umumnya, jika menggunakan VM yang dibuat menggunakan image publik yang disediakan Google, Anda tidak perlu menginstal lingkungan tamu. Untuk mengetahui informasi tentang kapan harus menggunakan lingkungan tamu, lihat Kapan harus menginstal atau mengupdate lingkungan tamu secara manual.

Sebelum menginstal lingkungan tamu secara manual, gunakan prosedur Memvalidasi lingkungan tamu untuk memeriksa apakah lingkungan tamu berjalan di VM Anda. Jika lingkungan tamu tersedia di VM Anda, tetapi sudah usang, update lingkungan tamu.

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

Metode penginstalan

Ada beberapa cara untuk menginstal lingkungan tamu. Pilih salah satu opsi berikut:

  • Alat impor. Opsi ini disarankan. Namun, perlu diingat bahwa alat impor tidak hanya menginstal lingkungan tamu, tetapi juga melakukan update konfigurasi lainnya pada image seperti mengonfigurasi jaringan, mengonfigurasi bootloader, dan menginstal Google Cloud CLI. Untuk mengetahui petunjuk cara menggunakan alat impor, tinjau Membuat image yang dapat di-booting.

    Alat impor mendukung berbagai sistem operasi dan versi. Untuk mengetahui informasi selengkapnya, lihat detail sistem operasi.

  • Penginstalan manual. Pilih salah satu opsi berikut:

Sistem operasi yang didukung

Anda dapat menginstal lingkungan tamu secara manual di VM yang menggunakan versi image OS yang berada dalam siklus proses ketersediaan umum (GA) atau tahap siklus proses dukungan yang diperpanjang. Untuk meninjau daftar versi image OS dan tahap siklus prosesnya di Compute Engine, lihat Detail sistem operasi.

Batasan

Anda tidak dapat menginstal atau menggunakan alat impor secara manual untuk menginstal lingkungan tamu untuk Fedora CoreOS dan sistem operasi yang dioptimalkan untuk Container. Jika Anda memerlukan salah satu sistem operasi ini, sebaiknya gunakan image publik, karena lingkungan tamu disertakan sebagai bagian inti dari semua image publik.

Menginstal lingkungan tamu

Menginstal lingkungan tamu di tempat

Gunakan metode ini untuk menginstal lingkungan tamu jika Anda dapat terhubung ke instance target menggunakan SSH. Jika tidak dapat terhubung ke instance untuk menginstal lingkungan tamu, Anda dapat menginstal lingkungan tamu dengan meng-clone boot disk-nya dan menggunakan skrip startup.

Prosedur ini berguna untuk image yang diimpor jika Anda dapat terhubung menggunakan autentikasi berbasis sandi SSH. File ini juga dapat digunakan untuk menginstal ulang lingkungan tamu jika Anda memiliki setidaknya satu akun pengguna dengan SSH berbasis kunci yang berfungsi.

CentOS/RHEL/Rocky

  1. Pastikan versi sistem operasi Anda didukung.
  2. Tentukan versi CentOS/RHEL/Rocky Linux, dan buat file repo sumber, /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. Perbarui daftar paket:

    sudo yum makecache
    sudo yum updateinfo
    
  4. Instal paket lingkungan tamu:

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. Mulai ulang instance dan periksa log konsolnya untuk memastikan lingkungan tamu dimuat saat mulai kembali.

  6. Pastikan Anda dapat terhubung ke instance menggunakan SSH.

Debian

  1. Pastikan versi sistem operasi Anda didukung.
  2. Instal kunci GPG repo publik:

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. Tentukan nama distro Debian, dan buat file daftar sumber, /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. Perbarui daftar paket:

    sudo apt update
  5. Instal paket lingkungan tamu:

    sudo apt install -y google-cloud-packages-archive-keyring
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. Mulai ulang instance dan periksa log konsolnya untuk memastikan lingkungan tamu dimuat saat mulai kembali.

  7. Pastikan Anda dapat terhubung ke instance menggunakan SSH.

Ubuntu

  1. Pastikan versi sistem operasi Anda didukung.

  2. Aktifkan repositori Universe. Canonical memublikasikan paket untuk lingkungan tamunya ke repositori Universe.

    sudo apt-add-repository universe
  3. Perbarui daftar paket:

    sudo apt update
  4. Instal paket lingkungan tamu:

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. Mulai ulang instance dan periksa log konsolnya untuk memastikan lingkungan tamu dimuat saat mulai kembali.

  6. Pastikan Anda dapat terhubung ke instance menggunakan SSH.

SLES

  1. Pastikan versi sistem operasi Anda didukung.

  2. Aktifkan Modul Cloud Publik.

    product=$(sudo SUSEConnect --list-extensions | grep -o "sle-module-public-cloud.*")
    [[ -n "$product" ]] && sudo SUSEConnect -p "$product"
    
  3. Perbarui daftar paket:

    sudo zypper refresh
  4. Instal paket lingkungan tamu:

    sudo zypper install -y google-guest-{agent,configs,oslogin} \
    google-osconfig-agent
    sudo systemctl enable /usr/lib/systemd/system/google-*
    
  5. Mulai ulang instance dan periksa log konsolnya untuk memastikan lingkungan tamu dimuat saat mulai kembali.

  6. Pastikan Anda dapat terhubung ke instance menggunakan SSH.

Windows

Sebelum memulai, pastikan versi sistem operasi Anda didukung.

Untuk menginstal lingkungan tamu Windows, jalankan perintah berikut di prompt PowerShell versi 3.0 atau yang lebih tinggi yang telah ditingkatkan. Perintah Invoke-WebRequest dalam petunjuk di bawah memerlukan versi PowerShell yang lebih tinggi dari 3.0.

  1. Download dan instal 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"
    

    Selama penginstalan, GooGet menambahkan konten ke lingkungan sistem. Setelah penginstalan selesai, luncurkan konsol PowerShell baru atau berikan jalur lengkap ke file googet.exe (C:\ProgramData\GooGet\googet.exe).

  2. Buka konsol baru dan tambahkan repositori google-compute-engine-stable.

    googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
  3. Instal paket lingkungan tamu Windows inti.

    googet -noconfirm install google-compute-engine-windows `
    google-compute-engine-sysprep google-compute-engine-metadata-scripts `
    google-compute-engine-vss google-osconfig-agent
    
  4. Instal paket lingkungan tamu Windows opsional.

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

    Menggunakan perintah googet.

    Untuk melihat paket yang tersedia, jalankan perintah googet available.

    Untuk melihat paket yang diinstal, jalankan perintah googet installed.

    Untuk mengupdate ke versi paket terbaru, jalankan perintah googet update.

    Untuk melihat perintah tambahan, jalankan googet help.

Meng-clone disk booting dan menggunakan skrip startup

Jika Anda tidak dapat terhubung ke instance untuk menginstal lingkungan tamu secara manual, instal lingkungan tamu menggunakan prosedur ini, yang mencakup langkah-langkah berikut yang dapat diselesaikan di konsol Google Cloud atau Cloud Shell.

Metode ini hanya menunjukkan prosedur untuk distribusi Linux. Untuk Windows, gunakan salah satu dari dua metode penginstalan lainnya.

Gunakan Cloud Shell untuk menjalankan prosedur ini. Jika Anda tidak menggunakan Cloud Shell, instal prosesor JSON command line jq. Anda dapat menggunakan pemroses ini untuk memfilter output gcloud CLI. Cloud Shell telah menginstal jq sebelumnya.

CentOS/RHEL/Rocky

  1. Pastikan versi sistem operasi Anda didukung.

  2. Buat instance baru untuk berfungsi sebagai instance penyelamatan. Beri nama instance ini rescue. Instance penyelamatan ini tidak perlu menjalankan OS Linux yang sama dengan instance yang bermasalah. Contoh ini menggunakan Debian 9 pada instance penyelamatan.

  3. Hentikan instance yang bermasalah dan buat salinan boot disk-nya.

    1. Tetapkan nama variabel untuk instance yang bermasalah. Hal ini memudahkan Anda untuk mereferensikan instance di langkah berikutnya.

      export PROB_INSTANCE_NAME=VM_NAME

      Ganti VM_NAME dengan nama instance yang bermasalah.

    2. Hentikan instance yang bermasalah.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Dapatkan nama disk booting untuk instance yang bermasalah.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Buat snapshot boot disk.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Membuat disk baru dari snapshot.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Pasang disk baru ke instance penyelamatan dan pasang volume root untuk instance penyelamatan. Karena prosedur ini hanya memasang satu disk tambahan, ID perangkat disk baru adalah /dev/sdb. CentOS/RHEL/Rocky Linux menggunakan volume pertama pada disk sebagai volume root secara default, sehingga ID volume harus berupa /dev/sdb1. Untuk kasus kustom, gunakan lsblk untuk menentukan ID volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Hubungkan ke instance penyelamatan menggunakan SSH:

    gcloud compute ssh rescue
  6. Jalankan langkah-langkah berikut di instance penyelamatan.

    1. Pasang volume root disk baru.

      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. Buat skrip 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. Pindahkan skrip rc.local ke volume root disk baru dan tetapkan izin. Pindahkan skrip rc.local yang ada. Skrip sementara akan menggantikannya saat selesai.

      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. Lepaskan volume root disk baru.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    5. Keluar dari sesi SSH ke instance penyelamatan.

  7. Lepaskan disk baru dari instance penyelamatan.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Buat instance untuk berfungsi sebagai pengganti. Saat Anda membuat instance pengganti, tentukan disk baru sebagai boot disk. Anda dapat membuat instance pengganti menggunakan Konsol Google Cloud:

    1. Di konsol Google Cloud, buka halaman Instance VM.

      Buka instance VM

    2. Klik instance yang bermasalah, lalu klik Buat yang serupa.

    3. Tentukan nama untuk instance pengganti. Di bagian Boot disk, klik Change, lalu klik Existing Disks. Pilih disk baru.

    4. Klik Create. Instance pengganti akan otomatis dimulai setelah dibuat.

    Saat instance pengganti dimulai, skrip rc.local sementara akan berjalan dan menginstal lingkungan tamu. Untuk melihat progres skrip ini, periksa log konsol untuk menemukan baris yang dikeluarkan oleh skrip rc.local sementara. Untuk melihat log, jalankan perintah berikut:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Ganti REPLACEMENT_VM_NAME dengan nama yang Anda tetapkan untuk instance pengganti.

    Instance pengganti juga otomatis dimulai ulang saat skrip rc.local sementara selesai. Selama booting ulang kedua, Anda dapat memeriksa log konsol untuk memastikan lingkungan tamu dimuat.

  9. Pastikan Anda dapat terhubung ke instance menggunakan SSH.

    Jika yakin bahwa instance pengganti berfungsi, Anda dapat menghentikan atau menghapus instance yang bermasalah.

Debian

  1. Pastikan versi sistem operasi Anda didukung

  2. Buat instance baru untuk berfungsi sebagai instance penyelamatan. Beri nama instance ini rescue. Instance penyelamatan ini tidak perlu menjalankan OS Linux yang sama dengan instance yang bermasalah. Contoh ini menggunakan Debian 9 di instance penyelamatan.

  3. Hentikan instance yang bermasalah dan buat salinan boot disk-nya.

    1. Tetapkan nama variabel untuk instance yang bermasalah. Hal ini memudahkan untuk mereferensikan instance di langkah berikutnya.

      export PROB_INSTANCE_NAME=VM_NAME

      Ganti VM_NAME dengan nama instance yang bermasalah.

    2. Hentikan instance yang bermasalah.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Dapatkan nama disk booting untuk instance yang bermasalah.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Buat snapshot boot disk.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Membuat disk baru dari snapshot.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Pasang disk baru ke instance penyelamatan dan pasang volume root untuk instance penyelamatan. Karena prosedur ini hanya memasang satu disk tambahan, ID perangkat disk baru adalah /dev/sdb. Debian menggunakan volume pertama pada disk sebagai volume root secara default, sehingga ID volume harus berupa /dev/sdb1. Untuk kasus kustom, gunakan lsblk untuk menentukan ID volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Hubungkan ke instance penyelamatan menggunakan SSH:

    gcloud compute ssh rescue
  6. Jalankan langkah-langkah berikut di instance penyelamatan.

    1. Pasang volume root disk baru.

      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. Buat skrip 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. Pindahkan skrip rc.local ke volume root disk baru dan tetapkan izin. Pindahkan skrip rc.local yang ada. Skrip sementara akan menggantikannya saat selesai.

      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. Lepaskan volume root disk baru.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Keluar dari sesi SSH ke instance penyelamatan.

  7. Lepaskan disk baru dari instance penyelamatan.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Buat instance baru untuk berfungsi sebagai pengganti. Saat Anda membuat instance pengganti, tentukan disk baru sebagai boot disk. Anda dapat membuat instance pengganti menggunakan Konsol Google Cloud:

    1. Di konsol Google Cloud, buka halaman Instance VM.

      Buka instance VM

    2. Klik instance yang bermasalah, lalu klik Buat yang serupa.

    3. Tentukan nama untuk instance pengganti. Di bagian Boot disk, klik Change, lalu klik Existing Disks. Pilih disk baru.

    4. Klik Create. Instance pengganti akan otomatis dimulai setelah dibuat.

    Saat instance pengganti dimulai, skrip rc.local sementara akan berjalan dan menginstal lingkungan tamu. Untuk melihat progres skrip ini, periksa log konsol untuk menemukan baris yang dikeluarkan oleh skrip rc.local sementara. Untuk melihat log, jalankan perintah berikut:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Ganti REPLACEMENT_VM_NAME dengan nama yang Anda tetapkan untuk instance pengganti.

    Instance pengganti juga otomatis dimulai ulang saat skrip rc.local sementara selesai. Selama booting ulang kedua, Anda dapat memeriksa log konsol untuk memastikan lingkungan tamu dimuat.

  9. Pastikan Anda dapat terhubung ke instance menggunakan SSH.

    Jika yakin bahwa instance pengganti berfungsi, Anda dapat menghentikan atau menghapus instance yang bermasalah.

Ubuntu

  1. Pastikan versi sistem operasi Anda didukung

  2. Buat instance baru untuk berfungsi sebagai instance penyelamatan. Beri nama instance ini rescue. Instance penyelamatan ini tidak perlu menjalankan OS Linux yang sama dengan instance yang bermasalah. Contoh ini menggunakan Debian 9 di instance penyelamatan.

  3. Hentikan instance yang bermasalah dan buat salinan boot disk-nya.

    1. Tetapkan nama variabel untuk instance yang bermasalah. Hal ini memudahkan untuk mereferensikan instance di langkah berikutnya.

      export PROB_INSTANCE_NAME=VM_NAME

      Ganti VM_NAME dengan nama instance yang bermasalah.

    2. Hentikan instance yang bermasalah.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Dapatkan nama disk booting untuk instance yang bermasalah.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Buat snapshot boot disk.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Membuat disk baru dari snapshot.

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

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Pasang disk baru ke instance penyelamatan dan pasang volume root untuk instance penyelamatan. Karena prosedur ini hanya memasang satu disk tambahan, ID perangkat disk baru adalah /dev/sdb. Ubuntu memberi label volume rootnya 1 secara default, sehingga ID volume harus berupa /dev/sdb1. Untuk kasus kustom, gunakan lsblk untuk menentukan ID volume.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Hubungkan ke instance penyelamatan menggunakan SSH:

    gcloud compute ssh rescue
  6. Jalankan langkah-langkah berikut pada instance penyelamatan.

    1. Pasang volume root disk baru.

      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. Buat skrip 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. Pindahkan skrip rc.local ke volume root disk baru dan tetapkan izin. Pindahkan skrip rc.local yang ada. Skrip sementara akan menggantikannya saat selesai.

      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. Lepaskan volume root disk baru.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Keluar dari sesi SSH ke instance penyelamatan.

  7. Lepaskan disk baru dari instance penyelamatan.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Buat instance baru untuk berfungsi sebagai pengganti. Saat membuat instance pengganti, tentukan disk baru sebagai boot disk. Anda dapat membuat instance pengganti menggunakan Konsol Google Cloud:

    1. Di konsol Google Cloud, buka halaman Instance VM.

      Buka instance VM

    2. Klik instance yang bermasalah, lalu klik Buat yang serupa.

    3. Tentukan nama untuk instance pengganti. Di bagian Boot disk, klik Change, lalu klik Existing Disks. Pilih disk baru.

    4. Klik Create. Instance pengganti akan otomatis dimulai setelah dibuat.

    Saat instance pengganti dimulai, skrip rc.local sementara akan berjalan dan menginstal lingkungan tamu. Untuk melihat progres skrip ini, periksa log konsol untuk menemukan baris yang dikeluarkan oleh skrip rc.local sementara. Untuk melihat log, jalankan perintah berikut:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Ganti REPLACEMENT_VM_NAME dengan nama yang Anda tetapkan untuk instance pengganti.

    Instance pengganti juga otomatis dimulai ulang saat skrip rc.local sementara selesai. Selama booting ulang kedua, Anda dapat memeriksa log konsol untuk memastikan lingkungan tamu dimuat.

  9. Pastikan Anda dapat terhubung ke instance menggunakan SSH.

    Jika yakin bahwa instance pengganti berfungsi, Anda dapat menghentikan atau menghapus instance yang bermasalah.

Memperbarui lingkungan tamu

Jika Anda mendapatkan pesan bahwa lingkungan tamu sudah usang, update paket untuk sistem operasi Anda.

CentOS/RHEL/Rocky

Untuk mengupdate sistem operasi CentOS, RHEL, dan Rocky Linux, jalankan perintah berikut:

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

Debian

Untuk mengupdate sistem operasi Debian, jalankan perintah berikut:

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

Ubuntu

Untuk mengupdate sistem operasi Ubuntu, jalankan perintah berikut:

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

SLES

Untuk mengupdate sistem operasi SLES, jalankan perintah berikut:

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

Windows

Untuk mengupdate sistem operasi Windows, jalankan perintah berikut:

googet update

Memvalidasi lingkungan tamu

Kehadiran lingkungan tamu dapat ditentukan dengan memeriksa log sistem yang ditampilkan ke konsol saat instance dimulai, atau dengan mencantumkan paket yang diinstal saat terhubung ke instance.

Log konsol yang diharapkan untuk lingkungan tamu

Tabel ini merangkum output yang diharapkan untuk log konsol yang dikeluarkan oleh instance dengan lingkungan tamu yang berfungsi saat dimulai.

Sistem operasi Pengelolaan layanan Output yang diharapkan
CentOS/RHEL/Rocky Linux
Debian
Ubuntu
SLES
Container-Optimized OS 89 dan yang lebih baru
systemd
google_guest_agent: GCE Agent Started (version YYYYMMDD.NN)
google_metadata_script_runner: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)
Container-Optimized OS 85 dan yang lebih lama systemd
Started Google Compute Engine Accounts Daemon
Started Google Compute Engine Network Daemon
Started Google Compute Engine Clock Skew Daemon
Started Google Compute Engine Instance Setup
Started Google Compute Engine Startup Scripts
Started Google Compute Engine Shutdown Scripts
Windows
GCEGuestAgent: GCE Agent Started (version YYYYMMDD.NN)
GCEMetadataScripts: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)

Untuk melihat log konsol untuk instance, ikuti langkah-langkah berikut.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

    1. Klik instance yang perlu Anda periksa.
    2. Mulai ulang atau reset instance.
    3. Di bagian Logs, klik Serial port 1 (console).
    4. Telusuri output yang diharapkan yang mereferensikan tabel di atas.

gcloud

  1. Mulai ulang atau reset instance.
  2. Gunakan subperintah gcloud compute instances get-serial-port-output untuk terhubung menggunakan Google Cloud CLI. Contoh:

    gcloud compute instances get-serial-port-output VM_NAME

    Ganti VM_NAME dengan nama instance yang perlu Anda periksa.

  3. Telusuri output yang diharapkan yang mereferensikan tabel di atas.

Layanan yang dimuat untuk lingkungan tamu

Tabel ini merangkum layanan yang harus dimuat di instance dengan lingkungan tamu yang berfungsi. Perintah untuk mencantumkan layanan harus dijalankan setelah terhubung ke instance, sehingga pemeriksaan ini hanya dapat dilakukan jika Anda memiliki akses ke instance tersebut.

Sistem operasi Perintah untuk mencantumkan layanan Output yang diharapkan
CentOS/RHEL/Rocky Linux
Debian
sudo systemctl list-unit-files \
| grep google | grep enabled
google-disk-expand.service             enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Ubuntu
sudo systemctl list-unit-files \
| grep google | grep enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Container-Optimized OS
sudo systemctl list-unit-files \
| grep google
var-lib-google.mount                   disabled
google-guest-agent.service             disabled
google-osconfig-agent.service          disabled
google-osconfig-init.service           disabled
google-oslogin-cache.service           static
google-shutdown-scripts.service        disabled
google-startup-scripts.service         disabled
var-lib-google-remount.service         static
google-oslogin-cache.timer             disabled 
SLES 12+
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

Paket yang diinstal untuk lingkungan tamu

Tabel ini merangkum paket yang harus diinstal di instance dengan lingkungan tamu yang berfungsi. Perintah untuk mencantumkan paket yang diinstal harus dijalankan setelah terhubung ke instance, sehingga pemeriksaan ini hanya dapat dilakukan jika Anda memiliki akses ke instance tersebut.

Sistem operasi Perintah untuk mencantumkan paket Output yang diharapkan
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

Langkah selanjutnya