Skip to content

Commit 31de70d

Browse files
committed
windows: 适配 massgrave 新镜像链接
1 parent 90becc9 commit 31de70d

File tree

1 file changed

+35
-21
lines changed

1 file changed

+35
-21
lines changed

reinstall.sh

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,7 +1086,10 @@ get_windows_iso_link() {
10861086
if [ -n "$label_msdl" ]; then
10871087
iso=$(curl -L "$page_url" | grep -ioP 'https://[^ ]+?#[0-9]+' | head -1 | grep .)
10881088
else
1089-
curl -L "$page_url" | grep -ioP 'https://[^ ]+?.(iso|img)' >$tmp/win.list
1089+
curl -L "$page_url" |
1090+
tr -d '\n' | sed -e 's,<a ,\n<a ,g' -e 's,</a>,</a>\n,g' | # 使每个 <a></a> 占一行
1091+
grep -Ei '\.(iso|img)</a>$' | # 找出是 iso 或 img 的行
1092+
sed -E 's,<a href="([^"]+)".+>(.+)</a>,\2 \1,' >$tmp/win.list # 提取文件名和链接
10901093

10911094
# 如果不是 ltsc ,应该先去除 ltsc 链接,否则最终链接有 ltsc 的
10921095
# 例如查找 windows 10 iot enterprise,会得到
@@ -1104,10 +1107,14 @@ get_windows_iso_link() {
11041107
}
11051108

11061109
get_shortest_line() {
1107-
# awk '{print length($0), $0}' | sort -n | head -1 | awk '{print $2}'
11081110
awk '(NR == 1 || length($0) < length(shortest)) { shortest = $0 } END { print shortest }'
11091111
}
11101112

1113+
get_shortest_line_by_field() {
1114+
local field=$1
1115+
awk "(NR == 1 || length(\$$field) < length(field)) { line = \$0; field = \$$field } END { print line }"
1116+
}
1117+
11111118
get_windows_iso_link_inner() {
11121119
regexs=()
11131120

@@ -1139,7 +1146,7 @@ get_windows_iso_link_inner() {
11391146
regex=${regex// /_}
11401147

11411148
echo "looking for: $regex" >&2
1142-
if iso=$(grep -Ei "/$regex" "$tmp/win.list" | get_shortest_line | grep .); then
1149+
if iso=$(grep -Ei "^$regex " "$tmp/win.list" | get_shortest_line_by_field 1 | awk '{print $2}' | grep .); then
11431150
return
11441151
fi
11451152
done
@@ -1512,7 +1519,9 @@ Continue?
15121519
}
15131520

15141521
setos_windows() {
1522+
auto_find_iso=false
15151523
if [ -z "$iso" ]; then
1524+
auto_find_iso=true
15161525
# 查找时将 windows longhorn serverdatacenter 改成 windows server 2008 serverdatacenter
15171526
image_name=${image_name/windows longhorn server/windows server 2008 server}
15181527
echo "iso url is not set. Attempting to find it automatically."
@@ -1527,27 +1536,32 @@ Continue?
15271536
if [[ "$iso" = magnet:* ]]; then
15281537
: # 不测试磁力链接
15291538
else
1530-
# 需要用户输入 massgrave.dev 直链
1531-
if grep -Eiq '\.massgrave\.dev/.*\.(iso|img)$' <<<"$iso" ||
1532-
grep -Eiq '\.gravesoft\.dev/#[0-9]+$' <<<"$iso"; then
1533-
info "Set Direct link"
1534-
# MobaXterm 不支持
1535-
# printf '\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'
1536-
1537-
# MobaXterm 不显示为超链接
1538-
# info false "请在浏览器中打开 $iso 获取直链并粘贴到这里。"
1539-
# info false "Please open $iso in browser to get the direct link and paste it here."
1540-
1541-
echo "请在浏览器中打开 $iso 获取直链并粘贴到这里。"
1542-
echo "Please open $iso in browser to get the direct link and paste it here."
1543-
IFS= read -r -p "Direct Link: " iso
1544-
if [ -z "$iso" ]; then
1545-
error_and_exit "ISO Link is empty."
1539+
iso_is_tested=false
1540+
if $auto_find_iso; then
1541+
if test_url_grace "$iso" iso 2>/dev/null; then
1542+
iso_is_tested=true
1543+
else
1544+
# 需要用户输入 massgrave.dev 直链
1545+
info "Set Direct link"
1546+
# MobaXterm 不支持
1547+
# printf '\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'
1548+
1549+
# MobaXterm 不显示为超链接
1550+
# info false "请在浏览器中打开 $iso 获取直链并粘贴到这里。"
1551+
# info false "Please open $iso in browser to get the direct link and paste it here."
1552+
1553+
echo "请在浏览器中打开 $iso 获取直链并粘贴到这里。"
1554+
echo "Please open $iso in browser to get the direct link and paste it here."
1555+
IFS= read -r -p "Direct Link: " iso
1556+
if [ -z "$iso" ]; then
1557+
error_and_exit "ISO Link is empty."
1558+
fi
15461559
fi
15471560
fi
15481561

1549-
# 测试是否是 iso
1550-
test_url "$iso" iso
1562+
if ! $iso_is_tested; then
1563+
test_url "$iso" iso
1564+
fi
15511565

15521566
# 判断 iso 架构是否兼容
15531567
# https://gitlab.com/libosinfo/osinfo-db/-/tree/main/data/os/microsoft.com?ref_type=heads

0 commit comments

Comments
 (0)