我正在嘗試構建一個將由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
上面的目錄結構,至少對於這個特定的機器。
問題是/opt
歸root
所有。這意味着我需要運行這些mkdirs
與sudo
,爲腳本提供密碼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框,我試圖使用?