$theTitle=wp_title(" - ", false); if($theTitle != "") { ?> } else { ?> } ?>
by Andrew Johnstone
Vagrant is simply a wrapper around Virtualbox headless that allows for provisioning virtual machines with support for puppet, chef-solo, chef, and bash. This allows you to automate the deployment and sandboxing of development sites. Additional base box images can be found at vagrantbox.es.
apt-get install -y ruby1.9.1 ruby1.9.1-dev ln -svf /usr/bin/ruby1.9.1 /etc/alternatives/ruby gem install vagrant vagrant box add base http://puppetlabs.s3.amazonaws.com/pub/squeeze64.box mkdir ~/vagrant/test && ~/vagrant/test; vagrant init base
Change the config for the virtual box instance to be bootstrapped with a bash script.
echo " Vagrant::Config.run do |config| config.vm.box = "base" config.vm.define :web do |web_config| web_config.vm.box = "base" web_config.vm.forward_port("http", 80, 28080) web_config.vm.provision :shell, :path => "slack.sh web" end end " > Vagrantfile
On a remote/local server configure slack, hit enter on prompts to use defaults for ssh-keygen and use without a passphrase.
useradd -m slack ssh-keygen -f~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub
Replace the contents of the RSA file in the following slack.sh file in place of <place_rsa_key_contents_here>. Additionally change the ~/.ssh/config ip in Hostname to the relevant ip to where slack is enabled.
#!/bin/bash echo "export DEBIAN_FRONTEND=noninteractive" > ~/base.install.sh echo "apt-get -q update" >> ~/base.install.sh #echo "apt-get -q -y upgrade" >> ~/base.install.sh echo "apt-get -q -y install slack locales-all" >> ~/base.install.sh echo "mkdir -p ~/.ssh;" >> ~/base.install.sh echo " cat > ~/.ssh/slack.id_rsa < <-EOD -----BEGIN RSA PRIVATE KEY----- <place_rsa_key_contents_here> -----END RSA PRIVATE KEY----- EOD " >> ~/base.install.sh echo "chmod 0600 ~/.ssh/slack.id_rsa" >> ~/base.install.sh echo " cat > ~/.ssh/config < <-EOD Host slack HostName 192.168.0.1 User slack Port 22 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile ~/.ssh/slack.id_rsa IdentitiesOnly yes EOD " >> ~/base.install.sh echo "Installing"; sudo -i chmod +x ~/base.install.sh sudo -i ~/base.install.sh | tee install.log slack --verbose --source slack:~/project web
At this point you have enough to start the bootstrap and configure slack as you please without being prompted.
The files within your slack install
. |-- etc | `-- roles.conf `-- roles `-- web `-- files | |-- etc | | |-- apache2 | | | |-- sites-available | | | | |-- project.com `-- scripts |-- postinstall |-- preinstall
slack@bb1:~/project$ cat etc/roles.conf debian: web slack@bb1:~/project$ cat roles/web/scripts/preinstall #!/bin/bash echo 'Starting installation' | wall # install packages apt-get -q -y --force-yes install subversion git-core apache2 memcached exim4 \ php-codesniffer php-doc php5-imagick php5-memcache libapache2-mod-php5 \ php-pear php5-cli php5-common php5-curl php5-dbg php5-dev php5-gd php5-gmp \ php5-imap php5-mcrypt php5-mhash php5-mysql php5-sqlite php5-tidy php5-xmlrpc \ php5-xsl php5-xdebug php-apc php5-memcached libelastica-php5 php5-zmq \ munin-node munin-plugins-extra mon tripwire pwgen INSTALLER_LOG=/var/log/non-interactive-installer.log installnoninteractive(){ sudo bash -c "DEBIAN_FRONTEND=noninteractive aptitude install -q -y $* >> $INSTALLER_LOG" } installnoninteractive mysql-server # Alternatively you can set the mysql password with debconf-set-selections MYSQL_PASS=$(pwgen -s 12 1); mysql -uroot -e "UPDATE mysql.user SET password=PASSWORD('${MYSQL_PASS}') WHERE user='root'; FLUSH PRIVILEGES;"; echo "MySQL Password set to '${MYSQL_PASS}'. Remember to delete ~/.mysql.passwd" | tee ~/.mysql.passwd; slack@bb1:~/project$ cat roles/web/scripts/postinstall #!/bin/bash echo 'Starting post installation' | wall # force hostname hostname -F /etc/hostname a2ensite project.com # disable sites a2dissite default a2dissite default-ssl # restart apache /etc/init.d/apache2 restart
vagrant up vagrant ssh
More examples of installing MySQL unattended can be found at Installing Java & MySQL – unattended/non-interactive installation
I have been a developer for roughly 10 years and have worked with an extensive range of technologies. Whilst working for relatively small companies, I have worked with all aspects of the development life cycle, which has given me a broad and in-depth experience.