bitswarmbox 1.0.0.pre16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +70 -0
  3. data/.idea/.rakeTasks +7 -0
  4. data/.idea/compiler.xml +22 -0
  5. data/.idea/composerJson.xml +9 -0
  6. data/.idea/copyright/profiles_settings.xml +3 -0
  7. data/.idea/misc.xml +23 -0
  8. data/.idea/modules.xml +8 -0
  9. data/.ruby-version +1 -0
  10. data/.travis.yml +3 -0
  11. data/Gemfile +3 -0
  12. data/LICENSE +21 -0
  13. data/README.md +67 -0
  14. data/Rakefile +34 -0
  15. data/Vagrantfile +116 -0
  16. data/bin/bitswarmbox +6 -0
  17. data/bitswarmbox.gemspec +48 -0
  18. data/bitswarmbox.iml +51 -0
  19. data/builders/aws/build-all.sh +17 -0
  20. data/builders/aws/debian/build-base-jessie64.sh +11 -0
  21. data/builders/aws/debian/build-base-wheezy64.sh +11 -0
  22. data/builders/aws/debian/build-puppetmaster-jessie64.sh +11 -0
  23. data/builders/aws/ubuntu/build-base-precise64.sh +11 -0
  24. data/builders/aws/ubuntu/build-base-trusty64.sh +11 -0
  25. data/builders/aws/ubuntu/build-base-wily64.sh +11 -0
  26. data/builders/aws/ubuntu/build-base-xenial64.sh +11 -0
  27. data/builders/aws/ubuntu/build-puppetmaster-trusty64.sh +11 -0
  28. data/builders/aws/ubuntu/build-puppetmaster-xenial64.sh +11 -0
  29. data/builders/vagrant/build-all.sh +18 -0
  30. data/builders/vagrant/debian/build-base-jessie64.sh +9 -0
  31. data/builders/vagrant/debian/build-base-wheezy64.sh +9 -0
  32. data/builders/vagrant/debian/build-puppetmaster-jessie64.sh +9 -0
  33. data/builders/vagrant/ubuntu/build-base-precise64.sh +9 -0
  34. data/builders/vagrant/ubuntu/build-base-trusty64.sh +9 -0
  35. data/builders/vagrant/ubuntu/build-base-wily64.sh +9 -0
  36. data/builders/vagrant/ubuntu/build-base-xenial64.sh +9 -0
  37. data/builders/vagrant/ubuntu/build-puppetmaster-trusty64.sh +17 -0
  38. data/builders/vagrant/ubuntu/build-puppetmaster-xenial64.sh +17 -0
  39. data/features/boxes.feature +8 -0
  40. data/features/build.feature +16 -0
  41. data/features/env.feature +18 -0
  42. data/features/support/env.rb +1 -0
  43. data/lib/bitswarmbox/builder.rb +181 -0
  44. data/lib/bitswarmbox/command/build/aws.rb +90 -0
  45. data/lib/bitswarmbox/command/build/vagrant.rb +78 -0
  46. data/lib/bitswarmbox/command/build.rb +42 -0
  47. data/lib/bitswarmbox/command/env.rb +50 -0
  48. data/lib/bitswarmbox/command.rb +15 -0
  49. data/lib/bitswarmbox/config.rb +87 -0
  50. data/lib/bitswarmbox/environment.rb +128 -0
  51. data/lib/bitswarmbox/errors.rb +19 -0
  52. data/lib/bitswarmbox/subprocess.rb +39 -0
  53. data/lib/bitswarmbox/template.rb +50 -0
  54. data/lib/bitswarmbox/version.rb +4 -0
  55. data/lib/bitswarmbox.rb +29 -0
  56. data/lib/boxes.rb +29 -0
  57. data/puppet/Puppetfile +58 -0
  58. data/puppet/environments/aws/manifests/base.pp +3 -0
  59. data/puppet/environments/vagrant/environment.conf +1 -0
  60. data/puppet/environments/vagrant/manifests/base.pp +3 -0
  61. data/puppet/hiera.yaml +15 -0
  62. data/puppet/hieradata/aws.yaml +11 -0
  63. data/puppet/hieradata/common.yaml +9 -0
  64. data/puppet/hieradata/debian.yaml +6 -0
  65. data/puppet/hieradata/puppetmaster.yaml +7 -0
  66. data/puppet/hieradata/ubuntu.yaml +3 -0
  67. data/puppet/hieradata/vagrant.yaml +3 -0
  68. data/puppet/hieradata/vsphere.yaml +3 -0
  69. data/puppet/manifests/r10k_bootstrap.pp +37 -0
  70. data/puppet/modules/packer/manifests/aws/cloudinit.pp +20 -0
  71. data/puppet/modules/packer/manifests/aws/networking/params.pp +46 -0
  72. data/puppet/modules/packer/manifests/aws/networking.pp +23 -0
  73. data/puppet/modules/packer/manifests/aws/sshd.pp +10 -0
  74. data/puppet/modules/packer/manifests/aws/users.pp +26 -0
  75. data/puppet/modules/packer/manifests/aws.pp +7 -0
  76. data/puppet/modules/packer/manifests/clock.pp +10 -0
  77. data/puppet/modules/packer/manifests/updates.pp +27 -0
  78. data/puppet/modules/packer/manifests/vagrant/params.pp +14 -0
  79. data/puppet/modules/packer/manifests/vagrant.pp +63 -0
  80. data/puppet/modules/packer/manifests/vmtools/params.pp +35 -0
  81. data/puppet/modules/packer/manifests/vmtools.pp +52 -0
  82. data/puppet/modules/packer/manifests/vsphere/fw.pp +9 -0
  83. data/puppet/modules/packer/manifests/vsphere/networking.pp +29 -0
  84. data/puppet/modules/packer/manifests/vsphere/params.pp +56 -0
  85. data/puppet/modules/packer/manifests/vsphere/repos.pp +87 -0
  86. data/puppet/modules/packer/manifests/vsphere.pp +45 -0
  87. data/puppet/modules/packer/templates/ec2/ubuntu-cloud-cfg.erb +111 -0
  88. data/puppet/modules/packer/templates/vsphere/debian.rb.erb +45 -0
  89. data/puppet/modules/packer/templates/vsphere/rc.local +5 -0
  90. data/puppet/modules/packer/templates/vsphere/redhat.rb.erb +66 -0
  91. data/puppet/modules/packer/templates/vsphere/ubuntu.rb.erb +50 -0
  92. data/scripts/ansible.sh +17 -0
  93. data/scripts/chef.sh +30 -0
  94. data/scripts/cleanup-aws.sh +6 -0
  95. data/scripts/cleanup-vagrant.sh +26 -0
  96. data/scripts/cleanup.sh +48 -0
  97. data/scripts/docker.sh +23 -0
  98. data/scripts/local-ssh-keygen.sh +16 -0
  99. data/scripts/prepare-done.sh +3 -0
  100. data/scripts/prepare.sh +32 -0
  101. data/scripts/puppet.sh +31 -0
  102. data/scripts/puppetserver-post.sh +8 -0
  103. data/scripts/puppetserver.sh +44 -0
  104. data/scripts/ruby.sh +42 -0
  105. data/scripts/vagrant.sh +42 -0
  106. data/scripts/vmtools.sh +37 -0
  107. data/spec/boxes/builder_spec.rb +52 -0
  108. data/spec/boxes/config_spec.rb +142 -0
  109. data/spec/boxes/environment_spec.rb +73 -0
  110. data/spec/boxes/subprocess_spec.rb +35 -0
  111. data/spec/boxes/template_spec.rb +53 -0
  112. data/spec/spec_helper.rb +5 -0
  113. data/spec/support/subprocess_command.rb +7 -0
  114. data/templates/debian/jessie64.erb +206 -0
  115. data/templates/debian/preseed.cfg +70 -0
  116. data/templates/debian/wheezy64.erb +206 -0
  117. data/templates/ubuntu/precise64.erb +205 -0
  118. data/templates/ubuntu/preseed.cfg +61 -0
  119. data/templates/ubuntu/trusty64.erb +205 -0
  120. data/templates/ubuntu/wily64.erb +209 -0
  121. data/templates/ubuntu/xenial64.erb +209 -0
  122. metadata +349 -0
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/ruby
2
+
3
+
4
+ hostname = `vmtoolsd --cmd "info-get guestinfo.hostname"`
5
+
6
+ hostname = hostname.chomp
7
+
8
+ puts "Nice to meet you, my VM name is '#{hostname}'."
9
+
10
+ puts "\n"
11
+
12
+ puts '- Setting local hostname...'
13
+
14
+ File.open('/etc/hostname', 'w') do |f|
15
+ f.write(hostname)
16
+ end
17
+
18
+ Kernel.system('hostname -F /etc/hostname')
19
+
20
+ puts '- Re-obtaining DHCP lease...'
21
+
22
+ <% if (@operatingsystem == 'CentOS') or (@operatingsystem == 'Scientific') -%>
23
+ <% if @operatingsystemmajrelease == '7' -%>
24
+ File.open('/var/lib/NetworkManager/dhclient-ens32.conf', 'a') do |f|
25
+ f << "send host-name #{hostname}"
26
+ end
27
+ Kernel.system('/sbin/service NetworkManager restart')
28
+ Kernel.system('/usr/bin/nmcli con down id ens32')
29
+ Kernel.system('/usr/bin/nmcli con up id ens32')
30
+ <% end -%>
31
+ <% if @operatingsystemmajrelease == '6' -%>
32
+ File.open('/etc/dhcp/dhclient-eth0.conf', 'a') do |f|
33
+ <% end -%>
34
+ <% if @operatingsystemmajrelease == '5' -%>
35
+ File.open('/etc/dhclient-eth0.conf', 'a') do |f|
36
+ <% end -%>
37
+ <% if (@operatingsystemmajrelease == '6') or (@operatingsystemmajrelease == '5') -%>
38
+ f << "\nsend host-name #{hostname};"
39
+ end
40
+ network = File.read('/etc/sysconfig/network')
41
+ File.open('/etc/sysconfig/network', 'w') do |f|
42
+ network.gsub!(/localhost.localdomain/, "#{hostname}")
43
+ f.write(network)
44
+ end
45
+ Kernel.system('/etc/init.d/network restart')
46
+ <% end -%>
47
+ <% end -%>
48
+
49
+ <% if @operatingsystem == 'Fedora' -%>
50
+ File.open('/var/lib/NetworkManager/dhclient-ens32.conf', 'a') do |f|
51
+ f << "send host-name #{hostname}"
52
+ end
53
+ Kernel.system('/sbin/service NetworkManager restart')
54
+ Kernel.system('/usr/bin/nmcli con down id ens32')
55
+ Kernel.system('/usr/bin/nmcli con up id ens32')
56
+ <% end -%>
57
+
58
+ puts '- Cleaning up...'
59
+
60
+ Kernel.system('rm /etc/vsphere-bootstrap.rb')
61
+ Kernel.system('echo "exit 0" > /etc/rc.d/rc.local')
62
+
63
+ puts "\n"
64
+
65
+ puts 'Done!'
66
+
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/ruby
2
+
3
+ hostname = `vmtoolsd --cmd "info-get guestinfo.hostname"`
4
+
5
+ hostname = hostname.chomp
6
+
7
+ puts "Nice to meet you, my VM name is '#{hostname}'."
8
+
9
+ puts "\n"
10
+
11
+ puts '- Setting local hostname...'
12
+
13
+ File.open('/etc/hostname', 'w') do |f|
14
+ f.write(hostname)
15
+ end
16
+
17
+ Kernel.system('hostname -F /etc/hostname')
18
+
19
+ dhc = File.read('/etc/dhcp/dhclient.conf')
20
+
21
+ File.open('/etc/dhcp/dhclient.conf', 'w') do |f|
22
+ <% if ['15.10', '16.04'].include? @operatingsystemrelease -%>
23
+ dhc.gsub!(/^(send host-name.*)/, "send host-name \"#{hostname}\";")
24
+ <% else -%>
25
+ dhc.gsub!(/^(#send host-name.*)/, "send host-name \"#{hostname}\";")
26
+ <% end -%>
27
+ f.write(dhc)
28
+ end
29
+
30
+ File.open('/etc/hosts', 'w') do |f|
31
+ f.puts "127.0.0.1 localhost"
32
+ f.puts "127.0.1.1 #{hostname}"
33
+ end
34
+
35
+ puts '- Re-obtaining DHCP lease...'
36
+
37
+ <% if ['15.10', '16.04'].include? @operatingsystemrelease -%>
38
+ Kernel.system('/usr/sbin/service networking restart')
39
+ <% else -%>
40
+ Kernel.system('/sbin/ifdown eth0 && /sbin/ifup eth0')
41
+ <% end -%>
42
+
43
+ puts '- Cleaning up...'
44
+
45
+ #Kernel.system('rm /etc/vsphere-bootstrap.rb')
46
+ Kernel.system('echo "exit 0" > /etc/rc.local')
47
+
48
+ puts "\n"
49
+
50
+ puts 'Done!'
@@ -0,0 +1,17 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+ minimal_apt_get_install='apt-get install -y --no-install-recommends'
5
+
6
+ case $(lsb_release -is) in
7
+ 'ubuntu')
8
+ apt-add-repository ppa:ansible/ansible
9
+ apt-get -qy update
10
+ $minimal_apt_get_install ansible
11
+ ;;
12
+ *)
13
+ apt-get -qy install libffi-dev
14
+ easy_install pip
15
+ pip install ansible
16
+ ;;
17
+ esac
data/scripts/chef.sh ADDED
@@ -0,0 +1,30 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+
5
+ # Get the Chef package version through their metadata service.
6
+ platform=$(lsb_release -si | tr '[:upper:]' '[:lower:]')
7
+ release=$(lsb_release -sr)
8
+ version_url="https://www.opscode.com/chef/metadata?v=&prerelease=false&nightlies=false&p=$platform&pv=$release&m=x86_64"
9
+ current_version=$(curl -s "$version_url")
10
+
11
+ version_url=$(echo "$current_version" | awk '/url/{print $2}')
12
+ version_sha=$(echo "$current_version" | awk '/sha256/{print $2}')
13
+
14
+ # fetch chef
15
+ curl --insecure --location $version_url -o chef.deb
16
+
17
+ # check the file
18
+ echo "$version_sha chef.deb" > '/tmp/chef-checksum'
19
+ shasum -a 256 -c '/tmp/chef-checksum'
20
+ if [ $? -ne 0 ]; then
21
+ echo "Downloaded Chef package failed to checksum."
22
+ exit 1
23
+ fi
24
+
25
+ # install
26
+ dpkg -i chef.deb
27
+
28
+ # cleanup
29
+ rm chef.deb
30
+ rm /tmp/chef-checksum
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ cat /dev/null > /var/log/wtmp
4
+ rm /root/.ssh/authorized_keys
5
+
6
+ exit
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+
3
+ # zero any and all free space
4
+ echo "Cleaning free space..."
5
+ dd if=/dev/zero of=/EMPTY bs=1M
6
+ rm -f /EMPTY
7
+
8
+ # whiteout root
9
+ echo "Cleaning up /..."
10
+ #count=`df --sync -kP / | tail -n1 | awk -F ' ' '{print $4}'`;
11
+ dd if=/dev/zero of=/tmp/whitespace bs=1024;
12
+ rm /tmp/whitespace;
13
+
14
+ # whiteout /boot
15
+ echo "Cleaning up /boot..."
16
+ #count=`df --sync -kP /boot | tail -n1 | awk -F ' ' '{print $4}'`;
17
+ dd if=/dev/zero of=/boot/whitespace bs=1024;
18
+ rm /boot/whitespace;
19
+
20
+ # whiteout the swap
21
+ echo "Cleaning up swap partitions..."
22
+ swappart=`cat /proc/swaps | tail -n1 | awk -F ' ' '{print $1}'`
23
+ swapoff $swappart;
24
+ dd if=/dev/zero of=$swappart;
25
+ mkswap $swappart;
26
+ swapon $swappart;
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+
5
+ ##
6
+ # Purge unnecessary data from the image to keep it small.
7
+ #
8
+ # Based on: https://gist.github.com/adrienbrault/3775253
9
+ ##
10
+
11
+ # tidy up DCHP leases
12
+ echo "Cleaning up dhcp..."
13
+ rm /var/lib/dhcp/*
14
+
15
+ # make sure Udev doesn't block our network
16
+ # http://6.ptmc.org/?p=164
17
+ #echo "Cleaning up udev..."
18
+ #rm /etc/udev/rules.d/70-persistent-net.rules
19
+ #mkdir /etc/udev/rules.d/70-persistent-net.rules
20
+ #rm -rf /dev/.udev/
21
+ #rm /lib/udev/rules.d/75-persistent-net-generator.rules
22
+
23
+ # clean up apt
24
+ echo "Cleaning up apt..."
25
+ apt-get -qy autoremove
26
+ apt-get clean -qy
27
+ apt-get autoclean -qy
28
+
29
+ # nuke the bash history
30
+ echo "Removing bash history..."
31
+ unset HISTFILE
32
+ rm -f /root/.bash_history
33
+ rm -f /home/vagrant/.bash_history
34
+
35
+ # clean up the logs
36
+ echo "Cleaning up logs..."
37
+ find /var/log -type f | while read f; do echo -ne '' > $f; done;
38
+
39
+ if [ -e /etc/puppetlabs/puppet/ssl ]; then
40
+ echo "Clearing out any generated Puppet SSL certs"
41
+ set -x
42
+ rm -rf /etc/puppetlabs/puppet/ssl/*
43
+ fi
44
+ if [ -e /etc/puppetlabs/puppetdb/ssl ]; then
45
+ echo "Clearing out any generated PuppetDB SSL certs"
46
+ set -x
47
+ rm -rf /etc/puppetlabs/puppetdb/ssl/*
48
+ fi
data/scripts/docker.sh ADDED
@@ -0,0 +1,23 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+ minimal_apt_get_install='apt-get install -y --no-install-recommends'
5
+
6
+ os_distro=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
7
+ os_release=$(lsb_release -cs)
8
+
9
+ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
10
+ echo "deb https://apt.dockerproject.org/repo ${os_distro}-${os_release} main" | sudo tee /etc/apt/sources.list.d/docker.list
11
+
12
+ apt-get update -qy
13
+
14
+ apt-cache policy docker-engine
15
+
16
+ $minimal_apt_get_install docker-engine
17
+
18
+ systemctl status docker
19
+
20
+ if [ PACKER_PROVISIONER == 'vagrant' ]; then
21
+ usermod -aG docker vagrant
22
+ fi
23
+
@@ -0,0 +1,16 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
6
+ KEYDIR="$( cd "${DIR}/../keys" && pwd )"
7
+
8
+ echo "## KEYDIR=${KEYDIR}"
9
+
10
+ if [ ! -e "${KEYDIR}/root_rsa" ]; then
11
+ rm -f "${KEYDIR}/root_rsa.pub"
12
+ ssh-keygen -t rsa -f "${KEYDIR}/root_rsa" -q -N "" -C "bitswarm_insecure"
13
+ fi
14
+
15
+ #echo "#### root_rsa.pub:"
16
+ #cat "${KEYDIR}/root_rsa.pub"
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ echo "## All done preparing"
@@ -0,0 +1,32 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+ minimal_apt_get_install='apt-get install -y'
5
+
6
+ set -e
7
+
8
+ # update the apt cache and packages
9
+ case $(lsb_release -cs) in
10
+ 'precise')
11
+ apt-get clean
12
+ rm -rf /var/lib/apt/lists/*
13
+ apt-get clean
14
+ ;;
15
+ *)
16
+ ;;
17
+ esac
18
+
19
+ apt-get -qy update
20
+ apt-get -qy upgrade
21
+
22
+ $minimal_apt_get_install zsh vim git wget curl
23
+
24
+ echo "## zsh executable: `which zsh`"
25
+ echo "## vim executable: `which vi`"
26
+ echo "## git executable: `which git`"
27
+
28
+ mkdir -p /usr/local/bin
29
+ mkdir -p /usr/local/sbin
30
+
31
+ mkdir -p /root/.ssh
32
+ chmod 700 /root/.ssh
data/scripts/puppet.sh ADDED
@@ -0,0 +1,31 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+ minimal_apt_get_install='apt-get install -y'
5
+
6
+ echo "## Installing Puppet (agent)"
7
+
8
+ set -e
9
+
10
+ cd /tmp
11
+
12
+ # see: http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html
13
+
14
+ # determine the os release
15
+ os_distro=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
16
+ os_release=$(lsb_release -cs)
17
+
18
+ # configure the puppet package sources
19
+ wget https://apt.puppetlabs.com/puppetlabs-release-pc1-$os_release.deb
20
+ dpkg -i puppetlabs-release-pc1-$os_release.deb
21
+ apt-get -q update
22
+
23
+ # install puppet
24
+ $minimal_apt_get_install puppet-agent
25
+
26
+ echo "## Creating symlink for Puppet binaries in /usr/bin"
27
+ for f in $(find /opt/puppetlabs/bin -type l -or -type f); do
28
+ ln -svf $(readlink -f "$f") /usr/bin/$(basename "$f")
29
+ done
30
+
31
+ echo "## Puppet executable $(which puppet) version $(puppet --version)"
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ #echo "###### /root/.ssh/id_rsa.pub contents baked in:"
4
+ #cat /root/.ssh/id_rsa.pub
5
+
6
+ #rm -rf /etc/puppetlabs/ssl/*
7
+ #rm -rf /etc/puppetlabs/puppetdb/ssl/*
8
+
@@ -0,0 +1,44 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+ minimal_apt_get_install='apt-get install -y'
5
+
6
+ echo "## Installing Puppet (server)"
7
+
8
+ set -e
9
+
10
+ cd /tmp
11
+
12
+ # see: http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html
13
+
14
+ # determine the os release
15
+ os_distro=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
16
+ os_release=$(lsb_release -cs)
17
+
18
+ # configure the puppet package sources
19
+ wget https://apt.puppetlabs.com/puppetlabs-release-pc1-$os_release.deb
20
+ dpkg -i puppetlabs-release-pc1-$os_release.deb
21
+ apt-get -q update
22
+
23
+ # install puppetserver and friends
24
+ $minimal_apt_get_install puppet-agent puppetserver puppetdb puppetdb-termini
25
+
26
+ echo "## Creating symlink for Puppet binaries in /usr/bin"
27
+ for f in $(find /opt/puppetlabs/bin -type l -or -type f); do
28
+ ln -svf $(readlink -f "$f") /usr/bin/$(basename "$f")
29
+ done
30
+
31
+ echo "## Puppet executable $(which puppet) version $(puppet --version)"
32
+ echo "## Puppetdb executable $(which puppetdb) version $(puppetdb --version)"
33
+
34
+ if [ -e /tmp/keys/root_rsa ]; then
35
+ echo '## RSA keypair preloaded'
36
+ mv /tmp/keys/root_rsa /root/.ssh/id_rsa
37
+ mv /tmp/keys/root_rsa.pub /root/.ssh/id_rsa.pub
38
+ chmod 600 /root/.ssh/id_rsa*
39
+ else
40
+ echo '## Creating /root RSA keypair'
41
+ rm -f /root/.ssh/id_rsa
42
+ rm -f /root/.ssh/id_rsa.pub
43
+ ssh-keygen -t rsa -f /root/.ssh/id_rsa -q -N "" -C "puppetmaster"
44
+ fi
data/scripts/ruby.sh ADDED
@@ -0,0 +1,42 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+ minimal_apt_get_install='apt-get install -y --no-install-recommends'
5
+
6
+ # this installs chruby, ruby-install and a selection of rubies and is used in
7
+ # the 'ruby' special box type.
8
+
9
+ chruby_version=0.3.9
10
+ rubyinstall_version=0.6.0
11
+
12
+ # install chruby
13
+ wget -O chruby-$chruby_version.tar.gz https://github.com/postmodern/chruby/archive/v$chruby_version.tar.gz
14
+ tar -xzvf chruby-$chruby_version.tar.gz
15
+ cd chruby-$chruby_version/
16
+ make install
17
+
18
+ # configure system-wide
19
+ cat << 'EOF' > /etc/profile.d/chruby.sh
20
+ if [ -n "$BASH_VERSION" ] || [ -n "$ZSH_VERSION" ]; then
21
+ source /usr/local/share/chruby/chruby.sh
22
+ source /usr/local/share/chruby/auto.sh
23
+ fi
24
+ EOF
25
+
26
+ # install ruby-install
27
+ wget -O ruby-install-$rubyinstall_version.tar.gz https://github.com/postmodern/ruby-install/archive/v$rubyinstall_version.tar.gz
28
+ tar -xzvf ruby-install-$rubyinstall_version.tar.gz
29
+ cd ruby-install-$rubyinstall_version/
30
+ make install
31
+
32
+ # install a set of recent MRI Rubies.
33
+ ruby-install ruby 2.2.2
34
+ ruby-install ruby 2.2.3
35
+ ruby-install ruby 2.2.4
36
+ ruby-install ruby 2.3.0
37
+
38
+ # update gems and install bundler
39
+ source /usr/local/share/chruby/chruby.sh
40
+ for ruby in `chruby`; do
41
+ chruby-exec $ruby -- gem install bundler
42
+ done
@@ -0,0 +1,42 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+ minimal_apt_get_install='apt-get install -y --no-install-recommends'
5
+
6
+ # vagrant.sh aka Mitchell's old basebox postinstall.sh example
7
+ set -e
8
+
9
+ # mark the build time
10
+ date > /etc/vagrant_box_build_time
11
+
12
+ # install some oft used packages
13
+ $minimal_apt_get_install linux-headers-$(uname -r) build-essential
14
+ $minimal_apt_get_install zlib1g-dev libssl-dev
15
+ $minimal_apt_get_install python-software-properties python-setuptools python-dev
16
+
17
+ # configure password-less sudo
18
+ usermod -a -G sudo vagrant
19
+ echo "%vagrant ALL=NOPASSWD:ALL" > /tmp/vagrant
20
+ mv /tmp/vagrant /etc/sudoers.d/vagrant
21
+ chmod 0440 /etc/sudoers.d/vagrant
22
+
23
+ # install the vagrant-provided ssh keys
24
+ mkdir -pm 700 /home/vagrant/.ssh
25
+ curl -Lo /home/vagrant/.ssh/authorized_keys \
26
+ 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub'
27
+ chmod 0600 /home/vagrant/.ssh/authorized_keys
28
+ chown -R vagrant:vagrant /home/vagrant/.ssh
29
+
30
+ # under Ubuntu 16.04 (Xenial), networking gets lost on reboot
31
+ # this is because it's renamed to follow the PCI slot
32
+ case $(lsb_release -cs) in
33
+ "xenial")
34
+ sed -i "s/ens33/ens32/g" /etc/network/interfaces
35
+ ;;
36
+ *)
37
+ ;;
38
+ esac
39
+
40
+ # clean up any artifacts
41
+ rm -f /home/vagrant/shutdown.sh
42
+
@@ -0,0 +1,37 @@
1
+ #!/bin/bash
2
+ export LC_ALL=C
3
+ export DEBIAN_FRONTEND=noninteractive
4
+ minimal_apt_get_install='apt-get install -y --no-install-recommends'
5
+
6
+ ##
7
+ # Configure the relevant VM tools for this builder.
8
+ ##
9
+
10
+ set -e
11
+
12
+ case $PACKER_BUILDER_TYPE in
13
+ 'virtualbox-iso')
14
+ echo "Installing VirtualBox Guest Additions..."
15
+ $minimal_apt_get_install dkms
16
+ mount -o loop /home/vagrant/VBoxGuestAdditions.iso /mnt
17
+ sh /mnt/VBoxLinuxAdditions.run
18
+ umount /mnt
19
+
20
+ rm -f /home/vagrant/VBoxGuestAdditions.iso
21
+ ;;
22
+ 'vmware-iso')
23
+ echo "Installing VMware Tools..."
24
+ mkdir -p /mnt/cdrom
25
+ mount -o loop /home/vagrant/linux.iso /mnt/cdrom
26
+
27
+ cd /tmp
28
+ tar -zxpf /mnt/cdrom/VMwareTools-*.tar.gz -C /tmp/
29
+ /tmp/vmware-tools-distrib/vmware-install.pl --force-install --default
30
+
31
+ umount /mnt/cdrom
32
+ rm -f /home/vagrant/linux.iso
33
+ ;;
34
+ *)
35
+ printf "Nothing to do for the %s builder type.\n" $PACKER_BUILDER_TYPE
36
+ ;;
37
+ esac
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Boxes::Builder do
4
+ let(:env) { Boxes::Environment.new }
5
+
6
+ describe '#initialize' do
7
+ it 'unpacks the arguments for the build' do
8
+ build = Boxes::Builder.new(env, name: 'build-name',
9
+ provider: 'vmware',
10
+ template: 'ubuntu/trusty64',
11
+ scripts: ['ruby.sh'])
12
+
13
+ expect(build.template.name).to eq 'ubuntu/trusty64'
14
+ expect(build.scripts).to include('ruby.sh')
15
+ end
16
+
17
+ it 'requires a name' do
18
+ expect do
19
+ Boxes::Builder.new(env, provider: 'vmware', template: 'ubuntu/trusty64')
20
+ end.to raise_error(Boxes::Errors::MissingArgumentError)
21
+ end
22
+
23
+ it 'requires a provider' do
24
+ expect do
25
+ Boxes::Builder.new(env, name: 'build-name', template: 'ubuntu/trusty64')
26
+ end.to raise_error(Boxes::Errors::MissingArgumentError)
27
+ end
28
+
29
+ it 'requires a template' do
30
+ expect do
31
+ Boxes::Builder.new(env, name: 'build-name', provider: 'vmware')
32
+ end.to raise_error(Boxes::Errors::MissingArgumentError)
33
+ end
34
+
35
+ it 'throws an exception on unknown templates' do
36
+ expect do
37
+ Boxes::Builder.new(env, name: 'build-name',
38
+ provider: 'vmware',
39
+ template: 'nope/nope')
40
+ end.to raise_error(Boxes::Errors::TemplateNotFoundError)
41
+ end
42
+
43
+ it 'throws an exception on unknown scripts' do
44
+ expect do
45
+ Boxes::Builder.new(env, name: 'build-name',
46
+ provider: 'vmware',
47
+ template: 'ubuntu/trusty64',
48
+ scripts: ['nope.sh'])
49
+ end.to raise_error(Boxes::Errors::ScriptNotFoundError)
50
+ end
51
+ end
52
+ end