0
0

Vagrantの共有フォルダ設定 (Synced Folder)

Posted at

前回vagrantの基本機能について記事を書きましたが
今回は拡張機能で出来る共有フォルダ設定について記事を書きます。

共有フォルダ(Synced Folder)とは

ホストOSとゲストOSとでファイル共有出来るようにする機能です。
例えばホストOS「PC_A」にて「/Users/test/」というフォルダと
ゲストOS「VM_B」の「/var/www/」というディレクトリをファイル共有設定していた場合

「PC_A」の「C:\Users\test\」配下にファイル「README」を作成すると
共有フォルダ設定をした「VM_B」の「/var/www/」配下にも同じ「README」が作成されるといった感じです。

image.png

前提

ホストOSにvagrantがインストールされていることが条件です。
まだの方は以下参照
Vagrantを利用してLinux検証環境を構築

実際の手順

1.プラグインのインストール

まずこの機能を使うにはプラグインをインストールしないといけません。
以下コマンドでホストOSにインストールします。

vagrant plugin install vagrant-vbguest

2.Vagrantfileの編集

Vagrantfileを以下に編集します。

Vagrantfile
Vagrant.configure("2") do |config|

  config.vm.define "vm1" do |vm1|
    vm1.vm.box = "bento/amazonlinux-2"
    vm1.vm.hostname = "testB"
    vm1.vm.network "private_network", ip: "192.168.50.4"
    vm1.vm.synced_folder "./test", "/var/www", owner: 'vagrant', group: 'vagrant'
  end

end

configの補足説明をしますと
今回の共有フォルダ設定はVagrantfileの以下です。

vm1.vm.synced_folder "./test", "/var/www", owner: 'vagrant', group: 'vagrant'

["./test"]の部分がホストOS側のディレクトリです。
今回私は相対パスで[./]と記載しましたが、実行するVagrantファイルが配置されているディレクトリがカレントディレクトリとなります。
私の場合は以下階層でした。

$ pwd
/c/Users/yuuuk/
$ ls -l
-rw-r--r-- 1 yuuuk 197121 320 Aug 21 14:01 Vagrantfile
drwxr-xr-x 1 yuuuk 197121   0 Aug 21 14:04 test/

3.vagrant upの実行

あとは設定反映させるためにvagrant upコマンドを実行します。

vagrant up vm1

4. vagrant up後のLogの確認

vagrant upするとログが吐き出されますが、一部errorがあったようです。
気になったログとしては以下2点です。

  • 1つ目のエラー
VirtualBox Guest Additions: Setting up modules
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Kernel headers not found for target kernel
4.14.336-257.568.amzn2.x86_64. Please install them and execute
  /sbin/rcvboxadd setup

上記エラーログはVirtualBox Guest Additionsモジュールをセットアップしようとするとカーネルヘッダが見つからないということを意味しているようです。

このカーネルヘッダとはLinuxカーネルのソースコードの一部で、カーネル内部構造や機能を定義するヘッダファイルのことで、カーネルが提供する関数やデータ構造の定義が含まれており、モジュールやドライバはこれを参照して正しく動作します。
カーネルバージョンに対応したヘッダファイルが必要ですが、今回ゲストではそのヘッダファイルが見つからないと言っていると理解しました。

またVirtualBox Guest AdditionsとはVirtualBoxの操作性を向上させるためのモジュールのようです。

  • 2つ目のエラー
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.

上記エラーログはvboxsfが利用できないため、共有フォルダのマウントに失敗していることを示しているようです。
vboxsfはVirtualBox Guest Additionsに含まれているモジュールなので1つ目のエラーに依存していそうです。

5.エラーログの対策及び、ゲスト側に共有フォルダに必要なセットアップをする

エラーログを読むと以下2つの対策が必要と解釈しました。

1. カーネルヘッダをインストール
2. Guest Additionsの再インストール

①カーネルヘッダをゲストOSにインストール

ゲストOSにvagrant ssh して以下コマンドでインストールします

sudo yum install -y kernel-devel-$(uname -r)

②Guest Additionsの再インストール

を確認
ゲストOSで以下コマンドを実行してGuest Additionsをインストールします。

sudo /sbin/rcvboxadd setup

③ホストOSに戻りvagrant reload

vagrant reload vm1

vagrantのログを見ると先ほどのエラーが無くなりました。
ログ中の以下部分が共有フォルダ設定が行われている処理だと思われます。

==> vm1: Mounting shared folders...
    vm1: /vagrant => C:/Users/yuuuk
    vm1: /var/www => C:/Users/yuuuk/test

では最後に設定が正常に有効になっているか確認します。

6.正常性確認

ホストOSでtestファイルを作成してみて、ゲストOSログイン後に同じファイルがゲストOS側にもあれば設定の確認が出来そうです。

①ホスト側で共有フォルダ設定したディレクトリでファイル作成

cd test
vim README

中身は何でもよいので、適当にhogehogeと入力しました。

②ゲストOSでファイル確認

vagrant sshでログイン後に以下を確認

cd /var/www/
ls -l
-rwxrwxrwx  1 vagrant vagrant    9 Aug 21 05:04 README
cat README
hogehoge

ホストで作成したファイルと同じ中身ですね

最後に

以上で終わりです。
私はvimよりvscodeでコードやconfig書く方が好きなので
ホスト側でvscodeでコードを書いて、ゲストOSのlinuxにファイル共有するということも共有フォルダ設定をしていれば可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0