Я новичок в Vagrant и Puppet, я создал Base Box с Debian Squeeze плюс автономный Puppet, используя инструкции по установке Puppet с пакетами Puppetlabs.
Кажется, что сам ящик успешно импортируется, но как только я приступаю к его настройке, я получаю ошибки, которые, похоже, связаны с общим ресурсом nfs на хосте. 1000 - это uid пользователя Vagrant на vm.
Ошибка:
Error: Failed to set owner to '1000': Operation not permitted - /vagrant/www/index.php
Error: /Stage[main]/Perchdemo::Sites::Create/File[/vagrant/www/index.php]/owner: change from 501 to vagrant failed: Failed to set owner to '1000': Operation not permitted - /vagrant/www/index.php
Это происходит, когда я копирую файл index.php в share / vagrant / www файловой системы хоста с помощью Puppet. Я использовал этот модуль Puppet при автономной установке Puppet на виртуальной машине, где файлы были размещены в файловой системе виртуальной машины, хотя в идеале я бы хотел, чтобы они находились в общей папке nfs.
Отредактировано с немного дополнительной информацией. Изначально ошибка возникает, когда я создаю виртуальный хост с помощью модуля apache puppetlabs. Однако, какой бы пользователь я ни пытался создать, он терпит неудачу с той же ошибкой.
Мой VagrantFile для этого выглядит следующим образом.
Vagrant::Config.run do |config|
config.vm.box = "squeeze64"
config.vm.network :hostonly, "10.1.0.52"
config.nfs.map_uid = :auto
config.nfs.map_gid = :auto
config.vm.forward_port 80, 8080
config.vm.share_folder("v-web", "/vagrant/www", "./www", :nfs => true)
config.vm.provision :shell, :inline => "echo \"Europe/London\" | sudo tee /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata"
config.vm.provision :shell, :inline => "apt-get update --fix-missing"
config.vm.provision :shell, :inline => "apt-get upgrade"
config.vm.provision :puppet do |puppet|
puppet.facter = { "fqdn" => "perchtutorial.eoms"}
puppet.manifests_path = "puppet/manifests"
puppet.manifest_file = "perchtutorial.pp"
puppet.module_path = "puppet/modules"
end
end
Чтобы избавиться от этой проблемы с разрешениями, вот что я добавил в свой Vagrantfile
:
if (/darwin/ =~ RUBY_PLATFORM) != nil
config.vm.synced_folder ".", "/host/path/to/shared/folder", nfs: true, :bsd__nfs_options => ["-maproot=0:0"]
else
config.vm.synced_folder ".", "/host/path/to/shared/folder", nfs: true, :linux__nfs_options => ["no_root_squash"]
end
Он адаптирует параметры NFS в соответствии с ОС вашего хоста (OSX или Linux).
Ответ mbarthelemy помог мне на полпути, но, в конце концов, мне пришлось немного подправить:
В моем VagrantFile я добавил это в сопоставление, чтобы заставить его работать:
:linux__nfs_options => ["no_root_squash"], :map_uid => 0, :map_gid => 0
Это может быть вызвано "сжатием корня" на сервере NFS.
Когда пользователь root на клиентском компьютере NFS пытается манипулировать файлами в экспортированной файловой системе NFS, он делает это с разрешениями непривилегированного пользователя (обычно никто или nfsnobody). В этом случае, если я правильно читаю, возможно, Puppet (работающий от имени пользователя root) не может управлять файлами на сервере NFS, потому что его разрешения привязаны к этому непривилегированному пользователю.
Чтобы удалить корневое сжатие, отредактируйте / etc / exports на сервере NFS и добавьте no_root_squash
к параметрам экспортированной файловой системы, затем запустите exportfs -av
для повторного экспорта файловых систем.
Пример строки / etc / exports:
/srv 192.168.0.0/24 (rw,no_root_squash)