我正在尝试构建一个将由 install.sh
提供的 Vagrant box (CentOS) shell 脚本。该脚本将做几件事,其中第一件事是在 /opt
下创建正确的目录结构。这样我的服务就可以安装在那里并做其他事情,比如在那里写日志。
所以我的 Vagrant 项目(到目前为止)包括:
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>
是正确的根密码)。
现在我正试图弄清楚如何在 Vagrant 配置 VM 时让它正常运行/工作。
我的 Vagrant 文件如下所示:
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
”概念扩展到 Vagrant?根据他们的文档,有一个 privileged
我可能可以使用的选项,但它设置为 true
反正默认情况下。
但是他们的文档中没有任何地方解释如何/在何处提供 sudo
应该使用的密码(至少从目前为止我能找到的密码来看)。
所以我问:
- 我如何提供
sudo
Vagrant VM 的 shell provisioner 安装脚本的密码?和 - 我在哪里可以找到
sudo
的内容?即使考虑到我正在尝试使用的基本 Vagrant 盒子,密码也是如此?
最佳答案
事实证明(对于几乎所有 Vagrant boxes)vagrant
用户列在 /etc/sudoers
中,ALL= (ALL) NOPASSWD:ALL
权限,指示 Linux 不永远向该用户询问“sudo 密码”。
因此,您无需为您的特权
用户提供 sudo 密码。
关于linux - 如何/在何处为 Vagrant shell 供应商提供 sudo 密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39755522/