opensuse: 添加 16.0

This commit is contained in:
bin456789 2025-04-10 23:38:36 +08:00
parent bd266fb12f
commit aaf6ad7c83
No known key found for this signature in database
GPG Key ID: EE301B386DE6C11B
2 changed files with 93 additions and 39 deletions

View File

@ -1363,12 +1363,29 @@ Continue?
fi
file=openSUSE-Tumbleweed-Minimal-VM.$basearch-Cloud.qcow2
else
# 常规版本
# leap
dir=distribution/leap/$releasever/appliances
file=openSUSE-Leap-$releasever-Minimal-VM.$basearch-Cloud.qcow2
fi
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 多了以下组件
# <namedCollection name="salt_minion" />
# <package name="patterns-base-salt_minion" />
# <namedCollection name="kvm_host" />
# <package name="patterns-base-kvm_host" />
# <package name="lzop" />
# <package name="wpa_supplicant" arch="x86_64,aarch64" />
# <package name="k3s-install" />
# 有专门的kvm镜像openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2但里面没有cloud-init
# file=Leap.x86_64-Default.raw.xz
file=Leap.x86_64-Base.raw.xz
fi
fi
eval ${step}_img=$mirror/$dir/$file
}
@ -1713,7 +1730,7 @@ Continue with DD?
# 集中测试云镜像格式
if is_use_cloud_image && [ "$step" = finalos ]; then
# shellcheck disable=SC2154
test_url $finalos_img 'qemu qemu.gzip qemu.xz qemu.zstd' finalos_img_type
test_url $finalos_img 'qemu qemu.gzip qemu.xz qemu.zstd raw.xz' finalos_img_type
fi
}
@ -1753,7 +1770,7 @@ verify_os_name() {
'fedora 40|41' \
'nixos 24.11' \
'debian 9|10|11|12' \
'opensuse 15.6|tumbleweed' \
'opensuse 15.6|16.0|tumbleweed' \
'alpine 3.18|3.19|3.20|3.21' \
'openeuler 20.03|22.03|24.03|25.03' \
'ubuntu 16.04|18.04|20.04|22.04|24.04|24.10' \

103
trans.sh
View File

@ -3152,7 +3152,8 @@ EOF
remove_cloud_init $os_dir
disable_selinux_kdump $os_dir
disable_selinux $os_dir
disable_kdump $os_dir
if fw_pkgs=$(get_ucode_firmware_pkgs) && [ -n "$fw_pkgs" ]; then
is_have_cmd_on_disk $os_dir dnf && mgr=dnf || mgr=yum
@ -3344,9 +3345,17 @@ EOF
disable_jeos_firstboot $os_dir
# opensuse leap
if grep opensuse-leap $os_dir/etc/os-release; then
# 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
# opensuse leap 15.6 用 wicked
# opensuse leap 16.0 / tumbleweed 用 NetworkManager
if chroot $os_dir rpm -qi wicked; then
# sysconfig ifcfg
create_cloud_init_network_config $os_dir/net.cfg
chroot $os_dir cloud-init devel net-convert \
@ -3388,11 +3397,8 @@ EOF
# 清理
rm -rf $os_dir/net.cfg $os_dir/out
fi
# opensuse tumbleweed
# network-manager
if grep opensuse-tumbleweed $os_dir/etc/os-release; then
else
# 如果使用 cloud-init 则需要 touch NetworkManager.conf
# 更新到 cloud-init 24.1 后删除
# touch $os_dir/etc/NetworkManager/NetworkManager.conf
@ -3403,34 +3409,45 @@ EOF
rm /net.cfg
fi
# 选择新内核
# 只有 leap 有 kernel-azure
if grep -iq leap $os_dir/etc/os-release && [ "$(get_cloud_vendor)" = azure ]; then
target_kernel='kernel-azure'
else
target_kernel='kernel-default'
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"
fi
# 15.6 / tumbleweed 自带的是 kernel-default-base
# 16.0 自带的是 kernel-default
# 不能同时装 kernel-default-base 和 kernel-default
chroot $os_dir zypper remove -y -u 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 passwd -d root
else
chroot $os_dir zypper install -y $target_kernel
fi
fi
# 固件+微码
if fw_pkgs=$(get_ucode_firmware_pkgs) && [ -n "$fw_pkgs" ]; then
chroot $os_dir zypper install -y $fw_pkgs
fi
# 选择新内核
# 只有 leap 有 kernel-azure
if grep -q opensuse-leap $os_dir/etc/os-release && [ "$(get_cloud_vendor)" = azure ]; then
kernel='kernel-azure'
else
kernel='kernel-default'
fi
# 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 $kernel
chroot $os_dir passwd -d root
else
chroot $os_dir zypper install -y $kernel
fi
# 最后才删除 cloud-init
# 因为生成 sysconfig 网络配置要用目标系统的 cloud-init
remove_cloud_init $os_dir
@ -3707,10 +3724,9 @@ change_root_password() {
fi
}
disable_selinux_kdump() {
disable_selinux() {
os_dir=$1
# selinux
# https://access.redhat.com/solutions/3176
# centos7 也建议将 selinux 开关写在 cmdline
# grep selinux=0 /usr/lib/dracut/modules.d/98selinux/selinux-loadpolicy.sh
@ -3718,9 +3734,28 @@ disable_selinux_kdump() {
if [ -f $os_dir/etc/selinux/config ]; then
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' $os_dir/etc/selinux/config
fi
chroot $os_dir grubby --update-kernel ALL --args selinux=0
# kdump
# opensuse 没有安装 grubby
if is_have_cmd_on_disk $os_dir grubby; then
# grubby 只处理 GRUB_CMDLINE_LINUX不会处理 GRUB_CMDLINE_LINUX_DEFAULT
# rocky 的 GRUB_CMDLINE_LINUX_DEFAULT 有 crashkernel=auto
chroot $os_dir grubby --update-kernel ALL --args selinux=0
# el7 上面那条 grubby 命令不能设置 /etc/default/grub
sed -i 's/selinux=1/selinux=0/' $os_dir/etc/default/grub
else
# 有可能没有 selinux 参数,但现在的镜像没有这个问题
# sed -Ei 's/[[:space:]]?(security|selinux|enforcing)=[^ ]*//g' $os_dir/etc/default/grub
sed -i 's/selinux=1/selinux=0/' $os_dir/etc/default/grub
# 如果需要用 snapshot 可以用 transactional-update grub.cfg
chroot $os_dir grub2-mkconfig -o /boot/grub2/grub.cfg
fi
}
disable_kdump() {
os_dir=$1
# grubby 只处理 GRUB_CMDLINE_LINUX不会处理 GRUB_CMDLINE_LINUX_DEFAULT
# rocky 的 GRUB_CMDLINE_LINUX_DEFAULT 有 crashkernel=auto
@ -4111,7 +4146,8 @@ install_qcow_by_copy() {
del_default_user /os
# selinux kdump
disable_selinux_kdump /os
disable_selinux /os
disable_kdump /os
# el7 删除 machine-id 后不会自动重建
clear_machine_id /os
@ -4877,6 +4913,7 @@ fix_gpt_backup_partition_table_by_sgdisk() {
# 适用于 DD 后修复 gpt 备份分区表
fix_gpt_backup_partition_table_by_parted() {
apk add parted
parted /dev/$xda -f -s print
update_part
}