流浪汉新手,请帮忙!
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 /vagrant
和vagrant ssh
行不起作用,不确定原因。当我/home/vagrant
进入机器时,我被带到根目录(/vagrant
)。我想从{{1}}文件夹开始。
答案 0 :(得分:2)
Vagrant's shell provisioner与privileged = 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