2016-09-28 71 views
1

我正在嘗試構建一個將由install.sh shell腳本進行配置的Vagrant框(CentOS)。這個腳本會做幾件事情,其中​​第一件事涉及到在/opt下創建正確的目錄結構,以便我的服務可以安裝在那裏並做其他事情,比如在那裏寫日誌。如何/何處爲Vagrant shell provisioner提供sudo密碼?

所以我流浪的項目(到目前爲止)包括:

my-app-vagrant/ 
    Vagrantfile 
    install.sh 

install.sh樣子:

mkdir /opt/myapp 
mkdir /opt/myapp/bin  # Where we will install binary to (later in this script) 
mkdir /opt/myapp/logs  # Where the binary will write logs to 

現在二進制文件沒有需要提升權限才能運行(它通過命令行參數在哪裏寫日誌來配置)。然而我只是想要它住在/opt上面的目錄結構,至少對於這個特定的機器。

問題是/optroot所有。這意味着我需要運行這些mkdirssudo,爲腳本提供密碼sudo,然後調整目錄權限,以便在應用程序運行時,它有權運行並將日誌寫入到我的預期目標(同樣,它是/opt/myapp/logs)。所以我調整install.sh看起來像這樣:

mkdir /opt/myapp 
mkdir /opt/myapp/bin 
mkdir /opt/myapp/logs 

chmod -R 777 /opt/myapp  # Now when the app runs as a normal non-privileged user, we can run + write logs 

而且我知道,我可以通過echo <rootPswd> | sudo -S sh install.sh到腳本提供一個密碼(其中<rootPswd>是正確的root密碼)。

現在我試圖找出當Vagrant配置VM時如何正確運行/正常工作。

我流浪文件看起來像:

Vagrant.configure(2) do |config| 
    config.vm.provision "shell", path: "install.sh" 

    config.vm.box = "centos7" 
    config.vm.box_url = "https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box" 

    config.vm.network "private_network", ip: "10.0.1.2" 

    config.vm.provider "virtualbox" do |vb| 
     vb.memory = "2048" 
    end 
end 

但是我卡是:如何擴展整個「echo <rootPswd> | sudo -S sh install.sh」 -concept給流浪?根據他們的文檔,我可能會使用privileged選項,但默認情況下默認設置爲true

但是在他們的文檔中沒有任何地方可以解釋如何/在哪裏提供應該使用的密碼sudo(至少從我目前能夠找到的密碼中)。

那麼請問:

  • 如何提供sudo密碼作爲遊民虛擬機的外殼供應方的安裝腳本?;和
  • 哪裏可以找到什麼sudo密碼即使,給我基地的Vagrant框,我試圖使用?

回答

1

原來,(幾乎所有流浪箱)的vagrant用戶在/etc/sudoers列出ALL=(ALL) NOPASSWD:ALL權限,指示Linux來詢問該用戶的「sudo的密碼」,直到永遠。

因此,您不需要爲privileged用戶提供sudo密碼。

相關問題