-
Notifications
You must be signed in to change notification settings - Fork 4
Create vagrant box for RescueMe
This procedure describes the creation of a Vagrant box for use with VirtualBox. Follow it precisely as described. There are many pitfalls that will make the box useless or difficult to use.
Ensure that both VirtualBox and Vagrant is installed on your machine.
We are currently using Ubuntu 12.04 LTS in production. Developers should do the same for stability reasons.
- Download server install CD (*.iso file)
- Create a new Virtual Machine with 512MB ram and 100GB Disk with
dynamically allocated differencing storage
- Give it the name
rescueme-precise64
- Enable network adapter 1 and attach it to
NAT
(Vagrant uses this to connect the first time). - Attach server install CD
Boot the machine an follow the instructions. Select following values when prompted:
- Default user:
vagrant
with passwordvagrant
(convention) - Keyboard:
English (US)
- Locale:
US
- Timezone:
London
(GMT)
Select following additional software when promped:
- OpenSSH
- LAMP Server, MySQL root password:
vagrant
Set root password to vagrant
(convention) with:
sudo passwd
Ensure admin group exists with:
groupadd -r admin
Add user vagrant
to admin group with
usermod -a -G admin vagrant
Enable sudo
without password for user vagrant
(convension)
- Open
/etc/sudoers
with:sudo visudo
- Add following defaults if not exist:
Default env_reset
,Defaults exempt_group=admin
- Change line
admin ALL=(ALL)
toadmin ALL=(ALL) NOPASSWD:ALL
- Save changes with
CTRL+X
andEnter
Prepare to install Guest Additions
sudo apt-get install linux-headers-generic build-essential dkms
Install Guest Additions (required to make shared folders work properly)
- Goto "Devices" > "Install Guest Additions" in the virtual machine window.
- Mount the CD-ROM with
sudo mount /dev/cdrom /media/cdrom
- Install guest additions with
sudo sh /media/cdrom/VBoxLinuxAdditions.run
- Implement workaround for bug in VirtualBox 4.3.10 which prevents shared folders to work
sudo ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions
Enable insecure key-based authentication for SSH (convention)
mkdir ~/.ssh
chmod 0700 ~/.ssh
cd ~/.ssh
wget --no-check-certificate "https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub"
cat vagrant.pub >> authorized_keys
chmod 0600 authorized_keys
Tweek sshd
to prevent DNS resolution (speed up logins)
sudo echo "UseDNS no" >> /etc/ssh/sshd_config
- Add
-u0
toSSH_OPTS
in /etc/default/ssh
Disable grub startup menu (speed up logins) by setting
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0
in /etc/default/grub
and apply changes with
sudo update-grub
Add NFS client with (faster)
sudo apt-get -y install nfs-common
Implement workarounds for known networking problems
- Add following lines to script
/etc/rc.local
beforeexit 0
# Make sure eth0 is working. This works around Vagrant issue #391
dhclient eth0
Remove persistent rules
sudo rm /etc/udev/rules.d/70-persistent-net.rules
sudo mkdir /etc/udev/rules.d/70-persistent-net.rules
sudo rm /lib/udev/rules.d/75-persistent-net-generator.rules
Remove leftover leases (must be performed after every boot)
sudo rm -rf /dev/.udev/
sudo rm -rf /var/lib/dhcp/*
Add RescueMe dependencies
sudo apt-get -y install php5-cli php5-curl php5-intl php-gettext
Edit PHP settings
- open
/etc/php5/apache2/php.ini
and enter
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; All runtime environments
;;;;;;;;;;;;;;;;;;;;;;;;;;;
short_open_tag = 1
date.timezone = <select one from official list>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Development runtime environment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
phar.readonly = 0
; RescueMe build scripts requires 'phar://' includes to be enabled if suhosin is enabled
suhosin.executor.include.whitelist = phar
Add XDebug support
sudo apt-get -y install php5-xdebug
- open
/etc/php5/conf.d/xdebug.ini
and append
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_connect_back=on
xdebug.remote_port=9000
xdebug.remote_autostart=on
xdebug.idekey=rescue-me
Enable Apache modules
sudo a2enmod rewrite
Configure Apache2
sudo nano /etc/apache2/conf.d/fqdn
- insert
ServerName localhost
Configure RescueMe site
sudo nano /etc/apache2/sites-available/rescueme
- insert
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName rescueme
DocumentRoot /var/www/rescueme
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/rescueme>
Options Indexes FollowSymLinks MultiViews
AllowOverride Options
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/rescueme-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/rescueme-access.log combined
</VirtualHost>
Install development tool myphpadmin
sudo apt-get install phpmyadmin
Follow the instructions. Enter vagrant
for all passwords.
Compress current image size to save space in the final image (takes several minutes)
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
The next step is to package the virtual machine into a Vagrant box
vagrant package --base rescueme-precise64
which will output package.box
in working directory.
# Import box
vagrant box add vagrant-precise64-rescueme /path/to/package.box
# Create test project
mkdir -p ~/vagrant-precise64-rescueme-test
cd ~/vagrant-precise64-rescueme-test
vagrant init vagrant-precise64-rescueme
# Start server
vagrant up
# Login server
vagrant ssh
# Remove project
vagrant destroy
rm -rf .vagrant Vagrantfile
vagrant box remove vagrant-precise64-rescueme
which should be performed without errors of any kind.