mirror of
https://github.com/bin456789/reinstall.git
synced 2026-05-21 05:27:41 +08:00
core: 首次开机等待网卡名稳定 10 秒
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user