Menu Close
Settings Close

Language and Page Formatting Options

10.5.3. 使用自动化流程回滚 RHEL for Edge 镜像

Greenboot 检查提供了一个框架,它集成到引导过程中,并可在健康检查失败时触发 rpm-ostree 回滚。对于健康检查,您可以创建一个自定义脚本来指示健康检查是否通过或失败。根据结果,您可以决定何时触发回滚。

要创建健康检查脚本,请执行以下步骤:

步骤

  1. 创建返回标准退出代码 0 的脚本。

    例如,以下脚本确保配置的 DNS 服务器可用:

    #!/bin/bash
    
    DNS_SERVER=$(grep ^nameserver /etc/resolv.conf | head -n 1 | cut -f2 -d" ")
    COUNT=0
    # check DNS server is available
    ping -c1 $DNS_SERVER
    while [ $? != '0' ] && [ $COUNT -lt 10 ]; do
    ((COUNT++))
    echo "Checking for DNS: Attempt $COUNT ."
    sleep 10
    ping -c 1 $DNS_SERVER
    done
  2. /etc/greenboot/check/required.d/ 中包括健康检查的可执行文件。

    chmod +x check-dns.sh

    在下一次重启期间,将在系统进入 boot-complete.target 之前,作为引导过程的一部分来执行 脚本。如果健康检查成功,则不执行任何操作。如果健康检查失败,系统会在将更新标记为失败并回滚到上一更新之前多次重启。

验证步骤

要检查默认网关是否可访问,请运行以下健康检查脚本:

  1. 创建返回标准退出代码 0 的脚本。

    #!/bin/bash
    
    DEF_GW=$(ip r | awk '/^default/ {print $3}')
    SCRIPT=$(basename $0)
    
    count=10
    connected=0
    ping_timeout=5
    interval=5
    
    while [ $count -gt 0 -a $connected -eq 0 ]; do
      echo "$SCRIPT: Pinging default gateway $DEF_GW"
      ping -c 1 -q -W $ping_timeout $DEF_GW > /dev/null 2>&1 && connected=1 || sleep $interval
      ((--count))
    done
    
    if [ $connected -eq 1 ]; then
      echo "$SCRIPT: Default gateway $DEF_GW is reachable."
      exit 0
    else
      echo "$SCRIPT: Failed to ping default gateway $DEF_GW!" 1>&2
      exit 1
    fi
  2. /etc/greenboot/check/required.d/ 目录中包括健康检查的可执行文件。

    chmod +x check-gw.sh