google-cloud-platform - 使用启动脚本时首次重启后无法访问虚拟机
问题描述
我在 GCP 的 CentOS7 VM 中使用以下启动脚本。首次重启后可访问该 url。但是,如果我重新启动机器或停止然后启动机器,则机器无法访问,并且 url 也不起作用。我虽然这可能是由于 selinux,所以我添加了禁用 selinux 的代码,但结果仍然相同。我通过创建多个新虚拟机尝试了这一点,但看起来有些东西我无法弄清楚。当我在虚拟机上手动执行这个脚本并尝试多次重启时,我没有遇到任何问题。
#!/bin/bash -xe
# introducing sleep so network interfaces and routes can get ready before fetching software
sleep 10
if rpm -q --quiet httpd ; then
echo "installed"
else
yum update -y
yum install -y httpd php php-common
setenforce 0
sed -i.bak -e 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
cat > /var/www/html/index.php <<'EOF'
<?php
function metadata_value($value) {
$opts = array(
"http" => array(
"method" => "GET",
"header" => "Metadata-Flavor: Google"
)
);
$context = stream_context_create($opts);
$content = file_get_contents("http://metadata/computeMetadata/v1/$value", false, $context);
return $content;
}
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == "http") {
$redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirect);
exit();
}
?>
<!doctype html>
<html>
<head>
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.0/css/materialize.min.css">
<!-- Compiled and minified JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.0/js/materialize.min.js"></script>
<title>Frontend Web Server</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col s2"> </div>
<div class="col s8">
<img src="/assets/gcp-logo.svg"/>
<div class="card blue">
<div class="card-content white-text">
<div class="card-title">Backend that serviced this request</div>
</div>
<div class="card-content white">
<table class="bordered">
<tbody>
<tr>
<td>Name</td>
<td><?php printf(metadata_value("instance/name")) ?></td>
</tr>
<tr>
<td>ID</td>
<td><?php printf(metadata_value("instance/id")) ?></td>
</tr>
<tr>
<td>Hostname</td>
<td><?php printf(metadata_value("instance/hostname")) ?></td>
</tr>
<tr>
<td>Zone</td>
<td><?php printf(metadata_value("instance/zone")) ?></td>
</tr>
<tr>
<td>Machine Type</td>
<td><?php printf(metadata_value("instance/machine-type")) ?></td>
</tr>
<tr>
<td>Project</td>
<td><?php printf(metadata_value("project/project-id")) ?></td>
</tr>
<tr>
<td>Internal IP</td>
<td><?php printf(metadata_value("instance/network-interfaces/0/ip")) ?></td>
</tr>
<tr>
<td>External IP</td>
<td><?php printf(metadata_value("instance/network-interfaces/0/access-configs/0/external-ip")) ?></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="card blue">
<div class="card-content white-text">
<div class="card-title">Proxy that handled this request</div>
</div>
<div class="card-content white">
<table class="bordered">
<tbody>
<tr>
<td>Address</td>
<td><?php printf($_SERVER["HTTP_HOST"]); ?></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col s2"> </div>
</div>
</div>
</html>
EOF
mkdir -p /var/www/html/group1 && cp /var/www/html/index.php /var/www/html/group1/index.php
systemctl enable httpd
systemctl restart httpd
fi
在控制台上,我可以看到以下输出
serialport: Connected to mytower.us-central1-a.centos7 port 1 (session ID: 405c4d17b926f0906f45a53784d4abd379d6480d, active connections: 1).
DS - 0000000000000030, ES - 0000000000000030, FS - 0000000000000030
GS - 0000000000000030, SS - 0000000000000030
CR0 - 0000000080010033, CR2 - 0000000000000000, CR3 - 00000000BF401000
CR4 - 0000000000000668, CR8 - 0000000000000000
DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000
DR3 - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400
GDTR - 00000000BF3EEA98 0000000000000047, LDTR - 0000000000000000
IDTR - 00000000BEE1F018 0000000000000FFF, TR - 0000000000000000
FXSAVE_STATE - 00000000BFF39AB0
!!!! Find image based on IP(0xBF2E6D5C) /build/work/af60adde42b1d1ad5be2a01e4924bb905248/google3/blaze-out/k8-opt/genfiles/third_party/edk2/ovmf_x64_csm_debug_workspace_dir/ovmf_x64_csm_debug_edk2_files_dir/Build/OvmfX64/DEBUG_CLANG38/X64/OvmfPkg/8254TimerDxe/8254Timer/DEBUG/Timer.dll (ImageBase=00000000BF2E5000, EntryPoint=00000000BF2E6AB5) !!!!
有没有人面临这样的问题?请求帮助我找出重启后无法访问 VM 的原因。
谢谢
解决方案
这是已知问题,Google 工程师也知道:
我们目前遇到了运行 RHEL 和 CentOS 7 和 8 的 Google Compute Engine 实例的问题。有关此问题的更多详细信息,请参阅以下文章和错误:
- https://access.redhat.com/solutions/5272311
- https://bugzilla.redhat.com/show_bug.cgi?id=1861977 (RHEL 8)
- https://bugzilla.redhat.com/show_bug.cgi?id=1862045 (RHEL 7)
症状:运行 yum update 的运行 RHEL 和 CentOS 7 和 8 的实例在重新启动后可能无法启动,错误消息涉及以下组合:
- "X64 异常类型 - 0D(#GP - 一般保护) CPU Apic ID",
- "FXSAVE_STATE",
- 或“根据 IP 查找图像”。
此问题会影响安装了特定版本的 shim 包的实例。要查找当前安装的 shim 版本,请使用以下命令:
rpm -q shim-x64
受影响的垫片版本:
CentOS 7: shim-x64-15-7.el7_9.x86_64 CentOS 8: shim-x64-15-13.el8.x86_64 RHEL 7: shim-x64-15-7.el7_8.x86_64 RHEL 8: shim-x64-15-14.el8_2.x86_64
解决方法:不要更新或重新启动运行 RHEL 或 CentOS 7 和 8 的实例。如果您使用的是受影响的 shim 版本,请运行
yum downgrade shim\* grub2\* mokutil
以降级到正确的版本。此命令可能无法在 CentOS 8 上运行。如果您已经重新启动,则需要将磁盘附加到工作实例(尚未使用有问题的 shim 二进制文件更新),并将工作 shim 二进制文件复制到相关的 EFI挂载磁盘上的目录。对于 RHEL,这是/boot/efi/EFI/redhat/shimx64.efi
. 对于 CentOS,这是/boot/efi/EFI/centos/shimx64.efi
请关注 redhat 线程以获取实时更新。一旦问题最终解决,我们将在此处更新。
我建议您加入 Google 问题跟踪器并关注此案例。
此外,您可以在Google Cloud Status Dashboard上查看此问题的状态。
推荐阅读
- c# - 警告:仅从程序集中获得部分类型:Microsoft.Azure.WebJobs.Extensions.Storage
- javascript - 当房间已满时,在voiceRoom中花费的时间并不总是注册 discord.js
- javascript - Firebase 孩子没有被删除,父母是
- git - 如何重置集线器命令以询问用户名和密码
- php - 使用 ajax 将图像数据发送到 php 文件时遇到问题
- python - Tkinter:经过一定时间后如何更新标签文本?
- spring-cloud-dataflow - 流式应用程序不使用 SCDF 服务器环境变量中提供的 buildpack(SCDF 版本 2.1.2)
- spring - 如何为 XmlViewResolver 提供参考 bean
- php - 盒子/喷口没有写满行
- javascript - 拖动 HTML 元素以跟随鼠标光标