我正在尝试构建一个将由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框,我试图使用?