linux - `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 update
或sudo apt update
VMS 的行为发生变化:
- 停止和恢复 VM 后,启动脚本似乎没有执行
- 无法通过 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. 初始成功运行
检查启动脚本日志
- SSH 进入虚拟机
- 跑
sudo journalctl -xefu google-startup-scripts -f
该脚本已根据以下日志成功运行:
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
日志,这有点奇怪,但似乎所有的都已经安装了。
2. 关机
sudo poweroff
3. 从 GUI 启动 VM
启动脚本执行,web ssh 坏了。
检查启动脚本日志
- SSH 进入虚拟机
- 跑
sudo journalctl -xefu google-startup-scripts -f
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
解决方案
在这里,当我们安装git-all时,它会用旧的 SysV 初始化系统替换 systemd 初始化系统,从而破坏cloud-init
几乎所有的引导过程。这就是您无法通过 SSH 连接到您的实例的原因。
此问题有 2 个可能的修复方法:
- 正如@John Hanley 所说,尝试使用 git 而不是 git-all。
- 如果 git-all 是强制性的,那么尝试使用apt install --no-install-recommends -y git-all这将确保没有安装推荐。
推荐阅读
- c# - VS2017:没有在 C# 中使用 XslCompiledTransform 调试 XSLT?
- javascript - 如何编写正则表达式以接受无限数?
- angular - 我可以将角度组件附加到 SVG
- latex - 将 bib2gls 与 rmarkdown 一起使用无法呈现词汇表
- python - 在 linux 上安装和运行 pypy
- git - 忽略远程提交,只推送本地
- python - 如何从 python 中的 CSV 文件中删除空白行?
- python - 是否可以使用 itertools.permutations() 实时打印排列?
- javascript - jQuery 无法正确识别 CSS 动画结束事件何时触发
- sql - 有语句后对输出数据进行分组