Ale*_*lex 40 linux apache vagrant
我的Vagrant盒子是从基础linux(科学linux)构建的,在配置期间(使用shell脚本)安装了Apache.
我最近将Vagrant文件(v2)更改为:
config.vm.synced_folder "public", "/var/www/sites.d/example.com",
:owner => "apache", :group => "apache"
Run Code Online (Sandbox Code Playgroud)
如果已经配置了盒子并且刚刚重新启动,那么哪个效果很好.
现在,在vagrant destroy && vagrant up我收到错误之后:
mount -t vboxsf -o uid=`id -u apache`,gid=`id -g apache`
/var/www/sites.d/example.com /var/www/sites.d/example.com
id: apache: User does not exist
Run Code Online (Sandbox Code Playgroud)
这很清楚 - 在初始运行期间,还没有安装apache.
一个丑陋的解决方法当然是使用已synced_folder注释掉的基本配置,对其进行注释然后重新启动.
有没有什么干净的技巧来解决这个问题?特别是在vagrant up总是没有中断的情况下运行,即使盒子是新的.
Sea*_*ton 26
如果您可以修复uid/gid值,可以在mount命令中使用它们 - 它们不必与现有用户/组相关
我这样做是为了一个用户,后来由puppet使用固定(匹配)的uid/gid值创建
config.vm.synced_folder "foo", "/var/www/foo",
id: "foo", :mount_options => ["uid=510,gid=510"]
Run Code Online (Sandbox Code Playgroud)
小智 9
这就是我做的:
config.vm.synced_folder "./MyApp", "/opt/MyApp", owner: 10002, group: 1007, create: true
config.vm.provision :shell do |shell|
shell.inline = "groupadd -g 1007 myapp;
useradd -c 'MyApp User' -d /opt/MyApp -g myapp -m -u 10002 myapp;"
end
Run Code Online (Sandbox Code Playgroud)
而不是使用用户名和组(作为文本)使用uid和gid.然后使用这些ID创建组和用户.这是因为错误实际上是:
mount -t vboxsf -o uid=`id -u myapp`,gid=`getent group myapp | cut -d: -f3` opt_MyApp /opt/MyApp
...
id: myapp: No such user
Run Code Online (Sandbox Code Playgroud)
id命令无法识别用户.因此,切换到uid和gid命令id将不会被vagrant使用.
我用这种方法得到的唯一警告是用户主目录(/ opt/MyApp)已经存在,但我可以使用它,或者您可以更改useradd命令以忽略主目录(如果已存在).
在此之前,我使用的解决方法是:
vagrant up; vagrant provision; vagrant reload
Run Code Online (Sandbox Code Playgroud)
但是,它既不干净又不干净.
提出的解决方案之一是:
将目录的权限设置为777,将文件设置为666
Run Code Online (Sandbox Code Playgroud)config.vm.synced_folder "/Users/ryansechrest/Projects/Sites", "/var/www/domains", mount_options: ["dmode=777", "fmode=666"]
| 归档时间: |
|
| 查看次数: |
8489 次 |
| 最近记录: |