在制作 Cloud Init 云镜像之前,我们需要下载一份打包好的空的云镜像,镜像一般选用 bios+cloudinit+qcow2 标签的
Ubuntu:http://cloud-images.ubuntu.com/releases
Debian:https://cloud.debian.org/images/cloud/
CentOS:https://cloud.centos.org/centos/
Alpine:https://dl-cdn.alpinelinux.org/alpine/v<版本号>/releases/< 架构 >/
一、导入云镜像
首先我们需要导入我们的云镜像,以 PVE 为例
$ qm importdisk 101 ubuntu24.04.qcow2 local --format=qcow2
二、进入系统 / 挂载系统盘
方法一:在大多数情况 cloud init 均为 disable_root 状态,但是为了避免新增用户影响,我们可以先用 root 登陆 VNC 再手动允许 root 登陆
$ vi /etc/ssh/sshd_config.d/60-cloudimg-settings.conf PasswordAuthentication yes PermitRootLogin yes
方法二:直接挂载 qcow2 到目录,直接修改相关配置
$ qemu-nbd --connect=/dev/nbd0 /var/lib/vz/images/401/vm-401-disk-0.qcow2 # 查看虚拟磁盘分区 $ fdisk -l /dev/nbd0 # 挂载对应盘符 $ mount /dev/nbd0p1 /qemu $ df -h /qemu
三、修改 Cloud Init 配置
修改主要配置,允许 Root,允许密码登陆,修改软件源
$ vi /etc/cloud/cloud.cfg # 允许Root disable_root: false # 允许密码登陆 ssh_pwauth: true # 修改Ubuntu/Debian/CentOS源 package_mirrors: - arches: [i386, amd64] failsafe: primary: http://mirrors.0e7.cc/ubuntu security: http://mirrors.0e7.cc/ubuntu - arches: [arm64, armel, armhf] failsafe: primary: http://mirrors.0e7.cc/ubuntu-ports security: http://mirrors.0e7.cc/ubuntu-ports - arches: [default] failsafe: primary: http://mirrors.0e7.cc/ubuntu-ports security: http://mirrors.0e7.cc/ubuntu-ports # 修改Alpine源 apk_repos: alpine_repo: base_url: http://mirrors.0e7.cc/alpine community_enabled: true version: v3.20
添加自定义配置,如在 sshd_config 中允许密码登陆(有些云镜像会默认关闭,即使在上一步打开了也灭用),运行自定义程序等(我这里默认给 pip/conda 换源,安装 qemu-guest-agent)
在 cfg 文件开头的 #cloud-config 时扫描配置文件需要的,不可以缺少
$ vi /etc/cloud/cloud.cfg.d/0e7.cfg #cloud-config write_files: - path: /etc/ssh/sshd_config append: true content: | PermitRootLogin yes packages: - qemu-guest-agent runcmd: - mkdir -p /root/.pip - curl -o /root/.condarc http://mirrors.0e7.cc/script/dot_condarc - curl -o /root/.pip/pip.conf http://mirrors.0e7.cc/script/dot_pip - curl -o /bin/simple_relayer_cli http://mirrors.0e7.cc/script/simple_relayer_cli - chmod +x /bin/simple_relayer_cli - systemctl enable qemu-guest-agent.service --now # - rc-update add qemu-guest-agent default
四、清除 Cloud Init 缓存
仅方法一需要清空缓存
$ cloud-init clean $ rm -rf /var/lib/cloud/instances/ $ rm -rf /var/lib/cloud/instance $ rm -rf /var/lib/cloud/data/ $ rm -rf /var/log/lastlog # 这里还可以清理再细致点,我就不喜欢清理所以用了方法二 $ history -c && history -w && init 0
方法二仅需取消挂载即可
$ umount /qemu $ qemu-nbd --disconnect /dev/nbd0
五、挂载 Cloud Init 盘符
修改相关用户密码配置,开机即可