是否存在离线(无需云主机)使用cloud-init的实践示例?
在本地单机(Raspbian)使用cloud-init的实操指南
嘿,我完全懂你的痛点——网上搜cloud-init全是绑定云平台的演示,谁能想到本地单机也能用上它?好在Raspbian软件源里已经预装了cloud-init,咱们直接一步步来搞定:
1. 确认cloud-init状态
先在终端里检查下系统里有没有装cloud-init,跑这条命令:
cloud-init --version
要是没装的话,用apt快速安装:
sudo apt update && sudo apt install cloud-init -y
2. 配置本地数据源(核心步骤!)
默认cloud-init会盯着云平台的数据源,咱们本地用得改成NoCloud数据源,这是专门给非云环境设计的。
方法一:本地文件数据源(适合已运行的系统)
- 先创建cloud-init的配置目录:
sudo mkdir -p /var/lib/cloud/seed/nocloud-net
- 新建用户配置文件
user-data,这里可以写你想要的初始化操作,比如创建用户、装软件、启动服务:
sudo nano /var/lib/cloud/seed/nocloud-net/user-data
给你个示例配置(按需修改就行):
#cloud-config users: - name: mylocaluser groups: sudo shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... # 替换成你的SSH公钥 packages: - nginx - python3-pip runcmd: - systemctl enable --now nginx - pip3 install flask
- 必须创建一个空的
meta-data文件(cloud-init要求的,不然会报错):
sudo touch /var/lib/cloud/seed/nocloud-net/meta-data
方法二:ISO镜像数据源(适合新系统安装)
如果是刚准备装Raspbian,可以把user-data和meta-data打包成ISO镜像,安装时挂载这个镜像,cloud-init会自动读取配置。打包命令:
genisoimage -output cloud-init.iso -volid cidata -joliet -rock user-data meta-data
之后把这个ISO和系统镜像一起写入SD卡,安装时系统会自动识别并执行配置。
3. 让cloud-init执行配置
如果是已经在运行的系统,改完配置后得重置cloud-init的状态,让它重新跑一遍:
sudo cloud-init clean --logs sudo cloud-init init --local sudo cloud-init modules --mode config sudo cloud-init modules --mode final
嫌麻烦的话直接重启系统,cloud-init会在开机时自动触发:
sudo reboot
4. 验证配置是否生效
重启后可以查看cloud-init的日志,确认有没有报错:
cat /var/log/cloud-init.log
也可以直接验证效果,比如检查软件是否安装、用户是否创建:
systemctl status nginx id mylocaluser
小提醒:cloud-init默认只会在第一次开机执行一次,要是想重复测试,必须先执行
cloud-init clean清除之前的运行状态。
内容的提问来源于stack exchange,提问作者Bruno Bronosky
相关产品推荐
相关产品推荐

