Skip to content

Instantly share code, notes, and snippets.

@rogerleite
Forked from evansd/postinstall.sh
Created March 21, 2012 17:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rogerleite/2150082 to your computer and use it in GitHub Desktop.
Save rogerleite/2150082 to your computer and use it in GitHub Desktop.
postinstall sript from vagrant example box (having it somewhere web-accessible is easiest way to get it on to newly created VMs)
#!/usr/bin/env bash
# Apt-install various things necessary for Ruby, guest additions,
# etc., and remove optional things to trim down the machine.
apt_get_things()
{
apt-get -y update
apt-get -y remove apparmor
apt-get -y install linux-headers-$(uname -r) build-essential
apt-get -y install zlib1g zlib1g-dev libxml2 libxml2-dev libxslt-dev libssl-dev openssl libreadline5-dev
apt-get clean
}
# Remove this file to avoid dhclient issues with networking
dhclient_things()
{
rm -f /etc/udev/rules.d/70-persistent-net.rules
}
# Setup sudo to allow no-password sudo for "admin". Additionally,
# make "admin" an exempt group so that the PATH is inherited.
admin_secrets()
{
cp /etc/sudoers /etc/sudoers.orig
sed -i -e '/Defaults\s\+env_reset/a Defaults\texempt_group=admin' /etc/sudoers
sed -i -e 's/%admin ALL=(ALL) ALL/%admin ALL=NOPASSWD:ALL/g' /etc/sudoers
}
# Install NFS client
nfs_common()
{
apt-get -y install nfs-common
}
install_ruby_and_rubygems()
{
# Install Ruby from source in /opt so that users of Vagrant
# can install their own Rubies using packages or however.
# We must install the 1.8.x series since Puppet doesn't support
# Ruby 1.9 yet.
wget http://ftp.ruby-lang.org/pub/ruby/ruby-1.8.7-p334.tar.gz
tar xvzf ruby-1.8.7-p334.tar.gz
cd ruby-1.8.7-p334
./configure --prefix=/opt/ruby
make
make install
cd ..
rm -rf ruby-1.8.7-p334*
# Install RubyGems 1.7.2
wget http://production.cf.rubygems.org/rubygems/rubygems-1.7.2.tgz
tar xzf rubygems-1.7.2.tgz
cd rubygems-1.7.2
/opt/ruby/bin/ruby setup.rb
cd ..
rm -rf rubygems-1.7.2*
# Add /opt/ruby/bin to the global path as the last resort so
# Ruby, RubyGems, and Chef/Puppet are visible
echo 'PATH=$PATH:/opt/ruby/bin/'> /etc/profile.d/vagrantruby.sh
}
# Install Chef & Puppet
install_chef_and_puppet()
{
/opt/ruby/bin/gem install chef --no-ri --no-rdoc
/opt/ruby/bin/gem install puppet --no-ri --no-rdoc
}
# Install insecure Vagrant SSH keys
install_insecure_vagrant_ssh_keys()
{
mkdir /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
cd /home/vagrant/.ssh
wget --no-check-certificate 'http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub' -O authorized_keys
chown -R vagrant /home/vagrant/.ssh
}
# Install VirtualBox guest additions
install_vbox_guest_additions()
{
VBOX_VERSION=$(cat /home/vagrant/.vbox_version)
cd /tmp
wget http://download.virtualbox.org/virtualbox/$VBOX_VERSION/VBoxGuestAdditions_$VBOX_VERSION.iso
mount -o loop VBoxGuestAdditions_$VBOX_VERSION.iso /mnt
sh /mnt/VBoxLinuxAdditions.run
umount /mnt
rm VBoxGuestAdditions_$VBOX_VERSION.iso
}
clean_apt_get_things()
{
# Remove items used for building, since they aren't needed anymore
apt-get -y remove linux-headers-$(uname -r) build-essential
apt-get -y autoremove
}
vm_misc()
{
# Zero free space to aid VM compression
dd if=/dev/zero of=/EMPTY bs=1M
rm -f /EMPTY
# Removing leftover leases and persistent rules
echo "cleaning up dhcp leases"
rm /var/lib/dhcp3/*
# Make sure Udev doesn't block our network
# http://6.ptmc.org/?p=164
echo "cleaning up udev rules"
rm /etc/udev/rules.d/70-persistent-net.rules
mkdir /etc/udev/rules.d/70-persistent-net.rules
rm -rf /dev/.udev/
rm /lib/udev/rules.d/75-persistent-net-generator.rules
echo "Adding a 2 sec delay to the interface up, to make the dhclient happy"
echo "pre-up sleep 2" >> /etc/network/interfaces
}
# Apt-install various things necessary for Ruby, guest additions,
# etc., and remove optional things to trim down the machine.
apt_get_things
# Remove this file to avoid dhclient issues with networking
dhclient_things
# Setup sudo to allow no-password sudo for "admin". Additionally,
# make "admin" an exempt group so that the PATH is inherited.
admin_secrets
# Install NFS client
nfs_common
# Install Ruby and Rubygems from sources.
# depends on: apt_get_things
install_ruby_and_rubygems
# Install Chef & Puppet (needs Rubygems)
# depends on: install_ruby_and_rubygems
install_chef_and_puppet
# Install insecure Vagrant SSH keys
install_insecure_vagrant_ssh_keys
# Install VirtualBox guest additions
# depends on: apt_get_things
install_vbox_guest_additions
# Zero free space to aid VM compression
# Removing leftover leases and persistent rules
# Make sure Udev doesn't block our network
# http://6.ptmc.org/?p=164
vm_misc
# Run if apt_get_things had run
clean_apt_get_things
exit
@rogerleite
Copy link
Author

Why i did this? Because i want to select what i want install. This way, you can comment what you don`t want and be happy!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment