Vagrant - Arch Linux 中文维基

跳转到内容

# Vagrant

来自 Arch Linux 中文维基

相关文章

- Docker
- KVM
- Libvirt
- VirtualBox

翻译状态：

- 本文（或部分内容）译自 Vagrant，最近一次同步于 2026-07-11，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

Vagrant 是一款用于管理和配置虚拟化开发环境的工具。

Vagrant 包含“服务商” (providers) 概念。此概念直接映射到虚拟化引擎及其 API。在所有服务商中，VirtualBox 的普及率最高且支持最为完善。如需使用`libvirt`、`lxc` 或 `vmware` 等其他引擎，需安装相应的插件。

Vagrant 主要通过声明式的 `Vagrantfile` 来定义虚拟机。只需编写单个 `Vagrantfile`，即可定义多台虚拟机

## 安装

安装 vagrantAUR 软件包。

## 配置

可以通过环境变量来管理 Vagrant。如需查看完整的选项列表，参见官方文档。

例如，若要更改 Vagrant 存储大文件的路径，需将 `VAGRAN_HOME` 设置为合适的目录（默认路径为 `~/.vagrant.d`）。

## 插件

Vagrant 采用中间件架构，以提供强大的插件支持。

使用 Vagrant 内置的插件管理器安装插件。如需同时安装多个插件，需在命令后依次指定：

    $ vagrant plugin install vagrant-vbguest vagrant-share

### vagrant-libvirt

注意：因 Arch 仓库中最新版 vagrantAUR 包附带的 ruby gem 存在兼容性问题，当前可能导致 libvirt 插件报错，例如：`Vagrant failed to properly resolve required dependencies`

为避免此兼容性问题，可根据官方文档的说明，通过 Podman 或 Docker 使用容器镜像作为替代方案。

注意：此问题现已修复（至少自 vagrant 2.4.5-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

若需查看更多故障排除指南，请参考[1]。

### vagrant-lxc

先从官方仓库安装 lxc包，随后执行：

    $ vagrant plugin install vagrant-lxc

接下来，按照官方仓库的指引配置 lxc。配置完成后，可通过如下 `Vagrantfile` 使用此插件：

这篇文章的某些内容需要扩充。

原因：此处使用的是任意镜像。后续应补充透明仓库的链接，或添加如何构建自定义镜像的说明。 (在 Talk:Vagrant 中讨论)

    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 脚本。在此脚本中编写所需的初始化配置。例如，若要卸载上述 box 中自带的 puppet，可编写如下内容：

    rm /etc/apt/sources.list.d/puppetlabs.list
    apt-get purge -y puppet facter hiera puppet-common puppetlabs-release ruby-rgen

## 配置自动化

通过使用“配置器” (Provisioners)，可在执行 vagrant up 的过程中自动安装软件、修改并自动化配置。最常见的配置器为 puppet包。

## Vagrant 基础镜像

以下是获取各种用途（开发、测试或生产环境） Vagrant 基础镜像 (vagrant base boxes) 的站点列表：

- 维护良好且持续更新的 Arch Linux x86_64 Vagrant 基础镜像。

- Vagrant Cloud - HashiCorp 的官方 Vagrant 镜像站点。在此可浏览用户提交的镜像或上传自制镜像。单个 Vagrant Cloud 镜像可通过版本控制支持多个服务商。

- vagrantbox.es - Vagrant 基础镜像列表。此项目由 Gareth Rushgrove (@garethr) 发起，托管于 Heroku 并使用 Nginx 服务。其背后故事参见：Vagrantbox.es 的故事。

- Bento - 一个封装了用于构建 Vagrant 基础镜像的 Packer 模板的项目。部分模板已构建并发布至 Vagrant Cloud 上的 bento 组织。

- Puppet Labs Vagrant Boxes - 由 Puppet Labs 团队制作、开箱即用的预制 Vagrant 镜像。

- Vagrant Ubuntu Cloud Images - 自 2013 年 1 月起上线。Canonical 尚未正式推广（现已停止生命周期 (EOL) 或标准支持 (EOSS)）

- Github 上的 packer-arch 项目 - 提供配置文件，以便使用 packer包 基于官方 ISO 镜像构建轻量级 Arch Linux Vagrant 镜像。

## 故障排除

### 主机与 Vagrant 虚拟机之间无法 Ping 通（仅主机网络模式）

有时会出现仅主机网络 (host-only networking) 无法正常工作的问题。表现为主机在 vboxnet 接口上没有 IP 地址，主机无法 Ping 通 Vagrant 虚拟机，虚拟机也无法 Ping 通主机。根据 kevin1024 在此讨论串中的提示，安装 net-tools包 软件包即可解决。

### 无法从 Arch 主机系统通过网络访问虚拟机

自 1.8.4 版本起，Vagrant 似乎仍在通过已弃用的 `route` 命令来配置连接至虚拟机的桥接路由。若未安装 `route`，将因缺少相应路由而导致无法从主机系统访问虚拟机。解决方法如前文所述，安装包含 route 命令的 net-tools包 软件包即可。

### 执行 "vagrant up" 停滞在 NFS 挂载阶段 (Mounting NFS shared folders...)

安装 nfs-utils包 软件包可能会解决此问题。

同时务必确认连接未被 iptables包 或 nftables包 拦截。若同时使用 libvirt 和 firewalld，须为 libvirt 区域（zone）放行 `nfs`（`nfs3`）、`rpc-bind` 和 `mountd` 服务。

### 挂载 NFS 共享文件夹报错：mount.nfs: requested NFS version or transport protocol is not supported

安装 nfs-utils包 软件包。编辑 `/etc/nfs.conf` 并取消以下几行的注释，以启用（v3 和）UDP 支持：

    [nfsd]
    vers3=y
    udp=y

随后Restart `nfs-server.service` 以立即应用更改。

### 启动网络"default"报错：internal error: Failed to initialize a valid firewall backend

通常原因为未安装防火墙依赖。安装 iptables包 和 dnsmasq包 软件包，随后重启 `libvirtd.service` 单元。

### 无法通过 SSH 连接至 Vagrant 客户机

检查 BIOS 中是否已经开启虚拟化支持。虽然 Vagrant 提示虚拟机已启动，但这并不意味着虚拟化一切正常。部分 Vagrant 镜像（例如 tantegerda1/archlinux）在未开启 CPU 虚拟化时，仍能运行到 SSH 阶段才报错

### 报错：Could not get preferred machine for domain

    Error while creating domain: Error saving the server: Call to virDomainDefineXML failed: could not get preferred machine for domain

检查 BIOS 中是否已开启虚拟化支持。

## 另见

- Vagrant 官方文档
- zhwp:Vagrant

分类：​

- 虚拟化

Vagrant
添加话题