Vagrant
Vagrant 是一个用于管理和配置虚拟化开发环境的工具。
Vagrant 具有“提供程序”的概念,它映射到虚拟化引擎及其 API。最流行和得到良好支持的提供程序是 Virtualbox;存在 插件 用于 libvirt
、lxc
、vmware
等。
Vagrant 使用主要声明式的 Vagrantfile
来定义虚拟化机器。单个 Vagrantfile 可以定义多个机器。
安装
配置
Vagrant 通过 环境变量 进行配置。请参阅 官方文档 中的完整选项列表。
例如,要更改 Vagrant 存储其“可能很大”文件的位置,请将 VAGRANT_HOME
设置为合适的目录。(默认值为 ~/.vagrant.d
)。
插件
Vagrant 具有中间件架构,为强大的 插件 提供支持。
插件可以使用 Vagrant 的内置插件管理器进行安装。您可以指定要安装的多个插件
$ vagrant plugin install vagrant-vbguest vagrant-share
vagrant-libvirt
Vagrant failed to properly resolve required dependencies
。为了在没有此类问题的情况下使用此插件,另一种方法是通过 Podman 或 Docker 使用容器镜像,如官方文档 [1] 所示。
此插件为 Vagrant 添加了 libvirt 提供程序。在使用该提供程序之前,必须安装和配置 libvirt 和相关软件包(例如 QEMU)。
要安装插件,请确保已安装 base-devel 并且 libvirtd.service
已启动。然后运行
$ vagrant plugin install vagrant-libvirt
安装插件后,libvirt
提供程序将可用
$ vagrant up --provider=libvirt
如果您遇到依赖项不匹配的问题,可以设置以下环境变量以忽略 gem 版本。
export VAGRANT_DISABLE_STRICT_DEPENDENCY_ENFORCEMENT=1
如果您在构建 ruby-libvirt 时遇到问题,请尝试以下操作(根据需要将 lib 替换为 lib64)
$ CONFIGURE_ARGS='with-ldflags=-L/opt/vagrant/embedded/lib with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib' \ GEM_HOME=~/.vagrant.d/gems \ GEM_PATH=$GEM_HOME:/opt/vagrant/embedded/gems \ PATH=/opt/vagrant/embedded/bin:$PATH \ vagrant plugin install vagrant-libvirt
请参阅 [2] 以获取更多故障排除信息。
vagrant-lxc
首先从官方存储库安装 lxc,然后
$ vagrant plugin install vagrant-lxc
接下来,按照 官方存储库 中的指示配置 lxc。现在可以像这样在 Vagrantfile
中使用该插件
VAGRANTFILE_API_VERSION = "2" Vagrant.configure("2") do |config| config.vm.define "main" do |config| config.vm.box = 'http://bit.ly/vagrant-lxc-wheezy64-2013-10-23' config.vm.provider :lxc do |lxc| lxc.customize 'cgroup.memory.limit_in_bytes', '512M' end config.vm.provision :shell do |shell| shell.path = 'provision.sh' end end end
provision.sh
文件应是 Vagrantfile
旁边的 shell 脚本。执行任何适当的设置;例如,删除 puppet,它已打包在上面的 box 中
rm /etc/apt/sources.list.d/puppetlabs.list apt-get purge -y puppet facter hiera puppet-common puppetlabs-release ruby-rgen
配置
配置器允许您在 vagrant up 过程中自动安装软件、更改和自动化配置。最常见的配置器是 puppet。
Vagrant 的基础 Box
这里列出了获取各种 Vagrant 基础 Box 的位置,用于不同的目的:开发、测试,甚至生产。
- 官方 Arch Linux Vagrant Box。相应的 Arch-boxes 项目 包含用于构建的 packerfile 和配置脚本。
- 一个维护良好的最新 Arch Linux x86_64 Vagrant 基础 Box。
- Vagrant Cloud 是 HashiCorp 官方的 Vagrant Box 站点。您可以浏览用户提交的 Box 或上传您自己的 Box。单个 Vagrant Cloud Box 可以支持具有版本控制的多个提供程序。
- vagrantbox.es——Vagrant 基础 Box 列表。由 Gareth Rushgrove @garethr 发起,托管在 Heroku 上,使用 Nginx。在此处查看故事:The Vagrantbox.es Story。
- Puppet Labs Vagrant Boxes——预先构建的 Vagrant Box,随时可以使用。由 Puppet Labs 的工作人员制作。
- Vagrant Ubuntu 云镜像——自 2013 年 1 月以来一直存在。由于某种原因,Canonical 尚未正式推广它,可能仍处于 beta 阶段。请记住,这些是原始镜像,如果没有 Chef 或 Puppet,则不是很有用。
- packer-arch 项目在 Github 上 提供了配置文件,用于使用 packer 从官方 iso 镜像构建轻量级的 Arch Linux Vagrant 镜像。
故障排除
主机和 Vagrant Box 之间无 ping (仅主机网络)
有时仅主机网络无法正常工作。主机在 vboxnet 接口上没有 ip,主机无法 ping Vagrant Box,也无法从 Vagrant Box ping 通主机。通过安装旧的 net-tools 可以解决此问题,如 kevin1024 在 此帖 中所述
虚拟机无法从 Arch 主机操作系统进行网络访问
从 1.8.4 版本开始,Vagrant 似乎使用已弃用的 route
命令来配置到虚拟网络接口的路由,该接口桥接到虚拟机。如果未安装 route
,则由于缺少合适的路由,您将无法从主机操作系统访问虚拟机。如上所述,解决方案是安装包含 route 命令的 net-tools 软件包。
安装 nfs-utils 软件包可能会解决此问题。
确保连接未被 iptables 或 nftables 阻止。如果您将 libvirt 与 firewalld 一起使用,请为 libvirt 区域启用 nfs
(nfs3
)、rpc-bind
和 mountd
。
安装 nfs-utils 软件包。通过编辑 /etc/nfs.conf
并取消注释以下行来启用(v3 和)UDP 支持
[nfsd] vers3=y udp=y
重启 nfs-server.service
以立即应用更改。
启动网络 'default' 时出错: 内部错误: 初始化有效的防火墙后端失败
防火墙依赖项很可能未安装。 安装 iptables-nft 和 dnsmasq 软件包并重启 libvirtd.service
单元。
无法 SSH 连接到 Vagrant 虚拟机
检查 BIOS 中是否启用了虚拟化。因为 Vagrant 报告 vm 虚拟机已启动,您可能会认为虚拟化一切正常,但某些 Vagrant Box(例如 tantegerda1/archlinux)允许您一直进入 ssh 阶段,然后 cpu 虚拟化功能的缺乏才会给您带来麻烦。
无法获取域的首选机器
Error while creating domain: Error saving the server: Call to virDomainDefineXML failed: could not get preferred machine for domain
检查 BIOS 中是否启用了虚拟化。