@@ -3277,6 +3277,9 @@ disable_jeos_firstboot() {
32773277 # 服务不存在时会报错
32783278 chroot $os_dir systemctl disable " $name .service" 2> /dev/null || true
32793279 done
3280+
3281+ # 可选
3282+ # chroot $os_dir zypper remove -y -u jeos-firstboot
32803283}
32813284
32823285create_network_manager_config () {
@@ -3544,7 +3547,7 @@ EOF
35443547 fi
35453548
35463549 # opensuse
3547- # 1. kernel-default-base 缺少 nvme 驱动,换成 kernel-default
3550+ # 1. kernel-default-base 缺少 nvme gve mlx5 mana 驱动,换成 kernel-default
35483551 # 2. 添加微码+固件
35493552 # https://documentation.suse.com/smart/virtualization-cloud/html/minimal-vm/index.html
35503553 if grep -q opensuse $os_dir /etc/os-release; then
@@ -3556,11 +3559,6 @@ EOF
35563559
35573560 disable_jeos_firstboot $os_dir
35583561
3559- # 16.0 需要安装 openssh
3560- if ! chroot $os_dir rpm -qi openssh-server; then
3561- chroot $os_dir zypper install -y openssh-server
3562- fi
3563-
35643562 # 禁用 selinux
35653563 disable_selinux $os_dir
35663564
@@ -3634,23 +3632,19 @@ EOF
36343632 error_and_exit " Unexpected kernel installed: $installed_kernel "
36353633 fi
36363634
3637- # 15.6 / tumbleweed 自带的是 kernel-default-base
3638- # 16.0 自带的是 kernel-default
36393635 # 不能同时装 kernel-default-base 和 kernel-default
3640-
3636+ # 因此需要添加 --force-resolution 自动删除 kernel-default-base
36413637 if ! [ " $installed_kernel " = " $target_kernel " ]; then
3642- chroot $os_dir zypper remove -y -u $installed_kernel
3643-
36443638 # x86 必须设置一个密码,否则报错,arm 没有这个问题
36453639 # Failed to get root password hash
36463640 # Failed to import /etc/uefi/certs/76B6A6A0.crt
36473641 # warning: %post(kernel-default-5.14.21-150500.55.83.1.x86_64) scriptlet failed, exit status 255
36483642 if grep -q ' ^root:[:!*]' $os_dir /etc/shadow; then
36493643 echo " root:$( mkpasswd ' ' ) " | chroot $os_dir chpasswd -e
3650- chroot $os_dir zypper install -y $target_kernel
3644+ chroot $os_dir zypper install -y --force-resolution $target_kernel
36513645 chroot $os_dir passwd -d root
36523646 else
3653- chroot $os_dir zypper install -y $target_kernel
3647+ chroot $os_dir zypper install -y --force-resolution $target_kernel
36543648 fi
36553649 fi
36563650
@@ -3861,23 +3855,22 @@ change_ssh_conf() {
38613855 value=$3
38623856 sub_conf=$4
38633857
3864- if line=" ^$key .*" && grep -Exq " $line " $os_dir /etc/ssh/sshd_config; then
3858+ if line=" ^$key .*" && grep -Exq " $line " $os_dir /etc/ssh/sshd_config 2> /dev/null ; then
38653859 # 如果 sshd_config 存在此 key(非注释状态),则替换
38663860 sed -Ei " s/$line /$key $value /" $os_dir /etc/ssh/sshd_config
3867- elif {
3861+ elif include_line= ' ^Include.*/etc/ssh/sshd_config.d ' &&
38683862 # arch 没有 /etc/ssh/sshd_config.d/ 文件夹
38693863 # opensuse tumbleweed 没有 /etc/ssh/sshd_config
38703864 # 有 /etc/ssh/sshd_config.d/ 文件夹
38713865 # 有 /usr/etc/ssh/sshd_config
3872- grep -q ' Include.*/etc/ssh/sshd_config.d' $os_dir /etc/ssh/sshd_config ||
3873- grep -q ' ^Include.*/etc/ssh/sshd_config.d/' $os_dir /usr/etc/ssh/sshd_config
3874- } 2> /dev/null; then
3866+ { grep -q " $include_line " $os_dir /etc/ssh/sshd_config ||
3867+ grep -q " $include_line " $os_dir /usr/etc/ssh/sshd_config; } 2> /dev/null; then
38753868 mkdir -p $os_dir /etc/ssh/sshd_config.d/
38763869 echo " $key $value " > " $os_dir /etc/ssh/sshd_config.d/$sub_conf "
38773870 else
38783871 # 如果 sshd_config 存在此 key (无论是否已注释),则替换,包括删除注释
38793872 # 否则追加
3880- line=" ^#? $key .*"
3873+ line=" ^[# ]* $key .*"
38813874 if grep -Exq " $line " $os_dir /etc/ssh/sshd_config; then
38823875 sed -Ei " s/$line /$key $value /" $os_dir /etc/ssh/sshd_config
38833876 else
@@ -3894,7 +3887,17 @@ allow_password_login() {
38943887allow_root_password_login () {
38953888 os_dir=$1
38963889
3897- change_ssh_conf " $os_dir " PermitRootLogin yes 01-permitrootlogin.conf
3890+ # opensuse 16/tumbleweed 安装 openssh-server-config-rootlogin
3891+ # 会生成 /usr/etc/ssh/sshd_config.d/50-permit-root-login.conf
3892+ # 但是如果用户删除了此文件,包有更新的话,可能会重新创建这个文件?
3893+ # 因此先不用这个方法
3894+ if false && [ -f $os_dir /etc/os-release ] &&
3895+ grep -iq opensuse $os_dir /etc/os-release &&
3896+ ! grep -iq 15.6 $os_dir /etc/os-release; then
3897+ chroot $os_dir zypper install -y openssh-server-config-rootlogin
3898+ else
3899+ change_ssh_conf " $os_dir " PermitRootLogin yes 01-permitrootlogin.conf
3900+ fi
38983901}
38993902
39003903change_ssh_port () {
0 commit comments