mirror of
https://github.com/bin456789/reinstall.git
synced 2025-01-19 04:49:13 +08:00
debian: 添加检测是否能用云内核
This commit is contained in:
parent
09a01b6caa
commit
4861872518
10
debian.cfg
10
debian.cfg
@ -102,15 +102,20 @@ d-i preseed/early_command string \
|
|||||||
hostname="$(grep -o 'extra\.deb_hostname=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
|
hostname="$(grep -o 'extra\.deb_hostname=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
|
||||||
debconf-set mirror/http/hostname "$hostname"
|
debconf-set mirror/http/hostname "$hostname"
|
||||||
|
|
||||||
|
# debian 11 initrd 没有 xargs awk
|
||||||
|
# debian 12 initrd 没有 xargs
|
||||||
d-i partman/early_command string \
|
d-i partman/early_command string \
|
||||||
confhome="$(grep -o 'extra\.confhome=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
|
confhome="$(grep -o 'extra\.confhome=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
|
||||||
swapfile=/target/swapfile; \
|
swapfile=/target/swapfile; \
|
||||||
postinst=/var/lib/dpkg/info/bootstrap-base.postinst; \
|
postinst=/var/lib/dpkg/info/bootstrap-base.postinst; \
|
||||||
|
|
||||||
cp $postinst $postinst.orig; \
|
cp $postinst $postinst.orig; \
|
||||||
echo "fallocate -l 384M $swapfile; mkswap $swapfile; swapon $swapfile; $postinst.orig" >$postinst; \
|
|
||||||
|
|
||||||
echo "swapoff $swapfile; rm $swapfile" >/usr/lib/finish-install.d/95swapoff; \
|
mem=$(grep ^MemTotal: /proc/meminfo | { read x y z; echo $y; }); \
|
||||||
|
mem=$((mem / 1024)); \
|
||||||
|
swap_size=$((512 - mem)); \
|
||||||
|
[ $swap_size -gt 0 ] && echo "fallocate -l ${swap_size}M $swapfile; mkswap $swapfile; swapon $swapfile; $postinst.orig" >$postinst; \
|
||||||
|
echo "swapoff -a; rm -f $swapfile" >/usr/lib/finish-install.d/95swapoff; \
|
||||||
chmod a+x /usr/lib/finish-install.d/95swapoff; \
|
chmod a+x /usr/lib/finish-install.d/95swapoff; \
|
||||||
|
|
||||||
xda=$(wget --tries=5 $confhome/get-xda.sh -O- | sh -s); \
|
xda=$(wget --tries=5 $confhome/get-xda.sh -O- | sh -s); \
|
||||||
@ -122,6 +127,7 @@ d-i partman/early_command string \
|
|||||||
debconf-set debian-installer/add-kernel-opts "$ttys"; \
|
debconf-set debian-installer/add-kernel-opts "$ttys"; \
|
||||||
|
|
||||||
kernel="$(grep -o 'extra\.kernel=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
|
kernel="$(grep -o 'extra\.kernel=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
|
||||||
|
. /can_use_cloud_kernel.sh || kernel=$(echo "$kernel" | sed 's/-cloud//'); \
|
||||||
debconf-set base-installer/kernel/image "$kernel"; \
|
debconf-set base-installer/kernel/image "$kernel"; \
|
||||||
|
|
||||||
[ -d /sys/firmware/efi ] && debconf-set partman-auto/expert_recipe "$(debconf-get partman-auto/expert_recipe_efi)"; \
|
[ -d /sys/firmware/efi ] && debconf-set partman-auto/expert_recipe "$(debconf-get partman-auto/expert_recipe_efi)"; \
|
||||||
|
41
reinstall.sh
41
reinstall.sh
@ -1875,7 +1875,8 @@ mod_initrd_debian() {
|
|||||||
db_progress START 0 5 debian-installer/netcfg/title
|
db_progress START 0 5 debian-installer/netcfg/title
|
||||||
|
|
||||||
# 找到主网卡
|
# 找到主网卡
|
||||||
# debian 11 initrd 没有 awk
|
# debian 11 initrd 没有 xargs awk
|
||||||
|
# debian 12 initrd 没有 xargs
|
||||||
if false; then
|
if false; then
|
||||||
iface=$(ip -o link | grep "@mac_addr" | awk '{print $2}' | cut -d: -f1)
|
iface=$(ip -o link | grep "@mac_addr" | awk '{print $2}' | cut -d: -f1)
|
||||||
else
|
else
|
||||||
@ -1994,14 +1995,16 @@ expand_packages() {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# https://github.com/linuxhw/LsPCI?tab=readme-ov-file#storageata-pci
|
||||||
# https://debian.pkgs.org/12/debian-main-amd64/linux-image-6.1.0-18-cloud-amd64_6.1.76-1_amd64.deb.html
|
# https://debian.pkgs.org/12/debian-main-amd64/linux-image-6.1.0-18-cloud-amd64_6.1.76-1_amd64.deb.html
|
||||||
# scsi-core-modules 是 ata-modules 的依赖,包含 sd_mod.ko scsi_mod.ko
|
# 以下是 debian-installer 有的驱动,这些驱动云内核不一定都有,(+)表示有
|
||||||
# ata-modules 是下方模块的依赖,Priority 是 optional。只有 ata_generic.ko 和 libata.ko 两个驱动
|
# scsi-core-modules 是 ata-modules 的依赖,包含 sd_mod.ko(+) scsi_mod.ko(+)
|
||||||
|
# ata-modules 是下方模块的依赖,Priority 是 optional。只有 ata_generic.ko(+) 和 libata.ko(+) 两个驱动
|
||||||
# pata-modules 里面的驱动都是 pata_ 开头
|
# pata-modules 里面的驱动都是 pata_ 开头
|
||||||
# 但只有 pata_legacy.ko 在云内核中
|
# 但只有 pata_legacy.ko(+) 在云内核中
|
||||||
# sata-modules 里面的驱动大部分是 sata_ 开头的,其他重要的还有 ahci.ko ata_piix.ko libahci.ko
|
# sata-modules 里面的驱动大部分是 sata_ 开头的,其他重要的还有 ahci.ko libahci.ko ata_piix.ko(+)
|
||||||
# 云内核没有 sata 模块,也没有内嵌,有一个 CONFIG_SATA_HOST=y,libata-$(CONFIG_SATA_HOST) += libata-sata.o
|
# 云内核没有 sata 模块,也没有内嵌,有一个 CONFIG_SATA_HOST=y,libata-$(CONFIG_SATA_HOST) += libata-sata.o
|
||||||
# scsi-modules 包含 virtio_scsi.ko virtio_blk.ko
|
# scsi-modules 包含 virtio_scsi.ko(+) virtio_blk.ko(+)
|
||||||
|
|
||||||
download_and_extract_udeb() {
|
download_and_extract_udeb() {
|
||||||
package=$1
|
package=$1
|
||||||
@ -2045,6 +2048,27 @@ EOF
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
can_use_cloud_kernel() {
|
||||||
|
# xen 是 vbd
|
||||||
|
# 有些虚拟机用了 ahci,但云内核没有 ahci 驱动
|
||||||
|
# shellcheck disable=SC2317
|
||||||
|
get_disk_controller | grep -Ewq \
|
||||||
|
'ata_generic|ata_piix|pata_legacy|nvme|virtio_blk|virtio_scsi|vbd|hv_storvsc|vmw_pvscsi'
|
||||||
|
}
|
||||||
|
|
||||||
|
# 在 debian installer 中判断能否用云内核
|
||||||
|
cat <<EOF >can_use_cloud_kernel.sh
|
||||||
|
get_disk_controller(){
|
||||||
|
$(get_function_content get_disk_controller)
|
||||||
|
}
|
||||||
|
|
||||||
|
can_use_cloud_kernel(){
|
||||||
|
$(get_function_content can_use_cloud_kernel)
|
||||||
|
}
|
||||||
|
|
||||||
|
can_use_cloud_kernel
|
||||||
|
EOF
|
||||||
|
|
||||||
# 提前下载 fdisk
|
# 提前下载 fdisk
|
||||||
# 因为 fdisk-udeb 包含 fdisk 和 sfdisk,提前下载可减少占用
|
# 因为 fdisk-udeb 包含 fdisk 和 sfdisk,提前下载可减少占用
|
||||||
mkdir_clear $tmp/fdisk
|
mkdir_clear $tmp/fdisk
|
||||||
@ -2062,9 +2086,10 @@ EOF
|
|||||||
for driver in $(get_disk_controller); do
|
for driver in $(get_disk_controller); do
|
||||||
echo "using driver: $driver"
|
echo "using driver: $driver"
|
||||||
case $driver in
|
case $driver in
|
||||||
nvme | virtio_blk | virtio_scsi | hv_storvsc) extra_drivers+=" $driver" ;;
|
# xen 是 vbd
|
||||||
|
nvme | virtio_blk | virtio_scsi | vbd | hv_storvsc | vmw_pvscsi) extra_drivers+=" $driver" ;;
|
||||||
pata_legacy) sed -i '/^pata-modules/d' $net_retriever ;;
|
pata_legacy) sed -i '/^pata-modules/d' $net_retriever ;;
|
||||||
pata_* | sata_* | ahci) error_and_exit "Debain cloud kernel does not support this driver: $driver" ;;
|
pata_* | sata_* | ahci) error_and_exit "Debian cloud kernel does not support this driver: $driver" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
12
trans.sh
12
trans.sh
@ -493,7 +493,8 @@ is_need_manual_set_dnsv6() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_current_dns_v4() {
|
get_current_dns_v4() {
|
||||||
# debian 11 initrd 没有 awk
|
# debian 11 initrd 没有 xargs awk
|
||||||
|
# debian 12 initrd 没有 xargs
|
||||||
if false; then
|
if false; then
|
||||||
grep '^nameserver' /etc/resolv.conf | awk '{print $2}' | grep '\.'
|
grep '^nameserver' /etc/resolv.conf | awk '{print $2}' | grep '\.'
|
||||||
else
|
else
|
||||||
@ -502,7 +503,8 @@ get_current_dns_v4() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_current_dns_v6() {
|
get_current_dns_v6() {
|
||||||
# debian 11 initrd 没有 awk
|
# debian 11 initrd 没有 xargs awk
|
||||||
|
# debian 12 initrd 没有 xargs
|
||||||
if false; then
|
if false; then
|
||||||
grep '^nameserver' /etc/resolv.conf | awk '{print $2}' | grep ':'
|
grep '^nameserver' /etc/resolv.conf | awk '{print $2}' | grep ':'
|
||||||
else
|
else
|
||||||
@ -3002,6 +3004,7 @@ refind_main_disk() {
|
|||||||
main_disk=$(sfdisk --disk-id /dev/$xda | sed 's/0x//')
|
main_disk=$(sfdisk --disk-id /dev/$xda | sed 's/0x//')
|
||||||
else
|
else
|
||||||
apk add lsblk
|
apk add lsblk
|
||||||
|
# main_disk=$(blkid --match-tag PTUUID -o value /dev/$xda)
|
||||||
main_disk=$(lsblk --nodeps -rno PTUUID /dev/$xda)
|
main_disk=$(lsblk --nodeps -rno PTUUID /dev/$xda)
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -3015,6 +3018,9 @@ get_ubuntu_kernel_flavor() {
|
|||||||
# https://github.com/canonical/cloud-init/blob/main/tools/ds-identify
|
# https://github.com/canonical/cloud-init/blob/main/tools/ds-identify
|
||||||
# http://git.annexia.org/?p=virt-what.git;a=blob;f=virt-what.in;hb=HEAD
|
# http://git.annexia.org/?p=virt-what.git;a=blob;f=virt-what.in;hb=HEAD
|
||||||
{
|
{
|
||||||
|
# busybox blkid 不显示 sr0 的 UUID
|
||||||
|
apk add lsblk
|
||||||
|
|
||||||
if is_dmi_contains "amazon" || is_dmi_contains "ec2"; then
|
if is_dmi_contains "amazon" || is_dmi_contains "ec2"; then
|
||||||
flavor=aws
|
flavor=aws
|
||||||
elif is_dmi_contains "Google Compute Engine" || is_dmi_contains "GoogleCloud"; then
|
elif is_dmi_contains "Google Compute Engine" || is_dmi_contains "GoogleCloud"; then
|
||||||
@ -3023,6 +3029,8 @@ get_ubuntu_kernel_flavor() {
|
|||||||
flavor=oracle
|
flavor=oracle
|
||||||
elif is_dmi_contains "7783-7084-3265-9085-8269-3286-77"; then
|
elif is_dmi_contains "7783-7084-3265-9085-8269-3286-77"; then
|
||||||
flavor=azure
|
flavor=azure
|
||||||
|
elif lsblk -o UUID,LABEL | grep -i 9796-932E | grep -i config-2; then
|
||||||
|
flavor=ibm
|
||||||
elif is_virt; then
|
elif is_virt; then
|
||||||
flavor=virtual-hwe-$releasever
|
flavor=virtual-hwe-$releasever
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user