New to vagrant, please help!
Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "laravel/homestead"
config.vm.provision "shell", path: "vm-setup/provision.sh"
end
vm-setup/provision.sh
# 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
provision.sh file runs fine. When I run "vagrant provision" it updates apt-get, installs tree and even changes the shell to ZSH.
But sudo echo 'alias cls="clear"' >> ~/.bash_aliases
and cd /vagrant
lines do not work, not sure why. When I vagrant ssh
into the machine, I am being taken to root directory (/home/vagrant
). I would like to start in /vagrant
folder.
Vagrant's shell provisioner by default runs with privileged = true
:
privileged (boolean) - Specifies whether to execute the shell script as a privileged user or not (sudo). By default this is "true".
When you perform vagrant ssh
you login to a VM as vagrant
user.
That's why:
1.
# Create .bash_aliases sudo echo 'alias cls="clear"' >> ~/.bash_aliases
It writes to root's
~/.bash_aliases and it is really there:
root@vagrant:~# id
uid=0(root) gid=0(root) groups=0(root)
root@vagrant:~# cat .bash_aliases
alias cls="clear"
Solution: write to vagrant's
home folder:
# Create .bash_aliases
echo 'alias cls="clear"' >> /home/vagrant/.bash_aliases
chown vagrant:vagrant /home/vagrant/.bash_aliases
2.
cd /vagrant
This means that folder was changed in provision script, nothing else.
Solution: add this statement to vagrant's
.bash_aliases
as well:
echo 'cd vagrant' >> /home/vagrant/.bash_aliases
Your final vm-setup/provision.sh
is:
# Update apt-get
apt-get -y update
# Install tree
apt-get install tree
# Create .bash_aliases
echo 'alias cls="clear"' >> /home/vagrant/.bash_aliases
echo 'cd /vagrant' >> /home/vagrant/.bash_aliases
chown vagrant:vagrant /home/vagrant/.bash_aliases
chsh -s $(which zsh) vagrant