Begin to rework box packaging tasks
This commit is contained in:
parent
51367454e8
commit
1561944967
4 changed files with 178 additions and 14 deletions
102
boxes/ubuntu/download
Executable file
102
boxes/ubuntu/download
Executable file
|
@ -0,0 +1,102 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This is the code extracted from /usr/share/lxc/templates/lxc-ubuntu
|
||||
# that comes with Ubuntu 12.10 which is responsible for downloading the
|
||||
# rootfs files / packages
|
||||
|
||||
set -e
|
||||
|
||||
suggest_flush()
|
||||
{
|
||||
echo "Container upgrade failed. The container cache may be out of date,"
|
||||
echo "in which case flushing the case (see -F in the hep output) may help."
|
||||
}
|
||||
|
||||
cleanup()
|
||||
{
|
||||
rm -rf $cache/partial
|
||||
rm -rf $cache/rootfs
|
||||
}
|
||||
|
||||
write_sourceslist()
|
||||
{
|
||||
# $1 => path to the rootfs
|
||||
|
||||
MIRROR=${MIRROR:-http://archive.ubuntu.com/ubuntu}
|
||||
SECURITY_MIRROR=${SECURITY_MIRROR:-http://security.ubuntu.com/ubuntu}
|
||||
|
||||
cat >> "$1/etc/apt/sources.list" << EOF
|
||||
deb $MIRROR ${release} main restricted universe multiverse
|
||||
deb $MIRROR ${release}-updates main restricted universe multiverse
|
||||
deb $SECURITY_MIRROR ${release}-security main restricted universe multiverse
|
||||
EOF
|
||||
}
|
||||
|
||||
download_ubuntu()
|
||||
{
|
||||
packages=vim,ssh,curl,wget,bash-completion,manpages,man-db,psmisc
|
||||
echo "installing packages: $packages"
|
||||
|
||||
trap cleanup EXIT SIGHUP SIGINT SIGTERM
|
||||
# check the mini ubuntu was not already downloaded
|
||||
mkdir -p "$cache/partial"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to create '$cache/partial' directory"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# download a mini ubuntu into a cache
|
||||
echo "Downloading ubuntu $release minimal ..."
|
||||
if [ -n "$(which qemu-debootstrap)" ]; then
|
||||
qemu-debootstrap --verbose --components=main,universe --arch=$arch --include=$packages $release $cache/partial $MIRROR
|
||||
else
|
||||
debootstrap --verbose --components=main,universe --arch=$arch --include=$packages $release $cache/partial $MIRROR
|
||||
fi
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to download the rootfs, aborting."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Serge isn't sure whether we should avoid doing this when
|
||||
# $release == `distro-info -d`
|
||||
echo "Installing updates"
|
||||
> $cache/partial/etc/apt/sources.list
|
||||
write_sourceslist $cache/partial/ $arch
|
||||
|
||||
chroot "$1/partial" apt-get update
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to update the apt cache"
|
||||
return 1
|
||||
fi
|
||||
cat > "$1/partial"/usr/sbin/policy-rc.d << EOF
|
||||
#!/bin/sh
|
||||
exit 101
|
||||
EOF
|
||||
chmod +x "$1/partial"/usr/sbin/policy-rc.d
|
||||
|
||||
lxc-unshare -s MOUNT -- chroot "$1/partial" apt-get dist-upgrade -y || { suggest_flush; false; }
|
||||
|
||||
rm -f "$1/partial"/usr/sbin/policy-rc.d
|
||||
|
||||
chroot "$1/partial" apt-get clean
|
||||
|
||||
mv "$1/partial" "$1/rootfs"
|
||||
trap EXIT
|
||||
trap SIGINT
|
||||
trap SIGTERM
|
||||
trap SIGHUP
|
||||
echo "Download complete"
|
||||
return 0
|
||||
}
|
||||
|
||||
declare cache=`readlink -f .` \
|
||||
arch=$1 \
|
||||
release=$2
|
||||
|
||||
if [ -d "${cache}/rootfs" ]; then
|
||||
echo 'The rootfs cache has been built already, please remove it if you want to update'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
download_ubuntu $cache $arch $release
|
14
boxes/ubuntu/install-chef
Executable file
14
boxes/ubuntu/install-chef
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/bin/bash
|
||||
|
||||
cache=`readlink -f .`
|
||||
rootfs="${cache}/rootfs"
|
||||
|
||||
echo "installing chef"
|
||||
cat > $rootfs/tmp/install-chef.sh << EOF
|
||||
#!/bin/sh
|
||||
curl -L https://www.opscode.com/chef/install.sh -k | sudo bash
|
||||
EOF
|
||||
chmod +x $rootfs/tmp/install-chef.sh
|
||||
chroot $rootfs /tmp/install-chef.sh
|
||||
|
||||
rm -rf $rootfs/tmp/*
|
12
boxes/ubuntu/install-puppet
Executable file
12
boxes/ubuntu/install-puppet
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/bin/bash
|
||||
|
||||
cache=`readlink -f .`
|
||||
rootfs="${cache}/rootfs"
|
||||
|
||||
echo "installing puppet"
|
||||
wget http://apt.puppetlabs.com/puppetlabs-release-stable.deb -O "${rootfs}/tmp/puppetlabs-release-stable.deb"
|
||||
chroot $rootfs dpkg -i "/tmp/puppetlabs-release-stable.deb"
|
||||
chroot $rootfs apt-get update
|
||||
chroot $rootfs apt-get install puppet -y
|
||||
|
||||
rm -rf $rootfs/tmp/*
|
|
@ -1,18 +1,54 @@
|
|||
namespace :boxes do
|
||||
namespace :quantal64 do
|
||||
desc 'Build Ubuntu Quantal 64 bits Vagrant LXC box'
|
||||
task :build do
|
||||
if File.exists?('./boxes/output/lxc-quantal64.box')
|
||||
puts 'Box has been built already!'
|
||||
exit 1
|
||||
end
|
||||
require 'rake/tasklib'
|
||||
|
||||
sh 'mkdir -p boxes/output'
|
||||
sh 'cd boxes/quantal64 && sudo ./download-ubuntu'
|
||||
sh 'rm -f boxes/quantal64/rootfs.tar.gz'
|
||||
sh 'cd boxes/quantal64 && sudo tar --numeric-owner -czf rootfs.tar.gz ./rootfs/*'
|
||||
sh 'cd boxes/quantal64 && sudo rm -rf rootfs'
|
||||
sh "cd boxes/quantal64 && sudo chown #{ENV['USER']}:#{ENV['USER']} rootfs.tar.gz && tar -czf ../output/lxc-quantal64.box ./* --exclude=download-ubuntu"
|
||||
class BuildUbuntuBoxTask < ::Rake::TaskLib
|
||||
include ::Rake::DSL
|
||||
|
||||
attr_reader :name
|
||||
|
||||
def initialize(name, release, arch, opts = {})
|
||||
@name = name
|
||||
@release = release
|
||||
@arch = arch
|
||||
@chef = opts[:chef]
|
||||
@puppet = opts[:puppet]
|
||||
@file = opts[:file] || "lxc-#{@release}-#{@arch}.box"
|
||||
|
||||
desc "Build an Ubuntu #{release} #{arch} box" unless ::Rake.application.last_comment
|
||||
task name do
|
||||
RakeFileUtils.send(:verbose, true) do
|
||||
run_task
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def run_task
|
||||
puts "./boxes/output/#{@file}"
|
||||
if File.exists?("./boxes/output/#{@file}")
|
||||
puts 'Box has been built already!'
|
||||
exit 1
|
||||
end
|
||||
|
||||
sh 'mkdir -p boxes/temp/'
|
||||
Dir.chdir 'boxes/temp' do
|
||||
sh "sudo ../ubuntu/download #{@arch} #{@release}"
|
||||
sh "sudo ../ubuntu/install-puppet"
|
||||
sh "sudo ../ubuntu/install-chef"
|
||||
#sh 'rm -f rootfs.tar.gz'
|
||||
#sh 'sudo tar --numeric-owner -czf rootfs.tar.gz ./rootfs/*'
|
||||
#sh 'sudo rm -rf rootfs'
|
||||
#sh "sudo chown #{ENV['USER']}:#{ENV['USER']} rootfs.tar.gz && tar -czf tmp-package.box ./*"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
namespace :boxes do
|
||||
namespace :ubuntu do
|
||||
namespace :build do
|
||||
desc 'Build an Ubuntu Quantal 64 bits box with puppet and chef installed'
|
||||
BuildUbuntuBoxTask.new(:quantal64, :quantal, 'amd64')
|
||||
|
||||
desc 'Build an Ubuntu Raring 64 bits box with puppet and chef installed'
|
||||
BuildUbuntuBoxTask.new(:raring64, :raring, 'amd64')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue