2016-09-28 36 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密码。

相关问题