ubuntu: 只禁用 cloud-init 而不是删除

fixes #516
This commit is contained in:
bin456789
2025-12-25 00:14:38 +08:00
parent e60a8d0de2
commit 0c5fac6d6b

View File

@ -3226,20 +3226,27 @@ chroot_systemctl_disable() {
done
}
remove_cloud_init() {
remove_or_disable_cloud_init() {
os_dir=$1
if ! is_have_cmd_on_disk $os_dir cloud-init; then
return
fi
info "Remove Cloud-Init"
info "Remove or Disable Cloud-Init"
# 两种方法都可以
if false && [ -d $os_dir/etc/cloud ]; then
# ubuntu-server-minimal ubuntu-cloud-minimal 都包含 cloud-init
# 用 iso 安装的 ubuntu 也有 cloud-init
# 因此不删除 ubuntu 的 cloud-init而是禁用它
# iso 安装首次启动是通过 /etc/cloud/cloud.cfg.d/99-installer.cfg 初始化系统,包括:
# 1. 创建普通用户和密码,添加 ssh 登录公钥
# 2. 创建 /etc/cloud/cloud-init.disabled
if grep -iq ubuntu $os_dir/etc/os-release; then
# 模仿 iso 安装的 ubuntu只创建 cloud-init.disabled不禁用服务
touch $os_dir/etc/cloud/cloud-init.disabled
fi
else
# systemctl is-enabled cloud-init-hotplugd.service 状态是 static
# disable 会出现一堆提示信息,也无法 disable
for unit in $(
@ -3272,6 +3279,7 @@ remove_cloud_init() {
break
fi
done
fi
}
disable_jeos_firstboot() {
@ -3387,7 +3395,7 @@ EOF
if [ "$distro" = fedora ] && [ "$releasever" = 43 ]; then
chroot $os_dir dnf mark user netcat -y
fi
remove_cloud_init $os_dir
remove_or_disable_cloud_init $os_dir
disable_selinux $os_dir
disable_kdump $os_dir
@ -3414,7 +3422,7 @@ EOF
find_and_mount /boot
find_and_mount /boot/efi
remove_cloud_init $os_dir
remove_or_disable_cloud_init $os_dir
# 获取当前开启的 Components, 后面要用
if [ -f $os_dir/etc/apt/sources.list.d/debian.sources ]; then
@ -3689,7 +3697,7 @@ EOF
# 最后才删除 cloud-init
# 因为生成 sysconfig 网络配置要用目标系统的 cloud-init
remove_cloud_init $os_dir
remove_or_disable_cloud_init $os_dir
restore_resolv_conf $os_dir
fi
@ -5082,7 +5090,7 @@ EOF
# 最后才删除 cloud-init
# 因为生成 netplan/sysconfig 网络配置要用目标系统的 cloud-init
remove_cloud_init /os
remove_or_disable_cloud_init /os
# 删除 swapfile
swapoff -a