From f22cda1f1013a7483ebf0310ea36b185960e680e Mon Sep 17 00:00:00 2001 From: bin456789 Date: Sat, 18 Oct 2025 23:41:24 +0800 Subject: [PATCH] =?UTF-8?q?opensuse:=20=E6=B7=BB=E5=8A=A0=2016.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en.md | 19 +++++++++++++++++-- README.md | 19 +++++++++++++++++-- reinstall.sh | 33 ++++++++++++--------------------- trans.sh | 43 +++++++++++++++++++++++-------------------- 4 files changed, 69 insertions(+), 45 deletions(-) diff --git a/README.en.md b/README.en.md index f230b36..2720924 100644 --- a/README.en.md +++ b/README.en.md @@ -56,7 +56,7 @@ The system requirements for the target system are as follows: | CentOS Stream | 9, 10 | 512 MB \* | 5 GB | | Fedora | 41, 42 | 512 MB \* | 5 GB | | openEuler | 20.03 LTS - 24.03 LTS, 25.09 | 512 MB \* | 5 GB | -| openSUSE | Leap 15.6, Tumbleweed (Rolling) | 512 MB \* | 5 GB | +| openSUSE | Leap 15.6, 16.0, Tumbleweed (Rolling) | 512 MB \* | 5 GB | | NixOS | 25.05 | 512 MB | 5 GB | | Arch | Rolling | 512 MB | 5 GB | | Gentoo | Rolling | 512 MB | 5 GB | @@ -162,8 +162,8 @@ bash reinstall.sh anolis 7|8|23 fedora 41|42 nixos 25.05 debian 9|10|11|12|13 - opensuse 15.6|tumbleweed alpine 3.19|3.20|3.21|3.22 + opensuse 15.6|16.0|tumbleweed openeuler 20.03|22.03|24.03|25.09 ubuntu 16.04|18.04|20.04|22.04|24.04|25.10 [--minimal] kali @@ -547,6 +547,21 @@ Log in to the server using Remote Desktop, open Device Manager, locate the graph - `--ssh-key /path/to/public_key` - `--ssh-key C:\path\to\public_key` +## How to Use an Old Version + +According to the Law of Bug Conservation, fixing old bugs often introduces new ones. + +If you encounter such a situation, you can try using an older version. + +Go to and find the old version’s `commit_id` on the right side. + +```bash +commit_id=xxxxxxx +curl -O https://raw.githubusercontent.com/bin456789/reinstall/$commit_id/reinstall.sh || wget -O ${_##*/} $_ +sed -i "/^confhome.*main$/s/main/$commit_id/" reinstall.sh +bash reinstall.sh ... +``` + ## How to Modify the Script for Your Own 1. Fork this repository. diff --git a/README.md b/README.md index d786ded..80e37d1 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ | CentOS Stream | 9, 10 | 512 MB \* | 5 GB | | Fedora | 41, 42 | 512 MB \* | 5 GB | | openEuler | 20.03 LTS - 24.03 LTS, 25.09 | 512 MB \* | 5 GB | -| openSUSE | Leap 15.6, Tumbleweed (滚动) | 512 MB \* | 5 GB | +| openSUSE | Leap 15.6, 16.0, Tumbleweed (滚动) | 512 MB \* | 5 GB | | NixOS | 25.05 | 512 MB | 5 GB | | Arch | 滚动 | 512 MB | 5 GB | | Gentoo | 滚动 | 512 MB | 5 GB | @@ -162,8 +162,8 @@ bash reinstall.sh anolis 7|8|23 fedora 41|42 nixos 25.05 debian 9|10|11|12|13 - opensuse 15.6|tumbleweed alpine 3.19|3.20|3.21|3.22 + opensuse 15.6|16.0|tumbleweed openeuler 20.03|22.03|24.03|25.09 ubuntu 16.04|18.04|20.04|22.04|24.04|25.10 [--minimal] kali @@ -547,6 +547,21 @@ Windows Server 2025 SERVERDATACENTER - `--ssh-key /path/to/public_key` - `--ssh-key C:\path\to\public_key` +## 如何使用旧版本 + +根据 Bug 守恒定律,修复旧 Bug 的同时会引入新的 Bug + +如果遇到这种情况,可以尝试使用旧版本 + +从 右侧找到旧版本的 `commit_id` + +```bash +commit_id=xxxxxxx +curl -O https://raw.githubusercontent.com/bin456789/reinstall/$commit_id/reinstall.sh || wget -O ${_##*/} $_ +sed -i "/^confhome.*main$/s/main/$commit_id/" reinstall.sh +bash reinstall.sh ... +``` + ## 如何修改脚本自用 1. Fork 本仓库 diff --git a/reinstall.sh b/reinstall.sh index 2901f21..e52b950 100644 --- a/reinstall.sh +++ b/reinstall.sh @@ -54,10 +54,10 @@ Usage: $reinstall_____ anolis 7|8|23 fedora 41|42 nixos 25.05 debian 9|10|11|12|13 - opensuse 15.6|tumbleweed alpine 3.19|3.20|3.21|3.22 + opensuse 15.6|16.0|tumbleweed openeuler 20.03|22.03|24.03|25.09 - ubuntu 16.04|18.04|20.04|22.04|24.04|25.04 [--minimal] + ubuntu 16.04|18.04|20.04|22.04|24.04|25.10 [--minimal] kali arch gentoo @@ -1436,26 +1436,17 @@ Continue? else # leap dir=distribution/leap/$releasever/appliances - if [ "$releasever" = 15.6 ]; then - file=openSUSE-Leap-$releasever-Minimal-VM.$basearch-Cloud.qcow2 - # https://build.opensuse.org/projects/Virtualization:Appliances:Images:openSUSE-Leap-15.6/packages/kiwi-templates-Minimal/files/Minimal.kiwi - # https://build.opensuse.org/projects/Virtualization:Appliances:Images:openSUSE-Tumbleweed/packages/kiwi-templates-Minimal/files/Minimal.kiwi - # 有专门的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 - else - # https://src.opensuse.org/openSUSE/Leap/raw/branch/16.0/Leap/Leap.kiwi - # Default 比 Base 多了以下组件 - # - # - # - # - # - # - # + 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 ;; + esac - # file=Leap.x86_64-Default.raw.xz - file=Leap.x86_64-Base.raw.xz - fi + # https://src.opensuse.org/openSUSE/Leap-Images/src/branch/leap-16.0/kiwi-templates-Minimal/Minimal.kiwi + # https://build.opensuse.org/projects/Virtualization:Appliances:Images:openSUSE-Leap-15.6/packages/kiwi-templates-Minimal/files/Minimal.kiwi + # https://build.opensuse.org/projects/Virtualization:Appliances:Images:openSUSE-Tumbleweed/packages/kiwi-templates-Minimal/files/Minimal.kiwi + # 有专门的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 fi eval ${step}_img=$mirror/$dir/$file } diff --git a/trans.sh b/trans.sh index b5fd282..7f3f8ec 100644 --- a/trans.sh +++ b/trans.sh @@ -3277,6 +3277,9 @@ disable_jeos_firstboot() { # 服务不存在时会报错 chroot $os_dir systemctl disable "$name.service" 2>/dev/null || true done + + # 可选 + # chroot $os_dir zypper remove -y -u jeos-firstboot } create_network_manager_config() { @@ -3544,7 +3547,7 @@ EOF fi # opensuse - # 1. kernel-default-base 缺少 nvme 驱动,换成 kernel-default + # 1. kernel-default-base 缺少 nvme gve mlx5 mana 驱动,换成 kernel-default # 2. 添加微码+固件 # https://documentation.suse.com/smart/virtualization-cloud/html/minimal-vm/index.html if grep -q opensuse $os_dir/etc/os-release; then @@ -3556,11 +3559,6 @@ EOF disable_jeos_firstboot $os_dir - # 16.0 需要安装 openssh - if ! chroot $os_dir rpm -qi openssh-server; then - chroot $os_dir zypper install -y openssh-server - fi - # 禁用 selinux disable_selinux $os_dir @@ -3634,23 +3632,19 @@ EOF error_and_exit "Unexpected kernel installed: $installed_kernel" fi - # 15.6 / tumbleweed 自带的是 kernel-default-base - # 16.0 自带的是 kernel-default # 不能同时装 kernel-default-base 和 kernel-default - + # 因此需要添加 --force-resolution 自动删除 kernel-default-base if ! [ "$installed_kernel" = "$target_kernel" ]; then - chroot $os_dir zypper remove -y -u $installed_kernel - # 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 if grep -q '^root:[:!*]' $os_dir/etc/shadow; then echo "root:$(mkpasswd '')" | chroot $os_dir chpasswd -e - chroot $os_dir zypper install -y $target_kernel + chroot $os_dir zypper install -y --force-resolution $target_kernel chroot $os_dir passwd -d root else - chroot $os_dir zypper install -y $target_kernel + chroot $os_dir zypper install -y --force-resolution $target_kernel fi fi @@ -3861,23 +3855,22 @@ change_ssh_conf() { value=$3 sub_conf=$4 - if line="^$key .*" && grep -Exq "$line" $os_dir/etc/ssh/sshd_config; then + if line="^$key .*" && grep -Exq "$line" $os_dir/etc/ssh/sshd_config 2>/dev/null; then # 如果 sshd_config 存在此 key(非注释状态),则替换 sed -Ei "s/$line/$key $value/" $os_dir/etc/ssh/sshd_config - elif { + elif include_line='^Include.*/etc/ssh/sshd_config.d' && # arch 没有 /etc/ssh/sshd_config.d/ 文件夹 # opensuse tumbleweed 没有 /etc/ssh/sshd_config # 有 /etc/ssh/sshd_config.d/ 文件夹 # 有 /usr/etc/ssh/sshd_config - grep -q 'Include.*/etc/ssh/sshd_config.d' $os_dir/etc/ssh/sshd_config || - grep -q '^Include.*/etc/ssh/sshd_config.d/' $os_dir/usr/etc/ssh/sshd_config - } 2>/dev/null; then + { grep -q "$include_line" $os_dir/etc/ssh/sshd_config || + grep -q "$include_line" $os_dir/usr/etc/ssh/sshd_config; } 2>/dev/null; then mkdir -p $os_dir/etc/ssh/sshd_config.d/ echo "$key $value" >"$os_dir/etc/ssh/sshd_config.d/$sub_conf" else # 如果 sshd_config 存在此 key (无论是否已注释),则替换,包括删除注释 # 否则追加 - line="^#?$key .*" + line="^[# ]*$key .*" if grep -Exq "$line" $os_dir/etc/ssh/sshd_config; then sed -Ei "s/$line/$key $value/" $os_dir/etc/ssh/sshd_config else @@ -3894,7 +3887,17 @@ allow_password_login() { allow_root_password_login() { os_dir=$1 - change_ssh_conf "$os_dir" PermitRootLogin yes 01-permitrootlogin.conf + # opensuse 16/tumbleweed 安装 openssh-server-config-rootlogin + # 会生成 /usr/etc/ssh/sshd_config.d/50-permit-root-login.conf + # 但是如果用户删除了此文件,包有更新的话,可能会重新创建这个文件? + # 因此先不用这个方法 + if false && [ -f $os_dir/etc/os-release ] && + grep -iq opensuse $os_dir/etc/os-release && + ! grep -iq 15.6 $os_dir/etc/os-release; then + chroot $os_dir zypper install -y openssh-server-config-rootlogin + else + change_ssh_conf "$os_dir" PermitRootLogin yes 01-permitrootlogin.conf + fi } change_ssh_port() {