VMの /vagrant を、vagrant ホストのユーザーでマウントしたい
vagrant ホストと同じユーザーを作成し、VMの /vagrant を作成したユーザーの権限でマウントする
ただし vagrant ホストの UID = 1000 の場合は(vagrantユーザーと被るので)何もしない
# -*- mwde: ruby -*-
# vi: set ft=ruby ff=unix expandtab ts=2 sw=2 :
# 環境変数でVM内のUSER/UID/GIDを指定(未定義ならばvagrantコマンド実行ユーザーのUSER/UID/GIDを利用)
VUSER = ENV.fetch('VUSER', `whoami`.chomp)
VUID = ENV.fetch('VUID', `id -u`.chomp)
VGID = ENV.fetch('VGID', `id -g`.chomp)
Vagrant.configure("2") do |config|
config.vm.box = "bento/fedora-39"
# マウントオプションを明示的に指定
config.vm.synced_folder ".", "/vagrant", mount_options: ["uid=#{VUID}", "gid=#{VGID}"]
config.vm.provision "shell", inline: <<-SHELL
set -x
# Vagrantfile 内で定義した変数をスクリプト内で使用
VUSER="#{VUSER}"
VUID="#{VUID}"
VGID="#{VGID}"
# 指定されたUIDとGIDを持つユーザーが存在しなければ作成
if ! getent group "$VGID"; then
groupadd -g "$VGID" "$VUSER"
fi
if ! getent passwd "$VUID"; then
useradd -d "/home/$VUSER" -m -s /bin/bash -u "$VUID" -g "$VGID" "$VUSER"
fi
SHELL
end
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'bento/fedora-39'...
==> default: Matching MAC address for NAT networking...
(略)
==> default: Mounting shared folders...
default: /home/bubka/work/vagrant-files/fedora => /vagrant
==> default: Detected mount owner ID within mount options. (uid: 1001 guestpath: /vagrant)
==> default: Detected mount group ID within mount options. (gid: 1001 guestpath: /vagrant)
==> default: Detected mount owner ID within mount options. (uid: 1001 guestpath: /vagrant)
==> default: Detected mount group ID within mount options. (gid: 1001 guestpath: /vagrant)
==> default: Running provisioner: shell...
default: Running: inline script
default: ++ VUSER=bubka
default: ++ VUID=1001
default: ++ VGID=1001
default: ++ getent group 1001
default: ++ groupadd -g 1001 bubka
default: ++ getent passwd bubka
default: ++ useradd -d /home/bubka -m -s /bin/bash -u 1001 -g 1001 bubka
default: ++ chown -R bubka:bubka /home/bubka
所有者が(vagrantではなくて)bubka になっている
$ vagrant ssh -c 'sudo ls -laF /vagrant'
total 44
drwxrwxr-x. 1 bubka bubka 4096 Jan 6 14:53 ./
dr-xr-xr-x. 19 root root 250 Jan 6 15:28 ../
drwxrwxr-x. 1 bubka bubka 4096 Jan 6 13:35 .vagrant/
lrwxrwxrwx. 1 bubka bubka 27 Jan 6 14:53 Vagrantfile -> Vagrantfile.bento-39-simple
-rw-rw-r--. 1 bubka bubka 4556 Jan 6 14:53 Vagrantfile.bento-39
-rw-rw-r--. 1 bubka bubka 1033 Jan 6 15:27 Vagrantfile.bento-39-simple