Google cloud platform 使用启动脚本时,首次重新启动后无法访问VM

Google cloud platform 使用启动脚本时,首次重新启动后无法访问VM,google-cloud-platform,Google Cloud Platform,我在GCP的CentOS7 VM中使用以下启动脚本。首次重新启动后,可以访问url。但是,如果我重新启动我的机器或停止然后启动机器,机器将无法访问,url也无法工作。我想这可能是由于selinux,所以我添加了代码来禁用selinux,但结果仍然相同。我尝试通过创建多个新VM来实现这一点,但似乎有一些我无法理解的东西。当我在VM上手动执行此脚本并尝试多次重新启动时,我没有遇到任何问题 #!/bin/bash -xe # introducing sleep so network interfac

我在GCP的CentOS7 VM中使用以下启动脚本。首次重新启动后,可以访问url。但是,如果我重新启动我的机器或停止然后启动机器,机器将无法访问,url也无法工作。我想这可能是由于selinux,所以我添加了代码来禁用selinux,但结果仍然相同。我尝试通过创建多个新VM来实现这一点,但似乎有一些我无法理解的东西。当我在VM上手动执行此脚本并尝试多次重新启动时,我没有遇到任何问题

#!/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">&nbsp;</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">&nbsp;</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
有没有人面临这样的问题?请求帮助我找出重启后无法访问VM的原因


谢谢

这是一个众所周知的问题,谷歌工程师也意识到了这一点:

我们目前遇到谷歌计算引擎的问题 运行RHEL和CentOS 7和8的实例。关于这个问题的更多细节 可在以下文章和Bug中找到:

  • (RHEL 8)
  • (RHEL 7)
症状:运行RHEL和CentOS 7和8且运行yum或up2date的实例 重新启动后,更新可能无法启动,并显示错误消息 以下各项的组合:

  • “X64异常类型-0D(#GP-一般保护)CPU Apic ID”
  • “FXSAVE_状态”
  • 或“基于IP查找图像”
此问题会影响具有特定版本垫片的实例 软件包已安装。要查找当前安装的垫片版本,请使用 以下命令:
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的实例 八,。如果您使用的是受影响的垫片版本,请运行
yum降级垫片\*grub2\*mokutil
以降级到正确的版本。这 命令在CentOS 8上可能不起作用。如果您已经重新启动,则 将需要将磁盘连接到一个工作实例(尚未 使用有问题的垫片(二进制)进行更新,并复制到工作区 将二进制文件填充到已装入磁盘上的相关EFI目录。对于 RHEL,这里是
/boot/efi/efi/redhat/shimx64.efi
。对于CentOS来说,这是
/boot/efi/efi/centos/shimx64.efi

请按照redhat线程进行实时更新。我们将更新 一旦我们这边的问题解决了

我建议你加入并关注谷歌问题跟踪器


此外,您可以在上查看此问题的状态。

这似乎只会影响使用UEFI引导的系统

正如Serhii Rohoza已经明确提到的,我通过阅读第页解决了这个问题

最好完整地阅读那一页。它还说明了在问题仍未解决的情况下,在执行下一次更新时如何防止同样的情况发生。 做好准备您可能必须更改/etc/resolv.conf,并且在使用rescue引导映像时可能必须手动设置默认网关,例如:ip路由通过192.168.1.1 dev eno1添加默认值

我还必须更改/etc/sysconfig/networkscripts/ifcfg-。。。。。。从BOOTPROTO=static到BOOTPROTO=dhcp以及其他一些设置,如DNS=“8.8.8.8”(谷歌名称服务器)。
修复后,将所有内容设置回原始状态。

RHEL7的解决方案

未重新启动的RHEL7实例

执行以下命令降级罪犯软件包,然后重新启动

yum降级垫片*grub2*mokutil

重新启动后未启动的服务器:

  • 分离启动盘
  • 将磁盘连接到已安装shim-x64-15-2.el7.x86_64版本的RHEL系统。您可以配置新的RHEL 7虚拟机。GCP上的RHEL7映像具有shim-x64-15-2.el7.x86_64包
  • 将磁盘连接到实例后,执行以下命令以获取新连接磁盘的磁盘详细信息
  • lsblk
    名称主要:最小RM尺寸RO类型安装点
    sda 8:0 20G 0磁盘
    ├─sda1 8:1 0 200M 0部件/启动/efi
    └─sda2 8:2 0 19.8G 0部分/
    sdb 8:16 0 50G 0磁盘
    
    ├─sdb1 8:17 0 200米部分这对我真的很有帮助,谢谢。4.装载引导卷Mount/dev/sdd1/mnt=>Mount/dev/sdb1/mnt
    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) !!!!
    
    lsblk
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0    20G  0 disk
    ├─sda1   8:1    0   200M  0 part /boot/efi
    └─sda2   8:2    0  19.8G  0 part /
    sdb      8:16   0    50G  0 disk
    ├─sdb1   8:17   0   200M  0 part            <~~~~~~~~
    └─sdb2   8:18   0  49.8G  0 part