#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
}}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS