#author("2025-01-07T00:31:21+09:00","default:nobuoki","nobuoki") #author("2025-01-07T00:33:33+09:00","default:nobuoki","nobuoki") * やりたいこと [#n45c9d0b] VMの /vagrant を、vagrant ホストのユーザーでマウントしたい * 方針 [#g7aee6b0] vagrant ホストと同じユーザーを作成し、VMの /vagrant を作成したユーザーの権限でマウントする ただし vagrant ホストの UID = 1000 の場合は(vagrantユーザーと被るので)何もしない * Vagrantfile [#i8ab0519] #prism(bash){{{ # -*- 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 したところ [#b6edcbd3] #prism(bash){{{ $ 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 の状態 [#xc694020] 所有者が(vagrantではなくて)bubka になっている #prism(bash){{{ $ 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 }}}