GCP Compute Engine VM 启动脚本和 SSH 在“apt-get update”后中断
GCP Compute Engine VM startup-script and SSH Breaks after `apt-get update`
要在 e2-medium (2 vCPUs, 4 GB memory) Debian GNU/Linux 10 (buster)
个实例上安装 git,我们 运行 按照此处显示的说明在 startup-script-url
中定义以下脚本:GCP Startup Scripts on Linux.
在 运行 宁 sudo apt-get update
或 sudo apt update
之后,VMS 的行为发生了变化:
- 启动脚本在停止和恢复 VM 后似乎不执行
- 无法通过 GCP GUI 通过 Web 控制台进行 SSH。
关于为什么会发生这种情况以及如何解决这个问题有什么想法吗?我们通过从源安装 git 来临时解决问题。
startupscript.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
启动脚本执行,网络 ssh 损坏。
检查启动脚本日志
- SSH 进入虚拟机
- 运行
sudo journalctl -xefu google-startup-scripts -f
No journal files were found.
也在 GOOGLE 云日志记录中验证
除了启动之外,看不到任何日志。也没有迹象表明找到了 startup-script-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
GCP 启动脚本 运行 在容器创建时,而不是在 Linux 启动时(那些“后续启动”是一种错觉)。而且剧本本身是荒谬的;就做 apt install -y git
。当 aptitude
执行相同的检查时,检查包是否存在根本没有意义(尝试不必要的包时可以查看日志)。请注意,此脚本所做的一切都将 运行 作为用户 root
并归用户 root
所有,这可能需要一个或另一个 chmod
或 chown
。 “虚拟机不再按预期工作”是我无法重现的;这不是错误描述。
在这里,当我们安装 git-all 时,它用旧的 SysV 初始化系统替换了 systemd 初始化系统,破坏了 cloud-init
和几乎所有启动 process.This 是您无法通过 SSH 连接到您的实例的原因。
此问题有 2 个可能的修复方法:
- 正如@John Hanley 所说,尝试使用 git 而不是 git-all。
- 如果 git-all 是强制性的,那么尝试使用 apt install
--no-install-recommends -y git-all 这将确保没有安装推荐。
要在 e2-medium (2 vCPUs, 4 GB memory) Debian GNU/Linux 10 (buster)
个实例上安装 git,我们 运行 按照此处显示的说明在 startup-script-url
中定义以下脚本:GCP Startup Scripts on Linux.
在 运行 宁 sudo apt-get update
或 sudo apt update
之后,VMS 的行为发生了变化:
- 启动脚本在停止和恢复 VM 后似乎不执行
- 无法通过 GCP GUI 通过 Web 控制台进行 SSH。
关于为什么会发生这种情况以及如何解决这个问题有什么想法吗?我们通过从源安装 git 来临时解决问题。
startupscript.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
启动脚本执行,网络 ssh 损坏。
检查启动脚本日志
- SSH 进入虚拟机
- 运行
sudo journalctl -xefu google-startup-scripts -f
No journal files were found.
也在 GOOGLE 云日志记录中验证
除了启动之外,看不到任何日志。也没有迹象表明找到了 startup-script-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
GCP 启动脚本 运行 在容器创建时,而不是在 Linux 启动时(那些“后续启动”是一种错觉)。而且剧本本身是荒谬的;就做 apt install -y git
。当 aptitude
执行相同的检查时,检查包是否存在根本没有意义(尝试不必要的包时可以查看日志)。请注意,此脚本所做的一切都将 运行 作为用户 root
并归用户 root
所有,这可能需要一个或另一个 chmod
或 chown
。 “虚拟机不再按预期工作”是我无法重现的;这不是错误描述。
在这里,当我们安装 git-all 时,它用旧的 SysV 初始化系统替换了 systemd 初始化系统,破坏了 cloud-init
和几乎所有启动 process.This 是您无法通过 SSH 连接到您的实例的原因。
此问题有 2 个可能的修复方法:
- 正如@John Hanley 所说,尝试使用 git 而不是 git-all。
- 如果 git-all 是强制性的,那么尝试使用 apt install --no-install-recommends -y git-all 这将确保没有安装推荐。