bitswarmbox 1.0.0.pre16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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