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
新增話題