首页 > 解决方案 > `apt-get update` 后 GCP Compute Engine 虚拟机启动脚本和 SSH 中断

问题描述

要在实例上安装 git ,我们按照此处看到的说明e2-medium (2 vCPUs, 4 GB memory) Debian GNU/Linux 10 (buster)运行以下脚本中定义的 脚本: Linux 上的 GCP 启动脚本。startup-script-url

运行后sudo apt-get updatesudo apt updateVMS 的行为发生变化:

  1. 停止和恢复 VM 后,启动脚本似乎没有执行
  2. 无法通过 GCP GUI 通过 Web 控制台进行 SSH。

关于为什么会发生这种情况以及如何解决这个问题的任何想法?我们通过从源代码安装 git 暂时解决了问题。


启动脚本.sh

定义为--metadata startup-script-url=gs://my-project/startupscript.sh

#!/bin/bash

if ! command -v git &> /dev/null
then
    echo "============================================"
    echo "GIT WAS NOT FOUND. PLEASE INSTALL"
    sudo apt -y update 
    sudo apt install -y git-all
    echo "============================================"
fi

echo "CONTINUE TO DO MORE HERE"

1. 初始成功运行

检查启动脚本日志

该脚本已根据以下日志成功运行:

Oct 29 14:48:48 instance-1 google_metadata_script_runner[521]: startup-script-url: Processing triggers for man-db (2.8.5-2) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Processing triggers for install-info (6.5.0.dfsg.1-4+b1) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Processing triggers for mime-support (3.62) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Processing triggers for libglib2.0-0:amd64 (2.58.3-2+deb10u3) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Processing triggers for libc-bin (2.28-10) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up glib-networking:amd64 (2.58.0-2+deb10u2) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up libsoup2.4-1:amd64 (2.64.2-2) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up libsoup-gnome2.4-1:amd64 (2.64.2-2) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up librest-0.7-0:amd64 (0.8.1-1) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up libgtk-3-0:amd64 (3.24.5-1) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up emacs-gtk (1:26.1+1-3.2+deb10u2) ...
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: update-alternatives: using /usr/bin/emacs-gtk to provide /usr/bin/emacs (emacs) in auto mode
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Install emacsen-common for emacs
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: emacsen-common: Handling install of emacsen flavor emacs
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Install git for emacs
Oct 29 14:49:09 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up git-el (1:2.20.1-2+deb10u3) ...
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url: Install git for emacs
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url: Install git for emacs
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up emacs (1:26.1+1-3.2+deb10u2) ...
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url: Setting up git-all (1:2.20.1-2+deb10u3) ...
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url: Processing triggers for libgdk-pixbuf2.0-0:amd64 (2.38.1+dfsg-1) ...
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url: Processing triggers for libc-bin (2.28-10) ...
Oct 29 14:49:10 instance-1 sudo[1212]: pam_unix(sudo:session): session closed for user root
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url: ============================================
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url: CONTINUE TO DO MORE HERE
Oct 29 14:49:10 instance-1 google_metadata_script_runner[521]: startup-script-url exit status 0

还在 GOOGLE 云日志中验证

Cloud Logging 只显示直到Processing triggers for man-db日志,这有点奇怪,但似乎所有的都已经安装了。

日志只显示到处理触发 man-db 日志,但我们假设一切都已正确安装。


2. 关机

sudo poweroff


3. 从 GUI 启动 VM

启动脚本执行,web ssh 坏了。

检查启动脚本日志

No journal files were found.

还在 GOOGLE 云日志中验证

除了启动之外,看不到任何日志。也没有迹象表明找到启动脚本 url 元数据(通常发生)

在此处输入图像描述

WEB SSH 不再有效

在此处输入图像描述

引导日志

journalctl -b

No journal files were found
-- No entries --

sudo /var/log/dmesg

command not found

/var/log/boot.log

-bash: /var/log/boot.log: No such file or directory

标签: linuxgoogle-cloud-platformdebiangoogle-compute-engine

解决方案


在这里,当我们安装git-all时,它会用旧的 SysV 初始化系统替换 systemd 初始化系统,从而破坏cloud-init几乎所有的引导过程。这就是您无法通过 SSH 连接到您的实例的原因。

此问题有 2 个可能的修复方法:

  1. 正如@John Hanley 所说,尝试使用 git 而不是 git-all。
  2. 如果 git-all 是强制性的,那么尝试使用apt install --no-install-recommends -y git-all这将确保没有安装推荐。

推荐阅读