core: 支持自定义 --img

This commit is contained in:
bin456789
2026-09-06 11:31:35 +08:00
parent 6b3a341b4b
commit 7fa83f196b
+54 -26
View File
@@ -1458,6 +1458,7 @@ Continue?
if is_use_cloud_image; then if is_use_cloud_image; then
# cloud image # cloud image
if [ -z "$img" ]; then
# https://salsa.debian.org/cloud-team/debian-cloud-images/-/tree/master/config_space/bookworm/files/etc/default/grub.d # https://salsa.debian.org/cloud-team/debian-cloud-images/-/tree/master/config_space/bookworm/files/etc/default/grub.d
# cloud 包括各种奇怪的优化,例如不显示 grub 菜单 # cloud 包括各种奇怪的优化,例如不显示 grub 菜单
# 因此使用 nocloud # 因此使用 nocloud
@@ -1466,7 +1467,9 @@ Continue?
else else
ci_type=nocloud ci_type=nocloud
fi fi
set_osvar img "$cdimage_mirror/cloud/$codename/latest/debian-$releasever-$ci_type-$basearch_alt.qcow2" img=$cdimage_mirror/cloud/$codename/latest/debian-$releasever-$ci_type-$basearch_alt.qcow2
fi
set_osvar img "$img"
else else
# 传统安装 # 传统安装
initrd_dir=dists/$codename/main/installer-$basearch_alt/current/images/netboot/debian-installer/$basearch_alt initrd_dir=dists/$codename/main/installer-$basearch_alt/current/images/netboot/debian-installer/$basearch_alt
@@ -1527,6 +1530,7 @@ Continue?
if is_use_cloud_image; then if is_use_cloud_image; then
# cloud image # cloud image
if [ -z "$img" ]; then
if is_in_china; then if is_in_china; then
# 有的源没有 releases 镜像 # 有的源没有 releases 镜像
# https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/releases/ # https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/releases/
@@ -1555,11 +1559,13 @@ Continue?
if ! is_have_minimal_image; then if ! is_have_minimal_image; then
error_and_exit "Minimal cloud image is not available for $releasever $basearch_alt." error_and_exit "Minimal cloud image is not available for $releasever $basearch_alt."
fi fi
set_osvar img "$ci_mirror/minimal/releases/$codename/release/ubuntu-$releasever-minimal-cloudimg-$basearch_img.img" img=$ci_mirror/minimal/releases/$codename/release/ubuntu-$releasever-minimal-cloudimg-$basearch_img.img
else else
# 用 codename 而不是 releasever,可减少一次跳转 # 用 codename 而不是 releasever,可减少一次跳转
set_osvar img "$ci_mirror/releases/$codename/release/ubuntu-$releasever-server-cloudimg-$basearch_img.img" img=$ci_mirror/releases/$codename/release/ubuntu-$releasever-server-cloudimg-$basearch_img.img
fi fi
fi
set_osvar img "$img"
else else
# 传统安装 # 传统安装
if is_in_china; then if is_in_china; then
@@ -1606,7 +1612,10 @@ Continue?
if is_use_cloud_image; then if is_use_cloud_image; then
# cloud image # cloud image
set_osvar img "$mirror/images/latest/Arch-Linux-x86_64-cloudimg.qcow2" if [ -z "$img" ]; then
img=$mirror/images/latest/Arch-Linux-x86_64-cloudimg.qcow2
fi
set_osvar img "$img"
else else
# 传统安装 # 传统安装
case "$basearch" in case "$basearch" in
@@ -1646,19 +1655,22 @@ Continue?
dir=releases/$basearch_alt/autobuilds dir=releases/$basearch_alt/autobuilds
if is_use_cloud_image; then if is_use_cloud_image; then
if [ -z "$img" ]; then
# 使用 systemd 且没有 cloud-init # 使用 systemd 且没有 cloud-init
prefix=di-$basearch_alt-console prefix=di-$basearch_alt-console
filename=$(curl -L $mirror/$dir/latest-$prefix.txt | grep '.qcow2' | awk '{print $1}' | grep .) filename=$(curl -L $mirror/$dir/latest-$prefix.txt | grep '.qcow2' | awk '{print $1}' | grep .)
file=$mirror/$dir/$filename img=$mirror/$dir/$filename
test_url "$file" 'qemu' fi
set_osvar img "$file" test_url "$img" 'qemu'
else else
if [ -z "$img" ]; then
prefix=stage3-$basearch_alt-systemd prefix=stage3-$basearch_alt-systemd
filename=$(curl -L $mirror/$dir/latest-$prefix.txt | grep '.tar.xz' | awk '{print $1}' | grep .) filename=$(curl -L $mirror/$dir/latest-$prefix.txt | grep '.tar.xz' | awk '{print $1}' | grep .)
file=$mirror/$dir/$filename img=$mirror/$dir/$filename
test_url "$file" 'tar.xz' test_url "$img" 'tar.xz'
set_osvar img "$file"
fi fi
fi
set_osvar img "$img"
} }
setos_opensuse() { setos_opensuse() {
@@ -1674,6 +1686,7 @@ Continue?
# https://mirrors.ustc.edu.cn/opensuse/ports/aarch64/tumbleweed/appliances/ # https://mirrors.ustc.edu.cn/opensuse/ports/aarch64/tumbleweed/appliances/
# https://mirrors.tuna.tsinghua.edu.cn/opensuse/ports/aarch64/tumbleweed/appliances/ # https://mirrors.tuna.tsinghua.edu.cn/opensuse/ports/aarch64/tumbleweed/appliances/
if [ -z "$img" ]; then
if is_in_china; then if is_in_china; then
mirror=https://mirror.nju.edu.cn/opensuse mirror=https://mirror.nju.edu.cn/opensuse
else else
@@ -1701,7 +1714,9 @@ Continue?
# 有专门的kvm镜像,openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2,里面没有cloud-init # 有专门的kvm镜像,openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2,里面没有cloud-init
# file=openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 # file=openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2
fi fi
set_osvar img "$mirror/$dir/$file" img=$mirror/$dir/$file
fi
set_osvar img "$img"
} }
setos_windows() { setos_windows() {
@@ -1887,6 +1902,7 @@ Continue with DD?
} }
setos_aosc() { setos_aosc() {
if [ -z "$img" ]; then
if is_in_china; then if is_in_china; then
mirror=https://mirror.nju.edu.cn/anthon/aosc-os mirror=https://mirror.nju.edu.cn/anthon/aosc-os
else else
@@ -1898,7 +1914,8 @@ Continue with DD?
file=$(curl -L $mirror/$dir/ | grep -oP 'aosc-os_base_.*?\.tar.xz' | file=$(curl -L $mirror/$dir/ | grep -oP 'aosc-os_base_.*?\.tar.xz' |
sort -uV | tail -1 | grep .) sort -uV | tail -1 | grep .)
img=$mirror/$dir/$file img=$mirror/$dir/$file
test_url $img 'tar.xz' fi
test_url "$img" 'tar.xz'
set_osvar img "$img" set_osvar img "$img"
} }
@@ -1919,6 +1936,7 @@ Continue with DD?
if is_use_cloud_image; then if is_use_cloud_image; then
# ci # ci
if [ -z "$img" ]; then
if is_in_china; then if is_in_china; then
case $distro in case $distro in
centos) ci_mirror="https://mirror.nju.edu.cn/centos-cloud/centos" ;; centos) ci_mirror="https://mirror.nju.edu.cn/centos-cloud/centos" ;;
@@ -1940,31 +1958,31 @@ Continue with DD?
7) 7)
# CentOS-7-aarch64-GenericCloud.qcow2c 是旧版本 # CentOS-7-aarch64-GenericCloud.qcow2c 是旧版本
ver=-2211 ver=-2211
ci_image=$ci_mirror/$releasever/images/CentOS-$releasever-$elarch-GenericCloud$ver.qcow2c img=$ci_mirror/$releasever/images/CentOS-$releasever-$elarch-GenericCloud$ver.qcow2c
;; ;;
*) *)
# 有 bios 和 efi 镜像 # 有 bios 和 efi 镜像
# https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-10-latest.x86_64.qcow2 # https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-10-latest.x86_64.qcow2
# https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-x86_64-10-latest.x86_64.qcow2 # https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-x86_64-10-latest.x86_64.qcow2
[ "$elarch" = x86_64 ] && [ "$elarch" = x86_64 ] &&
ci_image=$ci_mirror/$releasever-stream/$elarch/images/CentOS-Stream-GenericCloud-x86_64-$releasever-latest.$elarch.qcow2 || img=$ci_mirror/$releasever-stream/$elarch/images/CentOS-Stream-GenericCloud-x86_64-$releasever-latest.$elarch.qcow2 ||
ci_image=$ci_mirror/$releasever-stream/$elarch/images/CentOS-Stream-GenericCloud-$releasever-latest.$elarch.qcow2 img=$ci_mirror/$releasever-stream/$elarch/images/CentOS-Stream-GenericCloud-$releasever-latest.$elarch.qcow2
;; ;;
esac esac
;; ;;
almalinux) ci_image=$ci_mirror/AlmaLinux-$releasever-GenericCloud-latest.$elarch.qcow2 ;; almalinux) img=$ci_mirror/AlmaLinux-$releasever-GenericCloud-latest.$elarch.qcow2 ;;
rocky) ci_image=$ci_mirror/Rocky-$releasever-GenericCloud-Base.latest.$elarch.qcow2 ;; rocky) img=$ci_mirror/Rocky-$releasever-GenericCloud-Base.latest.$elarch.qcow2 ;;
fedora) fedora)
# 不加 / 会跳转到 https://dl.fedoraproject.org,纯 ipv6 无法访问 # 不加 / 会跳转到 https://dl.fedoraproject.org,纯 ipv6 无法访问
# curl -L -6 https://d2lzkl7pfhq30w.cloudfront.net/pub/fedora/linux/releases/42/Cloud/x86_64/images # curl -L -6 https://d2lzkl7pfhq30w.cloudfront.net/pub/fedora/linux/releases/42/Cloud/x86_64/images
# curl -L -6 https://d2lzkl7pfhq30w.cloudfront.net/pub/fedora/linux/releases/42/Cloud/x86_64/images/ # curl -L -6 https://d2lzkl7pfhq30w.cloudfront.net/pub/fedora/linux/releases/42/Cloud/x86_64/images/
filename=$(curl -L $ci_mirror/ | grep -oP "Fedora-Cloud-Base-Generic.*?.qcow2" | filename=$(curl -L $ci_mirror/ | grep -oP "Fedora-Cloud-Base-Generic.*?.qcow2" |
sort -uV | tail -1 | grep .) sort -uV | tail -1 | grep .)
ci_image=$ci_mirror/$filename img=$ci_mirror/$filename
;; ;;
esac esac
fi
set_osvar img "$ci_image" set_osvar img "$img"
else else
# 传统安装 # 传统安装
case $distro in case $distro in
@@ -2006,6 +2024,7 @@ Continue with DD?
if is_use_cloud_image; then if is_use_cloud_image; then
# ci # ci
if [ -z "$img" ]; then
install_pkg jq install_pkg jq
mirror=https://yum.oracle.com mirror=https://yum.oracle.com
@@ -2015,9 +2034,9 @@ Continue with DD?
curl -Lo $tmp/oracle.json $mirror/templates/OracleLinux/$template_prefix-template.json curl -Lo $tmp/oracle.json $mirror/templates/OracleLinux/$template_prefix-template.json
dir=$(jq -r .base_url $tmp/oracle.json) dir=$(jq -r .base_url $tmp/oracle.json)
file=$(jq -r .kvm.image $tmp/oracle.json) file=$(jq -r .kvm.image $tmp/oracle.json)
ci_image=$mirror$dir/$file img=$mirror$dir/$file
fi
set_osvar img "$ci_image" set_osvar img "$img"
else else
: :
fi fi
@@ -2046,6 +2065,7 @@ Continue with DD?
if is_use_cloud_image; then if is_use_cloud_image; then
# ci # ci
if [ -z "$img" ]; then
if [ "$releasever" -eq 9 ]; then if [ "$releasever" -eq 9 ]; then
dir=$releasever/images/qcow2/$basearch dir=$releasever/images/qcow2/$basearch
else else
@@ -2054,7 +2074,9 @@ Continue with DD?
file=$(curl -L $mirror/$dir/ | grep -oP 'OpenCloudOS.*?\.qcow2' | file=$(curl -L $mirror/$dir/ | grep -oP 'OpenCloudOS.*?\.qcow2' |
sort -uV | tail -1 | grep .) sort -uV | tail -1 | grep .)
set_osvar img "$mirror/$dir/$file" img=$mirror/$dir/$file
fi
set_osvar img "$img"
else else
: :
fi fi
@@ -2064,13 +2086,16 @@ Continue with DD?
mirror=https://mirrors.openanolis.cn/anolis mirror=https://mirrors.openanolis.cn/anolis
if is_use_cloud_image; then if is_use_cloud_image; then
# ci # ci
if [ -z "$img" ]; then
dir=$releasever/isos/GA/$basearch dir=$releasever/isos/GA/$basearch
[ "$releasever" -ge 23 ] && [ "$releasever" -ge 23 ] &&
filename='AnolisOS.*?\.qcow2' || filename='AnolisOS.*?\.qcow2' ||
filename='AnolisOS.*?-ANCK\.qcow2' filename='AnolisOS.*?-ANCK\.qcow2'
file=$(curl -L $mirror/$dir/ | grep -oP "$filename" | file=$(curl -L $mirror/$dir/ | grep -oP "$filename" |
sort -uV | tail -1 | grep .) sort -uV | tail -1 | grep .)
set_osvar img "$mirror/$dir/$file" img=$mirror/$dir/$file
fi
set_osvar img "$img"
else else
: :
fi fi
@@ -2084,9 +2109,12 @@ Continue with DD?
fi fi
if is_use_cloud_image; then if is_use_cloud_image; then
# ci # ci
if [ -z "$img" ]; then
name=$(curl -L "$mirror/" | grep -oE "openEuler-$releasever(-LTS)?(-SP[0-9])?" | name=$(curl -L "$mirror/" | grep -oE "openEuler-$releasever(-LTS)?(-SP[0-9])?" |
sort -uV | tail -1 | grep .) sort -uV | tail -1 | grep .)
set_osvar img "$mirror/$name/virtual_machine_img/$basearch/$name-$basearch.qcow2.xz" img=$mirror/$name/virtual_machine_img/$basearch/$name-$basearch.qcow2.xz
fi
set_osvar img "$img"
else else
: :
fi fi