这个问题看上去很愚蠢,因为它太简单了。
但
刚刚开始接触多通道,所以我尝试的第一件事就是使用云初始化文件。但是多通道报告错误:No such file:
[opt/multipass] $ multipass launch -n test --cloud-init setup.yaml
error: No such file: setup.yaml
所以我尝试了./setup.yaml
绝对路径,但/opt/multipass/setup.yaml
都给出相同的“没有这样的文件”错误。
/选择/多通道
drwxrwsr-x+ 2 david users 4096 Feb 6 08:04 ./
drwxrwsr-x+ 44 sysadmin users 4096 Feb 6 07:24 ../
-rw-rw-r--+ 1 david users 256 Feb 6 07:50 setup.yaml
我这里遗漏了什么?所有的例子看起来都像这样。https://ubuntu.com/blog/using-cloud-init-with-multipass 如果 yaml 文件中存在问题,是否会出现此错误?yaml 文件是否需要放在特定目录中?或者是否具有特定所有者、权限(现在每个人都可以读取)。这看起来很简单……应该可以正常工作,不是吗?
设置.yaml
users:
- default
- name: ubuntu
- sudo: ALL=(ALL) NOPASSWD:ALL
plain_text_passwd: 'ubuntu'
home: /home/ubuntu
shell: /bin/bash
lock_passwd: false
gecos: Ubuntu
groups: [adm, audio, cdrom, dialout, floppy, video, plugdev, dip, netdev, sudo]
答案1
嗯,这个问题并不完全是愚蠢的,因为问题出现是因为 snap 不一定能访问主机文件系统,而 multipass 是一个 snap 应用程序。
但是,默认情况下,当您安装 multipass 时,它确实可以访问用户主目录,因此在查找 clould init 文件时,它必须与您的主目录相关,并且我有 yaml 文件,/opt/multipass
但 multipass 默认情况下无法在那里“看到”。
因此将 yaml 文件移动到~/multipass/setup.yaml
然后使用
multipass launch -n test --cloud-init ./multipass/setup.yaml
从主目录工作。
具有别名的 bash 脚本/函数alias mpl="multipass_launch"
可以使启动变得简单
multipass_launch () {
subdir=${MULTIPASS_HOME:-cloud-init}
[[ $1 ]] && name="-n $1"
if [[ $2 ]]; then
if [[ -f $HOME/$subdir/$2.yaml ]]; then
init="--cloud-init $HOME/$subdir/$2.yaml"
else
echo no cloud init file $HOME/$subdir/$2.yaml
return 1
fi
fi
echo running: multipass launch $name $init
multipass launch $name $init
}
}
现在使用该云初始化文件启动就变成了
mpl test setup
如果你想保留 multipass 可以在其他地方找到的文件,那么使用 bindfs
答案2
这帮助我设置了云配置文件。 https://www.digitalocean.com/community/tutorials/how-to-use-cloud-config-for-your-initial-server-setup
这里还有一个例子,但一定要用你的 SSH 密钥替换
如果您不知道如何获取 ssh 密钥,请执行以下命令:cat ~/.ssh/id_rsa.pub
下面的示例文件
#cloud-config
users:
- name: testcloud
ssh-authorized-keys:
- ssh-rsa
INSERT YOUR PUBLIC SSH KEY HERE
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash