2014-02-10 12 views
9

我正在使用Vagrant通過使用shell配置部署包含多個已安裝軟件包的虛擬機。其中一個軟件包需要更新正確使用的路徑,這是我無法做到的。使用shell配置更新Vagrant中的路徑

這些都是我Vagrantfile的內容:

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 
VAGRANTFILE_API_VERSION = "2" 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 

config.vm.box = "precise64" 
config.vm.box_url = "http://files.vagrantup.com/precise64.box" 

#config.vm.network "forwarded_port", guest: 8888, host: 8888 

config.ssh.forward_agent = true 
config.vm.provision "shell", path: "provision.sh" 

end 

這些下面的事情我想:

  1. 創建一個單獨的.bashrc和.profile文件的文件用下面的命令(在附加文件結尾)並將它們複製到主目錄中:

    export PATH="/usr/local/x86_64/bin:$PATH" 
    
  2. 嘗試寫到.profile文件:

    echo 'export PATH="/usr/local/x86_64/bin:$PATH"' >> .profile 
    
  3. 剛剛嘗試開通期間出口路徑(即如在provision.sh一行代碼):

    export PATH="/usr/local/x86_64/bin:$PATH" 
    

vagrant up命令完成,則此命令不啓用路徑的以下vagrant ssh的變化。

回答

4

的問題是用下面的添加到基於此postprovision.sh文件來解決:

echo PATH $PATH 
[ -f ~/.profile ] || touch ~/.profile 
[ -f ~/.bash_profile ] || touch ~/.bash_profile 
grep 'PATH=/usr/local/x86_64/bin' ~/.profile || echo 'export PATH=/usr/local/x86_64/bin:$PATH' | tee -a ~/.profile 
grep 'PATH=/usr/local/x86_64/bin' ~/.bash_profile || echo 'export PATH=/usr/local/x86_64/bin:$PATH' | tee -a ~/.bash_profile 
. ~/.profile 
. ~/.bash_profile 
echo PATH $PATH 

這適用於精確的64中的所有的命令應該是一條線。

+0

我有一個非常類似的問題。但在我的情況下,我不得不使用你的腳本作爲流浪用戶,而不是根。由於vagrant在提供期間默認爲root,因此我必須添加特權標誌:'config.vm.provision:shell,path:'android_update.sh',priviliged:false'。 PS:可以使用多個shell腳本提供程序。 – 2014-07-15 04:05:25

0

示例使用防爆/ vi編輯器:

ex +'[email protected][email protected]\rexport PATH=/var/lib/vendor/bin:[email protected]' -cwq /etc/bash.bashrc 

其中追加:

export PATH=/var/lib/vendor/bin:$PATH 

到全球/etc/bash.bashrc文件(因此它適用於使用bash外殼的所有用戶,或者使用/etc/profile用於所有Bourne貝殼)。

或者使用簡單cat,例如:

cat >> ~/.bashrc <<EOF 
export PATH=~/.composer/vendor/bin:\$PATH 
EOF 

如果需要訪問新工具的直線距離,那麼你需要source文件。

如果您使用composer,你可以考慮在composer.json指定要求在安裝二進制文件,看到一些examples here,所以在這種情況下,你不必擔心配置PATH變量。


如果您使用Ansible playbooks,你可以嘗試使用Files Modules與陽明文件以下規則:

- name: Update bashrc to add new PATH entry: 
    dest=/home/vagrant/.bashrc 
    line="export PATH='/usr/local/x86_64/bin:$PATH'" 
    regexp="^export PATH" 
    owner=vagrant 
    state=present 
    insertafter=EOF 
    create=True