Commit 27b39fd4 by Serge Hallyn Committed by Daniel Lezcano

Update ubuntu templates

Rename 'ubuntu' template to 'lucid' Add new maverick and natty templates, which do much less tweaking of the environment. These should only be used on a kernel which supports sysfs tagging for /sys/class/net, as udev will be running in the container. The natty template needed to slightly change the installed packages for dhclient to be correclty installed. Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@canonical.com> Signed-off-by: 's avatarDaniel Lezcano <dlezcano@fr.ibm.com>
parent fb4c7e28
...@@ -25,7 +25,9 @@ lxc.spec ...@@ -25,7 +25,9 @@ lxc.spec
lxc.pc lxc.pc
templates/lxc-debian templates/lxc-debian
templates/lxc-ubuntu templates/lxc-lucid
templates/lxc-maverick
templates/lxc-natty
templates/lxc-fedora templates/lxc-fedora
templates/lxc-sshd templates/lxc-sshd
templates/lxc-busybox templates/lxc-busybox
......
...@@ -137,7 +137,9 @@ AC_CONFIG_FILES([ ...@@ -137,7 +137,9 @@ AC_CONFIG_FILES([
templates/Makefile templates/Makefile
templates/lxc-lenny templates/lxc-lenny
templates/lxc-debian templates/lxc-debian
templates/lxc-ubuntu templates/lxc-lucid
templates/lxc-maverick
templates/lxc-natty
templates/lxc-busybox templates/lxc-busybox
templates/lxc-fedora templates/lxc-fedora
templates/lxc-sshd templates/lxc-sshd
......
...@@ -107,7 +107,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ...@@ -107,7 +107,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
<para> <para>
'template' is the short name of an existing 'lxc-template' 'template' is the short name of an existing 'lxc-template'
script that is called by lxc-create, script that is called by lxc-create,
eg. busybox, debian, fedora, ubuntu or sshd. eg. busybox, debian, fedora, lucid, maverick, natty or sshd.
Refer to the examples in <filename>@LXCTEMPLATEDIR@</filename> Refer to the examples in <filename>@LXCTEMPLATEDIR@</filename>
for details of the expected script structure. for details of the expected script structure.
</para> </para>
......
...@@ -3,7 +3,9 @@ templatesdir=@LXCTEMPLATEDIR@ ...@@ -3,7 +3,9 @@ templatesdir=@LXCTEMPLATEDIR@
templates_SCRIPTS = \ templates_SCRIPTS = \
lxc-debian \ lxc-debian \
lxc-lenny \ lxc-lenny \
lxc-ubuntu \ lxc-lucid \
lxc-maverick \
lxc-natty \
lxc-fedora \ lxc-fedora \
lxc-busybox \ lxc-busybox \
lxc-sshd lxc-sshd
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
# This script is based on lxc-debian (Daniel Lezcano <daniel.lezcano@free.fr>) # This script is based on lxc-debian (Daniel Lezcano <daniel.lezcano@free.fr>)
# #
# Copyright © 2010 Wilhelm Meier # Copyright 2010 Wilhelm Meier
# Author: Wilhelm Meier <wilhelm.meier@fh-kl.de> # Author: Wilhelm Meier <wilhelm.meier@fh-kl.de>
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
...@@ -144,7 +144,7 @@ EOF ...@@ -144,7 +144,7 @@ EOF
download_ubuntu() download_ubuntu()
{ {
packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,vim,dhcp3-client,ssh,lsb-release packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,vim,dhcp3-client,ssh,lsb-release,gnupg
cache=$1 cache=$1
arch=$2 arch=$2
...@@ -157,7 +157,7 @@ download_ubuntu() ...@@ -157,7 +157,7 @@ download_ubuntu()
fi fi
# download a mini ubuntu into a cache # download a mini ubuntu into a cache
echo "Downloading ubuntu minimal ..." echo "Downloading ubuntu lucid minimal ..."
debootstrap --verbose --variant=minbase --components=main,universe --arch=$arch --include=$packages lucid $cache/partial-$arch debootstrap --verbose --variant=minbase --components=main,universe --arch=$arch --include=$packages lucid $cache/partial-$arch
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Failed to download the rootfs, aborting." echo "Failed to download the rootfs, aborting."
...@@ -184,7 +184,7 @@ copy_ubuntu() ...@@ -184,7 +184,7 @@ copy_ubuntu()
install_ubuntu() install_ubuntu()
{ {
cache="/var/cache/lxc/ubuntu" cache="/var/cache/lxc/lucid"
rootfs=$1 rootfs=$1
mkdir -p /var/lock/subsys/ mkdir -p /var/lock/subsys/
( (
...@@ -207,7 +207,7 @@ install_ubuntu() ...@@ -207,7 +207,7 @@ install_ubuntu()
if [ ! -e "$cache/rootfs-$arch" ]; then if [ ! -e "$cache/rootfs-$arch" ]; then
download_ubuntu $cache $arch download_ubuntu $cache $arch
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Failed to download 'ubuntu base'" echo "Failed to download 'ubuntu lucid base'"
return 1 return 1
fi fi
fi fi
...@@ -274,7 +274,7 @@ EOF ...@@ -274,7 +274,7 @@ EOF
clean() clean()
{ {
cache="/var/cache/lxc/ubuntu" cache="/var/cache/lxc/lucid"
if [ ! -e $cache ]; then if [ ! -e $cache ]; then
exit 0 exit 0
...@@ -347,13 +347,13 @@ rootfs=$path/rootfs ...@@ -347,13 +347,13 @@ rootfs=$path/rootfs
install_ubuntu $rootfs install_ubuntu $rootfs
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "failed to install ubuntu" echo "failed to install ubuntu lucid"
exit 1 exit 1
fi fi
configure_ubuntu $rootfs $name configure_ubuntu $rootfs $name
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "failed to configure ubuntu for a container" echo "failed to configure ubuntu lucid for a container"
exit 1 exit 1
fi fi
......
#!/bin/bash
#
# template script for generating ubuntu/maverick container for LXC
#
# This script is based on lxc-debian (Daniel Lezcano <daniel.lezcano@free.fr>)
#
# Copyright 2010 Wilhelm Meier
# Author: Wilhelm Meier <wilhelm.meier@fh-kl.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2, as
# published by the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
configure_ubuntu()
{
rootfs=$1
hostname=$2
# configure the network using the dhcp
cat <<EOF > $rootfs/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
EOF
sed -i "s/<hostname>/$hostname/" $rootfs/etc/dhcp3/dhclient.conf
# set the hostname
cat <<EOF > $rootfs/etc/hostname
$hostname
EOF
# set minimal hosts
cat <<EOF > $rootfs/etc/hosts
127.0.0.1 localhost $hostname
EOF
# tweak consoles
rm -f $rootfs/etc/init/tty{5,6}.conf
cp $rootfs/etc/init/tty1.conf $rootfs/etc/init/console.conf
sed -i 's/tty1/\/dev\/console/' $rootfs/etc/init/console.conf
# don't let upstart mount anything from its builtin fs
echo "#Emptied out by lxc-maverick template" > $rootfs/lib/init/fstab
echo "Please change root-password !"
echo "root:root" | chroot $rootfs chpasswd
return 0
}
download_ubuntu()
{
packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,vim,dhcp3-client,ssh,lsb-release,gnupg
cache=$1
arch=$2
# check the mini ubuntu was not already downloaded
mkdir -p "$cache/partial-$arch"
if [ $? -ne 0 ]; then
echo "Failed to create '$cache/partial-$arch' directory"
return 1
fi
# download a mini ubuntu into a cache
echo "Downloading ubuntu maverick minimal ..."
debootstrap --verbose --variant=minbase --components=main,universe --arch=$arch --include=$packages maverick $cache/partial-$arch
if [ $? -ne 0 ]; then
echo "Failed to download the rootfs, aborting."
return 1
fi
mv "$1/partial-$arch" "$1/rootfs-$arch"
echo "Download complete."
return 0
}
copy_ubuntu()
{
cache=$1
arch=$2
rootfs=$3
# make a local copy of the miniubuntu
echo -n "Copying rootfs to $rootfs ..."
cp -a $cache/rootfs-$arch $rootfs || return 1
return 0
}
install_ubuntu()
{
cache="/var/cache/lxc/maverick"
rootfs=$1
mkdir -p /var/lock/subsys/
(
flock -n -x 200
if [ $? -ne 0 ]; then
echo "Cache repository is busy."
return 1
fi
arch=$(arch)
if [ "$arch" == "x86_64" ]; then
arch=amd64
fi
if [ "$arch" == "i686" ]; then
arch=i386
fi
echo "Checking cache download in $cache/rootfs-$arch ... "
if [ ! -e "$cache/rootfs-$arch" ]; then
download_ubuntu $cache $arch
if [ $? -ne 0 ]; then
echo "Failed to download 'ubuntu maverick base'"
return 1
fi
fi
echo "Copy $cache/rootfs-$arch to $rootfs ... "
copy_ubuntu $cache $arch $rootfs
if [ $? -ne 0 ]; then
echo "Failed to copy rootfs"
return 1
fi
return 0
) 200>/var/lock/subsys/lxc
return $?
}
copy_configuration()
{
path=$1
rootfs=$2
name=$3
cat <<EOF >> $path/config
lxc.utsname = $name
lxc.tty = 4
lxc.pts = 1024
lxc.rootfs = $rootfs
lxc.mount = $path/fstab
lxc.cgroup.devices.deny = a
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
#lxc.cgroup.devices.allow = c 4:0 rwm
#lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm
EOF
cat <<EOF > $path/fstab
proc $rootfs/proc proc nodev,noexec,nosuid 0 0
devpts $rootfs/dev/pts devpts defaults 0 0
sysfs $rootfs/sys sysfs defaults 0 0
EOF
if [ $? -ne 0 ]; then
echo "Failed to add configuration"
return 1
fi
return 0
}
clean()
{
cache="/var/cache/lxc/maverick"
if [ ! -e $cache ]; then
exit 0
fi
# lock, so we won't purge while someone is creating a repository
(
flock -n -x 200
if [ $? != 0 ]; then
echo "Cache repository is busy."
exit 1
fi
echo -n "Purging the download cache..."
rm --preserve-root --one-file-system -rf $cache && echo "Done." || exit 1
exit 0
) 200>/var/lock/subsys/lxc
}
usage()
{
cat <<EOF
$1 -h|--help -p|--path=<path> --clean
EOF
return 0
}
options=$(getopt -o hp:n:c -l help,path:,name:,clean -- "$@")
if [ $? -ne 0 ]; then
usage $(basename $0)
exit 1
fi
eval set -- "$options"
while true
do
case "$1" in
-h|--help) usage $0 && exit 0;;
-p|--path) path=$2; shift 2;;
-n|--name) name=$2; shift 2;;
-c|--clean) clean=$2; shift 2;;
--) shift 1; break ;;
*) break ;;
esac
done
if [ ! -z "$clean" -a -z "$path" ]; then
clean || exit 1
exit 0
fi
type debootstrap
if [ $? -ne 0 ]; then
echo "'debootstrap' command is missing"
exit 1
fi
if [ -z "$path" ]; then
echo "'path' parameter is required"
exit 1
fi
if [ "$(id -u)" != "0" ]; then
echo "This script should be run as 'root'"
exit 1
fi
rootfs=$path/rootfs
install_ubuntu $rootfs
if [ $? -ne 0 ]; then
echo "failed to install ubuntu maverick"
exit 1
fi
configure_ubuntu $rootfs $name
if [ $? -ne 0 ]; then
echo "failed to configure ubuntu maverick for a container"
exit 1
fi
copy_configuration $path $rootfs $name
if [ $? -ne 0 ]; then
echo "failed write configuration file"
exit 1
fi
if [ ! -z $clean ]; then
clean || exit 1
exit 0
fi
#!/bin/bash
#
# template script for generating ubuntu/natty container for LXC
#
# This script is based on lxc-debian (Daniel Lezcano <daniel.lezcano@free.fr>)
#
# Copyright 2010 Wilhelm Meier
# Author: Wilhelm Meier <wilhelm.meier@fh-kl.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2, as
# published by the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
configure_ubuntu()
{
rootfs=$1
hostname=$2
# configure the network using the dhcp
cat <<EOF > $rootfs/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
EOF
# so you can 'ssh $hostname.' or 'ssh $hostname.local'
sed -i "s/<hostname>/$hostname/" $rootfs/etc/dhcp/dhclient.conf
# set the hostname
cat <<EOF > $rootfs/etc/hostname
$hostname
EOF
# set minimal hosts
cat <<EOF > $rootfs/etc/hosts
127.0.0.1 localhost $hostname
EOF
# tweak consoles
rm -f $rootfs/etc/init/tty{5,6}.conf
cp $rootfs/etc/init/tty1.conf $rootfs/etc/init/console.conf
sed -i 's/tty1/\/dev\/console/' $rootfs/etc/init/console.conf
# don't let upstart mount anything from its builtin fs
echo "#Emptied out by lxc-natty template" > $rootfs/lib/init/fstab
echo "Please change root-password !"
echo "root:root" | chroot $rootfs chpasswd
return 0
}
download_ubuntu()
{
packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,vim,isc-dhcp-client,isc-dhcp-common,ssh,lsb-release,gnupg
cache=$1
arch=$2
# check the mini ubuntu was not already downloaded
mkdir -p "$cache/partial-$arch"
if [ $? -ne 0 ]; then
echo "Failed to create '$cache/partial-$arch' directory"
return 1
fi
# download a mini ubuntu into a cache
echo "Downloading ubuntu natty minimal ..."
debootstrap --verbose --variant=minbase --components=main,universe --arch=$arch --include=$packages natty $cache/partial-$arch
if [ $? -ne 0 ]; then
echo "Failed to download the rootfs, aborting."
return 1
fi
mv "$1/partial-$arch" "$1/rootfs-$arch"
echo "Download complete."
return 0
}
copy_ubuntu()
{
cache=$1
arch=$2
rootfs=$3
# make a local copy of the miniubuntu
echo -n "Copying rootfs to $rootfs ..."
cp -a $cache/rootfs-$arch $rootfs || return 1
return 0
}
install_ubuntu()
{
cache="/var/cache/lxc/natty"
rootfs=$1
mkdir -p /var/lock/subsys/
(
flock -n -x 200
if [ $? -ne 0 ]; then
echo "Cache repository is busy."
return 1
fi
arch=$(arch)
if [ "$arch" == "x86_64" ]; then
arch=amd64
fi
if [ "$arch" == "i686" ]; then
arch=i386
fi
echo "Checking cache download in $cache/rootfs-$arch ... "
if [ ! -e "$cache/rootfs-$arch" ]; then
download_ubuntu $cache $arch
if [ $? -ne 0 ]; then
echo "Failed to download 'ubuntu natty base'"
return 1
fi
fi
echo "Copy $cache/rootfs-$arch to $rootfs ... "
copy_ubuntu $cache $arch $rootfs
if [ $? -ne 0 ]; then
echo "Failed to copy rootfs"
return 1
fi
return 0
) 200>/var/lock/subsys/lxc
return $?
}
copy_configuration()
{
path=$1
rootfs=$2
name=$3
cat <<EOF >> $path/config
lxc.utsname = $name
lxc.tty = 4
lxc.pts = 1024
lxc.rootfs = $rootfs
lxc.mount = $path/fstab
lxc.cgroup.devices.deny = a
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
#lxc.cgroup.devices.allow = c 4:0 rwm
#lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm
EOF
cat <<EOF > $path/fstab
proc $rootfs/proc proc nodev,noexec,nosuid 0 0
devpts $rootfs/dev/pts devpts defaults 0 0
sysfs $rootfs/sys sysfs defaults 0 0
EOF
if [ $? -ne 0 ]; then
echo "Failed to add configuration"
return 1
fi
return 0
}
clean()
{
cache="/var/cache/lxc/natty"
if [ ! -e $cache ]; then
exit 0
fi
# lock, so we won't purge while someone is creating a repository
(
flock -n -x 200
if [ $? != 0 ]; then
echo "Cache repository is busy."
exit 1
fi
echo -n "Purging the download cache..."
rm --preserve-root --one-file-system -rf $cache && echo "Done." || exit 1
exit 0
) 200>/var/lock/subsys/lxc
}
usage()
{
cat <<EOF
$1 -h|--help -p|--path=<path> --clean
EOF
return 0
}
options=$(getopt -o hp:n:c -l help,path:,name:,clean -- "$@")
if [ $? -ne 0 ]; then
usage $(basename $0)
exit 1
fi
eval set -- "$options"
while true
do
case "$1" in
-h|--help) usage $0 && exit 0;;
-p|--path) path=$2; shift 2;;
-n|--name) name=$2; shift 2;;
-c|--clean) clean=$2; shift 2;;
--) shift 1; break ;;
*) break ;;
esac
done
if [ ! -z "$clean" -a -z "$path" ]; then
clean || exit 1
exit 0
fi
type debootstrap
if [ $? -ne 0 ]; then
echo "'debootstrap' command is missing"
exit 1
fi
if [ -z "$path" ]; then
echo "'path' parameter is required"
exit 1
fi
if [ "$(id -u)" != "0" ]; then
echo "This script should be run as 'root'"
exit 1
fi
rootfs=$path/rootfs
install_ubuntu $rootfs
if [ $? -ne 0 ]; then
echo "failed to install ubuntu natty"
exit 1
fi
configure_ubuntu $rootfs $name
if [ $? -ne 0 ]; then
echo "failed to configure ubuntu natty for a container"
exit 1
fi
copy_configuration $path $rootfs $name
if [ $? -ne 0 ]; then
echo "failed write configuration file"
exit 1
fi
if [ ! -z $clean ]; then
clean || exit 1
exit 0
fi
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment