Vagrant - 供应脚本不更改目录

时间:2017-12-29 02:31:38

标签: shell vagrant provisioning

流浪汉新手,请帮忙!

Vagrantfile

# Update apt-get
apt-get -y update

# Install tree
apt-get install tree

# Create .bash_aliases
sudo echo 'alias cls="clear"' >> ~/.bash_aliases

sudo chsh -s $(which zsh) vagrant

cd /vagrant

VM-建立/ provision.sh

sudo echo 'alias cls="clear"' >> ~/.bash_aliases

provision.sh文件运行正常。当我运行“vagrant provision”时,它会更新apt-get,安装树甚至将shell更改为ZSH。

cd /vagrantvagrant ssh行不起作用,不确定原因。当我/home/vagrant进入机器时,我被带到根目录(/vagrant)。我想从{{1}}文件夹开始。

2 个答案:

答案 0 :(得分:2)

默认情况下,

Vagrant's shell provisionerprivileged = true一起运行:

  

privileged(boolean) - 指定是否执行shell脚本   作为特权用户与否(sudo)。默认情况下,这是“true”。

执行vagrant ssh时,您以[{1}}用户身份登录虚拟机。

这就是原因:

<强> 1

vagrant

它写入# Create .bash_aliases sudo echo 'alias cls="clear"' >> ~/.bash_aliases 〜/ .bash_aliases,它确实在那里:

root's

解决方案:写入root@vagrant:~# id uid=0(root) gid=0(root) groups=0(root) root@vagrant:~# cat .bash_aliases alias cls="clear" 主文件夹:

vagrant's

<强> 2

# Create .bash_aliases
echo 'alias cls="clear"' >> /home/vagrant/.bash_aliases
chown vagrant:vagrant /home/vagrant/.bash_aliases

这意味着在配置脚本中更改了文件夹,没有别的。

解决方案:此语句也添加到cd /vagrant vagrant's

.bash_aliases

您的最终echo 'cd vagrant' >> /home/vagrant/.bash_aliases 是:

vm-setup/provision.sh

答案 1 :(得分:0)

即使不是这样,也只是为了完成:

在尝试使用Vagrant作为安装脚本的测试工具时,我经历了很多次挣扎,而现在我才意识到潜在的原因:

使用此Vagrantfile语句:

config.vm.provision "shell", path: "myScript.sh"

myScript.sh与虚拟机标准输入内联。从某种意义上说,这是很好的,您不需要从虚拟机内部(通常通过/vagrant路径)访问实际脚本。

...但是它带有一个缺点,即任何相对路径都无法正常工作。

  

当然:我们可以根据/vagrant将其调整为绝对路径。但这需要修改我们要测试的脚本。

因此,在这种情况下(我认为无论如何我们都不会禁用/vagrant共享),将“ inline:”选项与“ machine-internal”路径一起使用是一个更好的解决方案:

config.vm.provision "shell", inline: "/vagrant/myScript.sh"

...这将内联此语句,而不是文件的内容,并且相对路径(甚至是“基于脚本路径的”路径,例如$(dirname "${0}")/relative/path)都将正常运行

此外,如果要测试的安装脚本打算由非特权用户执行(例如,如果要设置某些用户配置,则我们希望在vagrant ssh之后才能工作)-对于无业游民的用户-),最好添加@Nickolay指出的privileged: false选项:

config.vm.provision "shell", inline: "/vagrant/myScript.sh", privileged: false