2013-03-22 149 views
2

我有一個流浪環境,我非常想使用NFS在端口80上啓動。前者是因爲它是Drupal和非標準端口引起的一點胃灼熱,而後者純粹是爲了表現。要做到這一點,據我所知,我需要使用sudo。沒問題,sudo vagrant up是。流浪漢,NFS,端口80和sudo

我遇到的問題是,該應用程序生成文件,可能是因爲虛擬機在sudo下站起來,這些文件在主機系統(OS X)上擁有root,所以當應用程序試圖寫入文件到服務器,權限被拒絕。

我已經改變了我的流浪文件,將整個項目目錄設置爲777。剛剛披露的緣故,這裏是從我的Vagrantfile相關(和非標)片段:

config.vm.network :hostonly, "192.168.33.10" 
config.vm.forward_port 80, 80 
# config.vm.share_folder("v-root", "/vagrant", ".", :nfs => (RUBY_PLATFORM =~ /mingw32/).nil?, :extra => 'dmode=777,fmode=777') 
config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777') 
config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] 
Vagrant::Config.run do |config| 
    config.vm.provision :shell, :path => "provision.vm.sh" 
end 

這是我看到的情況:

  • 當我從一個乾淨的克隆啓動存儲庫,沒有問題。好極了。
    • 但是我注意到,從虛擬機本身查看時,/vagrant的內容沒有被賦予完整的權限(777)。這些變化之前就是這種情況。
  • 當我啓動停止虛擬機後...
    • 生成的文件不能被寫入。
    • /vagrant中的文件(再次,從VM內查看時)歸dialout用戶所有。這似乎是一個NFS的東西,所以沒問題,只要我能得到第一個項目的工作。

UPDATE

看起來這個問題可能是我的NFS是如何工作的認識。我需要嘗試解決這個問題,但如果我只是刪除NFS組件(現在評論&在上面討論的代碼中被取代),那麼事情似乎更有用。仍然很想知道其他人是否可以處理這件事。

+0

值得注意的是,當你爲nfs設置一個hostonly的網絡時,你可以在該ip上的端口80上實際訪問該機器,而不需要sudo vagrant。所以192.168.33.10:80應該工作。 – timmow 2013-08-20 22:28:42

+0

雖然略有不相關,會播種你的流浪者實例與幫助嗎?它們具有有用的默認值,一旦生成就很容易配置。 – T0xicCode 2014-03-10 18:02:53

回答

1

而不是做sudo vagrant up的 - 這是不理想 - 我做了以下內容:

if Vagrant::Util::Platform.windows? 
    config.vm.network :forwarded_port, host: 80, guest: 8080 
elsif Vagrant::Util::Platform.darwin? 
    config.vm.network :forwarded_port, host: 8080, guest: 80 
    config.vm.network :forwarded_port, host: 8443, guest: 443 
    config.trigger.after [:provision, :up, :reload] do 
     puts " ==> Sudo Password (to forward ports) " 
     system('echo " 
    rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080 
    rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 443 -> 127.0.0.1 port 8443 
    " | sudo pfctl -f - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080, 443 -> 8443"') 
    end 
else 
    config.vm.network :forwarded_port, host: 8080, guest: 80 
    config.vm.network :forwarded_port, host: 8443, guest: 443 
    puts " ==> Sudo Password (to forward ports) " 
    system("sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to me 80; 
    sudo ipfw add 101 fwd 127.0.0.1,8443 tcp from any to me 443") 
end 

if Vagrant::Util::Platform.darwin? 
    config.trigger.after [:halt, :destroy] do 
     system("sudo pfctl -f /etc/pf.conf > /dev/null 2>&1; echo '==> Removing Port Forwarding'") 
    end 
end 

(那而linux節比OS X少整齊(「達爾文」)節,這刪除正在轉發的端口vagrant halt

這樣做是在主機上設置端口8080(和8443)在guest虛擬機上轉發到80,然後使用sudo將主機上的端口80轉發到主機上的端口8080。

這意味着只有端口80轉發是以root身份完成的,而不是整個流浪過程,並且通常會讓我更開心。

注意:如果Skype將自己綁定到端口80和443(默認情況下會執行此操作),桌面計算機上仍會失敗。