From 586eb5dee1a41899f62464de1eaea31e41761ce6 Mon Sep 17 00:00:00 2001 From: bin456789 Date: Thu, 4 Dec 2025 19:43:53 +0800 Subject: [PATCH] =?UTF-8?q?opensuse:=2016.0=20=E9=87=8D=E6=96=B0=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20cloud=20=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reinstall.sh | 4 ++-- trans.sh | 31 +++++++++++++++++++++---------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/reinstall.sh b/reinstall.sh index 7ea47a9..bd46ad4 100644 --- a/reinstall.sh +++ b/reinstall.sh @@ -1498,8 +1498,8 @@ Continue? dir=distribution/leap/$releasever/appliances case "$releasever" in 15.6) file=openSUSE-Leap-$releasever-Minimal-VM.$basearch-Cloud.qcow2 ;; - # 16.0) file=Leap-$releasever-Minimal-VM.$basearch-Cloud.qcow2 ;; # 缺少 openSUSE-repos-Leap 包,导致没有源 - 16.0) file=Leap-$releasever-Minimal-VM.$basearch-kvm$(if [ "$basearch" = x86_64 ]; then echo '-and-xen'; fi).qcow2 ;; + 16.0) file=Leap-$releasever-Minimal-VM.$basearch-Cloud.qcow2 ;; + # 16.0) file=Leap-$releasever-Minimal-VM.$basearch-kvm$(if [ "$basearch" = x86_64 ]; then echo '-and-xen'; fi).qcow2 ;; esac # https://src.opensuse.org/openSUSE/Leap-Images/src/branch/leap-16.0/kiwi-templates-Minimal/Minimal.kiwi diff --git a/trans.sh b/trans.sh index c5baf9f..1cfda61 100644 --- a/trans.sh +++ b/trans.sh @@ -3252,7 +3252,7 @@ remove_cloud_init() { # disable 会出现一堆提示信息,也无法 disable for unit in $( chroot $os_dir systemctl list-unit-files | - grep -E '^(cloud-init-.*|cloud-config|cloud-final)\.(service|socket)' | grep enabled | awk '{print $1}' + grep -E '^(cloud-init|cloud-init-.*|cloud-config|cloud-final)\.(service|socket)' | grep enabled | awk '{print $1}' ); do # 服务不存在时会报错 if chroot $os_dir systemctl -q is-enabled "$unit"; then @@ -3269,7 +3269,7 @@ remove_cloud_init() { ;; zypper) # 加上 -u 才会删除依赖 - chroot $os_dir zypper remove -y -u cloud-init + chroot $os_dir zypper remove -y -u cloud-init cloud-init-config-suse ;; apt-get) # ubuntu 25.04 开始有 cloud-init-base @@ -3658,24 +3658,35 @@ EOF fi # rpm -qi 不支持通配符 - installed_kernel=$(chroot $os_dir rpm -qa 'kernel-*' --qf '%{NAME}\n' | grep -v firmware) - if ! [ "$(echo "$installed_kernel" | wc -l)" -eq 1 ]; then - error_and_exit "Unexpected kernel installed: $installed_kernel" + origin_kernel=$(chroot $os_dir rpm -qa 'kernel-*' --qf '%{NAME}\n' | grep -v firmware) + if ! [ "$(echo "$origin_kernel" | wc -l)" -eq 1 ]; then + error_and_exit "Unexpected kernel installed: $origin_kernel" fi - # 不能同时装 kernel-default-base 和 kernel-default + # 16.0 能同时装 kernel-default-base 和 kernel-default + # tw 不能同时装 kernel-default-base 和 kernel-default # 因此需要添加 --force-resolution 自动删除 kernel-default-base - if ! [ "$installed_kernel" = "$target_kernel" ]; then + if ! [ "$origin_kernel" = "$target_kernel" ]; then # x86 必须设置一个密码,否则报错,arm 没有这个问题 # Failed to get root password hash # Failed to import /etc/uefi/certs/76B6A6A0.crt # warning: %post(kernel-default-5.14.21-150500.55.83.1.x86_64) scriptlet failed, exit status 255 + need_password_workaround=false if grep -q '^root:[:!*]' $os_dir/etc/shadow; then + need_password_workaround=true + fi + + if $need_password_workaround; then echo "root:$(mkpasswd '')" | chroot $os_dir chpasswd -e - chroot $os_dir zypper install -y --force-resolution $target_kernel + fi + # 安装新内核 + chroot $os_dir zypper install -y --force-resolution $target_kernel + # 删除旧内核 + if chroot $os_dir rpm -q $origin_kernel; then + chroot $os_dir zypper remove -y --force-resolution $origin_kernel + fi + if $need_password_workaround; then chroot $os_dir passwd -d root - else - chroot $os_dir zypper install -y --force-resolution $target_kernel fi fi