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.
- checksums.yaml +7 -0
- data/.gitignore +70 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/compiler.xml +22 -0
- data/.idea/composerJson.xml +9 -0
- data/.idea/copyright/profiles_settings.xml +3 -0
- data/.idea/misc.xml +23 -0
- data/.idea/modules.xml +8 -0
- data/.ruby-version +1 -0
- data/.travis.yml +3 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +67 -0
- data/Rakefile +34 -0
- data/Vagrantfile +116 -0
- data/bin/bitswarmbox +6 -0
- data/bitswarmbox.gemspec +48 -0
- data/bitswarmbox.iml +51 -0
- data/builders/aws/build-all.sh +17 -0
- data/builders/aws/debian/build-base-jessie64.sh +11 -0
- data/builders/aws/debian/build-base-wheezy64.sh +11 -0
- data/builders/aws/debian/build-puppetmaster-jessie64.sh +11 -0
- data/builders/aws/ubuntu/build-base-precise64.sh +11 -0
- data/builders/aws/ubuntu/build-base-trusty64.sh +11 -0
- data/builders/aws/ubuntu/build-base-wily64.sh +11 -0
- data/builders/aws/ubuntu/build-base-xenial64.sh +11 -0
- data/builders/aws/ubuntu/build-puppetmaster-trusty64.sh +11 -0
- data/builders/aws/ubuntu/build-puppetmaster-xenial64.sh +11 -0
- data/builders/vagrant/build-all.sh +18 -0
- data/builders/vagrant/debian/build-base-jessie64.sh +9 -0
- data/builders/vagrant/debian/build-base-wheezy64.sh +9 -0
- data/builders/vagrant/debian/build-puppetmaster-jessie64.sh +9 -0
- data/builders/vagrant/ubuntu/build-base-precise64.sh +9 -0
- data/builders/vagrant/ubuntu/build-base-trusty64.sh +9 -0
- data/builders/vagrant/ubuntu/build-base-wily64.sh +9 -0
- data/builders/vagrant/ubuntu/build-base-xenial64.sh +9 -0
- data/builders/vagrant/ubuntu/build-puppetmaster-trusty64.sh +17 -0
- data/builders/vagrant/ubuntu/build-puppetmaster-xenial64.sh +17 -0
- data/features/boxes.feature +8 -0
- data/features/build.feature +16 -0
- data/features/env.feature +18 -0
- data/features/support/env.rb +1 -0
- data/lib/bitswarmbox/builder.rb +181 -0
- data/lib/bitswarmbox/command/build/aws.rb +90 -0
- data/lib/bitswarmbox/command/build/vagrant.rb +78 -0
- data/lib/bitswarmbox/command/build.rb +42 -0
- data/lib/bitswarmbox/command/env.rb +50 -0
- data/lib/bitswarmbox/command.rb +15 -0
- data/lib/bitswarmbox/config.rb +87 -0
- data/lib/bitswarmbox/environment.rb +128 -0
- data/lib/bitswarmbox/errors.rb +19 -0
- data/lib/bitswarmbox/subprocess.rb +39 -0
- data/lib/bitswarmbox/template.rb +50 -0
- data/lib/bitswarmbox/version.rb +4 -0
- data/lib/bitswarmbox.rb +29 -0
- data/lib/boxes.rb +29 -0
- data/puppet/Puppetfile +58 -0
- data/puppet/environments/aws/manifests/base.pp +3 -0
- data/puppet/environments/vagrant/environment.conf +1 -0
- data/puppet/environments/vagrant/manifests/base.pp +3 -0
- data/puppet/hiera.yaml +15 -0
- data/puppet/hieradata/aws.yaml +11 -0
- data/puppet/hieradata/common.yaml +9 -0
- data/puppet/hieradata/debian.yaml +6 -0
- data/puppet/hieradata/puppetmaster.yaml +7 -0
- data/puppet/hieradata/ubuntu.yaml +3 -0
- data/puppet/hieradata/vagrant.yaml +3 -0
- data/puppet/hieradata/vsphere.yaml +3 -0
- data/puppet/manifests/r10k_bootstrap.pp +37 -0
- data/puppet/modules/packer/manifests/aws/cloudinit.pp +20 -0
- data/puppet/modules/packer/manifests/aws/networking/params.pp +46 -0
- data/puppet/modules/packer/manifests/aws/networking.pp +23 -0
- data/puppet/modules/packer/manifests/aws/sshd.pp +10 -0
- data/puppet/modules/packer/manifests/aws/users.pp +26 -0
- data/puppet/modules/packer/manifests/aws.pp +7 -0
- data/puppet/modules/packer/manifests/clock.pp +10 -0
- data/puppet/modules/packer/manifests/updates.pp +27 -0
- data/puppet/modules/packer/manifests/vagrant/params.pp +14 -0
- data/puppet/modules/packer/manifests/vagrant.pp +63 -0
- data/puppet/modules/packer/manifests/vmtools/params.pp +35 -0
- data/puppet/modules/packer/manifests/vmtools.pp +52 -0
- data/puppet/modules/packer/manifests/vsphere/fw.pp +9 -0
- data/puppet/modules/packer/manifests/vsphere/networking.pp +29 -0
- data/puppet/modules/packer/manifests/vsphere/params.pp +56 -0
- data/puppet/modules/packer/manifests/vsphere/repos.pp +87 -0
- data/puppet/modules/packer/manifests/vsphere.pp +45 -0
- data/puppet/modules/packer/templates/ec2/ubuntu-cloud-cfg.erb +111 -0
- data/puppet/modules/packer/templates/vsphere/debian.rb.erb +45 -0
- data/puppet/modules/packer/templates/vsphere/rc.local +5 -0
- data/puppet/modules/packer/templates/vsphere/redhat.rb.erb +66 -0
- data/puppet/modules/packer/templates/vsphere/ubuntu.rb.erb +50 -0
- data/scripts/ansible.sh +17 -0
- data/scripts/chef.sh +30 -0
- data/scripts/cleanup-aws.sh +6 -0
- data/scripts/cleanup-vagrant.sh +26 -0
- data/scripts/cleanup.sh +48 -0
- data/scripts/docker.sh +23 -0
- data/scripts/local-ssh-keygen.sh +16 -0
- data/scripts/prepare-done.sh +3 -0
- data/scripts/prepare.sh +32 -0
- data/scripts/puppet.sh +31 -0
- data/scripts/puppetserver-post.sh +8 -0
- data/scripts/puppetserver.sh +44 -0
- data/scripts/ruby.sh +42 -0
- data/scripts/vagrant.sh +42 -0
- data/scripts/vmtools.sh +37 -0
- data/spec/boxes/builder_spec.rb +52 -0
- data/spec/boxes/config_spec.rb +142 -0
- data/spec/boxes/environment_spec.rb +73 -0
- data/spec/boxes/subprocess_spec.rb +35 -0
- data/spec/boxes/template_spec.rb +53 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/support/subprocess_command.rb +7 -0
- data/templates/debian/jessie64.erb +206 -0
- data/templates/debian/preseed.cfg +70 -0
- data/templates/debian/wheezy64.erb +206 -0
- data/templates/ubuntu/precise64.erb +205 -0
- data/templates/ubuntu/preseed.cfg +61 -0
- data/templates/ubuntu/trusty64.erb +205 -0
- data/templates/ubuntu/wily64.erb +209 -0
- data/templates/ubuntu/xenial64.erb +209 -0
- 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!'
|
data/scripts/ansible.sh
ADDED
|
@@ -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,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;
|
data/scripts/cleanup.sh
ADDED
|
@@ -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"
|
data/scripts/prepare.sh
ADDED
|
@@ -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,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
|
data/scripts/vagrant.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
|
+
# 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
|
+
|
data/scripts/vmtools.sh
ADDED
|
@@ -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
|