core: 删除 cloud-init

This commit is contained in:
bin456789 2025-03-06 20:45:30 +08:00
parent aff970c4bc
commit f8ca315d71
No known key found for this signature in database
GPG Key ID: EE301B386DE6C11B

View File

@ -2978,22 +2978,44 @@ chroot_systemctl_disable() {
done
}
disable_cloud_init() {
remove_cloud_init() {
os_dir=$1
info "Disable Cloud-Init"
# 两种方法都可以
if [ -d $os_dir/etc/cloud ]; then
touch $os_dir/etc/cloud/cloud-init.disabled
if ! is_have_cmd_on_disk $os_dir cloud-init; then
return
fi
info "Remove Cloud-Init"
# 两种方法都可以
if false && [ -d $os_dir/etc/cloud ]; then
touch $os_dir/etc/cloud/cloud-init.disabled
fi
for name in cloud-init-local cloud-init cloud-config cloud-final; do
for type in service socket; do
# 服务不存在时会报错
chroot $os_dir systemctl disable "$name.$type" 2>/dev/null || true
done
done
for pkg_mgr in dnf yum zypper apt-get; do
if is_have_cmd_on_disk $os_dir $pkg_mgr; then
case $pkg_mgr in
dnf | yum)
chroot $os_dir $pkg_mgr remove -y cloud-init
;;
zypper)
# 加上 -u 才会删除依赖
chroot $os_dir zypper remove -y -u cloud-init
;;
apt-get)
chroot_apt_remove $os_dir cloud-init
chroot_apt_autoremove $os_dir
;;
esac
break
fi
done
}
disable_jeos_firstboot() {
@ -3080,18 +3102,21 @@ EOF
# 1. 禁用 selinux kdump
# 2. 添加微码+固件
if [ -f $os_dir/etc/redhat-release ]; then
# 防止删除 cloud-init / 安装 firmware 时不够内存
create_swap_if_ram_less_than 2048 $os_dir/swapfile
find_and_mount /boot
find_and_mount /boot/efi
mount_pseudo_fs $os_dir
cp_resolv_conf $os_dir
disable_cloud_init $os_dir
# 可以直接用 alpine 的 cloud-init 生成 Network Manager 配置
create_cloud_init_network_config /net.cfg
create_network_manager_config /net.cfg "$os_dir"
rm /net.cfg
remove_cloud_init $os_dir
disable_selinux_kdump $os_dir
if fw_pkgs=$(get_ucode_firmware_pkgs) && [ -n "$fw_pkgs" ]; then
@ -3116,7 +3141,7 @@ EOF
find_and_mount /boot
find_and_mount /boot/efi
disable_cloud_init $os_dir
remove_cloud_init $os_dir
# 获取当前开启的 Components, 后面要用
if [ -f $os_dir/etc/apt/sources.list.d/debian.sources ]; then
@ -3282,7 +3307,6 @@ EOF
find_and_mount /boot
find_and_mount /boot/efi
disable_cloud_init $os_dir
disable_jeos_firstboot $os_dir
# opensuse leap
@ -3340,7 +3364,7 @@ EOF
fi
# 不能同时装 kernel-default-base 和 kernel-default
chroot $os_dir zypper remove -y kernel-default-base
chroot $os_dir zypper remove -y -u kernel-default-base
# 固件+微码
if fw_pkgs=$(get_ucode_firmware_pkgs) && [ -n "$fw_pkgs" ]; then
@ -3367,11 +3391,11 @@ EOF
chroot $os_dir zypper install -y $kernel
fi
restore_resolv_conf $os_dir
# 最后才删除 cloud-init
# 因为生成 sysconfig 网络配置要用目标系统的 cloud-init
remove_cloud_init $os_dir
# 删除 swap
swapoff -a
rm -f $os_dir/swapfile
restore_resolv_conf $os_dir
fi
# arch 云镜像
@ -3439,6 +3463,10 @@ EOF
if [ -f "$ci_file" ]; then
cat -n "$ci_file"
fi
# 删除 swap
swapoff -a
rm -f $os_dir/swapfile
}
modify_os_on_disk() {
@ -3516,6 +3544,10 @@ create_swap() {
swapfile=$2
if ! grep $swapfile /proc/swaps; then
# 用兼容 btrfs 的方式创建 swapfile
truncate -s 0 $swapfile
# 如果分区不支持 chattr +C 会显示错误但返回值是 0
chattr +C $swapfile 2>/dev/null
fallocate -l ${swapsize}M $swapfile
chmod 0600 $swapfile
mkswap $swapfile
@ -4211,13 +4243,13 @@ EOF
# 清理
rm -rf $os_dir/net.cfg $os_dir/out
# 删除 # Created by cloud-init on instance boot automatically, do not edit.
# 修正网络配置问题并显示文件
sed -i '/^IPV[46]_FAILURE_FATAL=/d' $os_dir/etc/sysconfig/network-scripts/ifcfg-*
sed -i -e '/^IPV[46]_FAILURE_FATAL=/d' -e '/^#/d' $os_dir/etc/sysconfig/network-scripts/ifcfg-*
for file in "$os_dir/etc/sysconfig/network-scripts/ifcfg-"*; do
if grep -q '^DHCPV6C=yes' "$file"; then
sed -i '/^IPV6_AUTOCONF=no/d' "$file"
fi
cat -n "$file"
done
else
@ -4307,6 +4339,9 @@ EOF
# 网络配置
# 18.04+ netplan
if is_have_cmd_on_disk $os_dir netplan; then
# 避免删除 cloud-init 后minimal 镜像的 netplan.io 被 autoremove
chroot $os_dir apt-mark manual netplan.io
# 生成 cloud-init 网络配置
create_cloud_init_network_config $os_dir/net.cfg
@ -4331,6 +4366,9 @@ EOF
rm -rf $os_dir/net.cfg
fi
else
# 避免删除 cloud-init 后 ifupdown 被 autoremove
chroot $os_dir apt-mark manual ifupdown
# 16.04 镜像用 ifupdown/networking 管理网络
# 要安装 resolveconf不然 /etc/resolv.conf 为空
chroot_apt_install $os_dir resolvconf
@ -4581,9 +4619,12 @@ EOF
esac
# 基本配置
disable_cloud_init /os
basic_init /os
# 最后才删除 cloud-init
# 因为生成 netplan/sysconfig 网络配置要用目标系统的 cloud-init
remove_cloud_init /os
# 删除 swapfile
swapoff -a
rm -f /os/swapfile