From 5b332868eac838b67e7ca028b54aafb7d8ac3d21 Mon Sep 17 00:00:00 2001 From: bin456789 Date: Sat, 25 Apr 2026 23:16:52 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E9=A6=96=E6=AC=A1=E5=BC=80=E6=9C=BA?= =?UTF-8?q?=E7=AD=89=E5=BE=85=E7=BD=91=E5=8D=A1=E5=90=8D=E7=A8=B3=E5=AE=9A?= =?UTF-8?q?=2010=20=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fix-eth-name.sh | 85 +++++++++++++++++++++++++++++-------------------- 1 file changed, 50 insertions(+), 35 deletions(-) diff --git a/fix-eth-name.sh b/fix-eth-name.sh index 959579b..26fc6ee 100644 --- a/fix-eth-name.sh +++ b/fix-eth-name.sh @@ -5,53 +5,68 @@ set -eE -# openeuler 需等待 udev 将网卡名从 eth0 改为 enp3s0 -sleep 10 -# 不知道有没有用 -if command -v udevadm >/dev/null; then - # udevadm trigger - udevadm settle -elif command -v mdev >/dev/null; then - mdev -sf -fi - # 本脚本在首次进入新系统后运行 # 将 trans 阶段生成的网络配置中的网卡名(eth0) 改为正确的网卡名,也适用于以下情况 # 1. alpine 要运行此脚本,因为安装后的内核可能有 netboot 没有的驱动 # 2. dmit debian 普通内核(安装时)和云内核网卡名不一致 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=928923 -# todo: 删除 cloud-init +# openeuler 需等待 udev 将网卡名从 eth0 改为 enp3s0 +# openeuler 本脚本运行一秒后才有 enp3s0 +# 用 systemd-analyze plot >a.svg 发现 sys-subsystem-net-devices-enp3s0.device 也是出现在 NetworkManager 之后 + +# 有些时候网卡名还会来回修改几次 +# 因此需要等待网卡名稳定 + +# 不知道有没有用 +if false; then + if command -v udevadm >/dev/null; then + # udevadm trigger + udevadm settle || true + elif command -v mdev >/dev/null; then + mdev -sf || true + fi + sleep 1 +fi + +has_eth=false # 是否检查到网卡 +check_count=0 # 总检查次数 +stable_count=0 # 网卡名稳定的次数 +old_state= +while true; do + check_count=$((check_count + 1)) + + new_state=$(ip -o link | awk '$2 != "lo:"') + if [ -n "$new_state" ]; then + has_eth=true + fi + + if $has_eth && [ "$old_state" = "$new_state" ]; then + stable_count=$((stable_count + 1)) + else + stable_count=0 + fi + + old_state=$new_state + + # 稳定 10 秒后退出循环 + if $has_eth && [ "$stable_count" -ge 10 ]; then + break + fi + + # 60 秒都没发现网卡则退出脚本 + if ! $has_eth && [ "$check_count" -ge 60 ]; then + exit 1 + fi + + sleep 1 +done to_lower() { tr '[:upper:]' '[:lower:]' } -retry() { - local max_try=$1 - shift - - for i in $(seq "$max_try"); do - if "$@"; then - return - else - ret=$? - if [ "$i" -ge "$max_try" ]; then - return $ret - fi - sleep 1 - fi - done -} - -# openeuler 本脚本运行一秒后才有 enp3s0 -# 用 systemd-analyze plot >a.svg 发现 sys-subsystem-net-devices-enp3s0.device 也是出现在 NetworkManager 之后 -# 因此需要等待网卡出现 get_ethx_by_mac() { - retry 10 _get_ethx_by_mac "$@" -} - -_get_ethx_by_mac() { mac=$(echo "$1" | to_lower) flag=$2