vagrant 初始化
# 前言
因为平时在 windows 下都是用 wsl ,所以打算把 vagrant 也弄到这里面来。但是一切并不是那么顺利..,所以记录下。
# 安装
# 期望的目标
- virtualbox 在 windows 上安装
- vagrant 在 wsl 上安装
- 最终效果就是 wsl 上执行 vagrant 的命令,最终得以正常运行。
# 安装 vagrant
我发行版是用的 ubuntu20.04
$ wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
1
2
3
2
3
其他版本可以参考:vagrant 官方各个版本安装文档 (opens new window)
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install vagrant
1
2
3
2
3
# 测试是否正常安装
vagrant -h
1
我执行时出现这样的错误:
The executable 'cmd.exe' Vagrant is trying to run was not
found in the PATH variable. This is an error. Please verify
this software is installed and on the path.
1
2
3
2
3
反正就是 cmd.exe 没有在 PATH 里面啥的。
但是我执行 whereis cmd
的时候又能够找到...,然后一顿搜索各种方案发都是让加环境变量,让配置 PATH 啥的。都没有用。想了下 wsl 是可以执行调用 windows 中的东西的。所以我单独执行了一下,cmd.exe 结果报错是 permission denied...,顿时悟了,文件权限问题啊。ll 看了下 cmd 的权限,发现真的没有可执行权限...。
因为 wsl 默认权限全部是 777,所以配置 wsl 时把文件权限全部重新挂载了一次。配置成文件的掩码为 111 了,导致全部文件只有可读写权限,没有可执行的权限。所以修改下文件掩码 为 011
即可。
/etc/wsl.conf
[automount]
options = "metadata,umask=22,fmask=011"
[filesystem]
umask = 022
1
2
3
4
5
6
7
2
3
4
5
6
7
# 配置
~/.zshrc
export VAGRANT_DEFAULT_PROVIDER=virtualbox
export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"
export PATH="$PATH:/mnt/c/Program Files/Oracle/VirtualBox"
1
2
3
4
5
2
3
4
5
# 自动提示
vagrant autocomplete install --bash --zsh
1
# 插件
# vagrant-hostmanager
自动配置各个主机名到 /etc/hosts
# 安装
vagrant plugin install vagrant-hostmanager
# 配置示例
Vagrant.configure("2") do |config|
config.vm.box = "generic/centos7"
config.vm.provider "hyperv"
# 激活hostmanager插件
config.hostmanager.enabled = true
# 在宿主机上的hosts文件中添加虚拟机的主机名解析信息
config.hostmanager.manage_host = true
# 在各自虚拟机中添加各虚拟机的主机名解析信息
config.hostmanager.manage_guest = true
# 不忽略私有网络的地址
config.hostmanager.ignore_private_ip = false
config.vm.define 'vm1' do |node|
node.vm.hostname = 'vm1'
node.vm.network :private_network, ip: '192.168.42.42'
end
config.vm.define 'vm2' do |node|
node.vm.hostname = 'vm2'
end
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 自定义插件镜像源
vagrant plugin install vagrant-hostmanager --plugin-clean-sources --plugin-source https://gems.ruby-china.com/
1
# 关于WSL2
因为 WSL2 已经完成虚拟一个轻量级 linux 虚拟机了,所以网络也不和 wsl1 一样了,需要手动配置下防火墙,不然 vagrant ssh 不互通。不过好像也有个叫 virtualbox_WSL2
的插件,好像可以解决这个问题,但是我用的 wsl1 也没啥需求换成 wsl2。没有尝试了。
# 最后
这样实现了 wsl 中使用 vagrant了。
在 GitHub 编辑此页 (opens new window)
上次更新: 2024/02/25, 12:11:11