bitswarmbox 1.0.0.pre16
Sign up to get free protection for your applications and to get access to all the features.
- 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
|