From: dlezcano Date: Sun, 30 Nov 2008 15:33:10 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: lxc_0_5_0~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bad691583c0e437427e5b9f55a542b0161f72fd9;p=thirdparty%2Flxc.git *** empty log message *** --- diff --git a/scripts/lxc-debian.in b/scripts/lxc-debian.in new file mode 100755 index 000000000..355b03d87 --- /dev/null +++ b/scripts/lxc-debian.in @@ -0,0 +1,286 @@ +#!/bin/bash +# set -ex + +NAME="debian" +CONFFILE="lxc.conf" +MNTFILE="mount.conf" +UTSNAME= +IPV4="172.20.0.21" +GATEWAY="172.20.0.1" +INTERFACES="/etc/network/interfaces" +INITTAB="/etc/inittab" +HOSTNAME="/etc/hostname" +FSTAB="/etc/fstab" +CACHE="/var/cache/lxc/debian" + +create() { + + # choose a container name, default is 'debian' + echo -n "What is the name for the container ? [$NAME] " + read _NAME_ + + if [ ! -z "$_NAME_" ]; then + NAME=$_NAME_ + fi + + # choose a hostname, default is the container name + echo -n "What hostname do you wish for this container ? [$NAME] " + read _UTSNAME_ + + if [ ! -z "$_UTSNAME_" ]; then + UTSNAME=$_UTSNAME_ + else + UTSNAME=$NAME + fi + + # choose an ipv4 address, better to choose the same network than + # your host + echo -n "What IP address do you wish for this container ? [$IPV4] " + read _IPV4_ + + if [ ! -z "$_IPV4_" ]; then + IPV4=$_IPV4_ + fi + + # choose the gateway ip address + echo -n "What is the gateway IP address ? [$GATEWAY] " + read _GATEWAY_ + + if [ ! -z "$_GATEWAY_" ]; then + GATEWAY=$_GATEWAY_ + fi + + # the rootfs name will be build with the container name + ROOTFS="./rootfs.$NAME" + + # check if the rootfs does already exist + if [ ! -e "$ROOTFS" ]; then + ( + flock -n -x 200 + + RES=$? + if [ "$RES" != "0" ]; then + echo "Cache repository is busy." + break + fi + + echo "Choose your architecture" + select ARCH in amd64 i386; do + echo "Architecture $ARCH selected" + break; + done + + # check the mini debian was not already downloaded + echo -n "Checking cache download ..." + if [ ! -e "$CACHE/rootfs-$ARCH" ]; then + + echo "not cached" + + mkdir -p "$CACHE/rootfs-$ARCH" + + # download a mini debian into a cache + echo "Downloading debian minimal ..." + debootstrap --verbose --variant=minbase --arch=$ARCH \ + --include apache,netbase,net-tools,iproute,openssh-server \ + etch $CACHE/rootfs-$ARCH http://ftp.debian.org/debian + + RESULT=$? + if [ "$RESULT" != "0" ]; then + echo "Failed to download the rootfs, aborting." + exit 1 + fi + echo "Download complete." + else + echo "Found." + fi + + # make a local copy of the minidebian + echo -n "Copying rootfs ..." + cp -a $CACHE/rootfs-$ARCH $ROOTFS && echo "Done." || exit + ) 200>/var/lock/subsys/lxc + fi + + +######################################## +# lxc configuration files +######################################## + +# lxc mount point + +cat < $MNTFILE +/dev $(pwd)/$ROOTFS/dev none bind 0 0 +/dev/pts $(pwd)/$ROOTFS/dev/pts none bind 0 0 +/etc/resolv.conf $(pwd)/$ROOTFS/etc/resolv.conf none ro,bind 0 0 +EOF + +# lxc configuration + +cat < $CONFFILE +lxc.utsname = $UTSNAME +lxc.network.type = veth +lxc.network.flags = up +lxc.network.link = br0 +lxc.network.name = eth0 +lxc.mount = $MNTFILE +lxc.rootfs = $ROOTFS +EOF + + +######################################## +# rootfs configuration files tweak +######################################## + +# inittab + +cat < $ROOTFS/$INITTAB +id:3:initdefault: +si::sysinit:/etc/init.d/rcS +l0:0:wait:/etc/init.d/rc 0 +l1:1:wait:/etc/init.d/rc 1 +l2:2:wait:/etc/init.d/rc 2 +l3:3:wait:/etc/init.d/rc 3 +l4:4:wait:/etc/init.d/rc 4 +l5:5:wait:/etc/init.d/rc 5 +l6:6:wait:/etc/init.d/rc 6 +# Normally not reached, but fallthrough in case of emergency. +z6:6:respawn:/sbin/sulogin +1:2345:respawn:/sbin/getty 38400 console +EOF + +# hostname +cat < $ROOTFS/$HOSTNAME +$UTSNAME +EOF + +# fstab + +cat < $ROOTFS/$FSTAB +tmpfs /dev/shm tmpfs defaults 0 0 +EOF + +# network + +cat < $ROOTFS/$INTERFACES +auto eth0 lo +iface eth0 inet static +address $IPV4 +netmask 255.255.255.0 +broadcast 0.0.0.0 +up route add default gw $GATEWAY +iface lo inet loopback +EOF + +# create the container object + +lxc-create -n $NAME -f $CONFFILE + +# remove the configuration files + +rm -f $CONFFILE +rm -f $MNTFILE + +echo "Done." +echo -e "\nYou can run your container with the 'lxc-start -n $NAME'\n" +} + +destroy() { + + echo -n "What is the name for the container ? [$NAME] " + read _NAME_ + + if [ ! -z "$_NAME_" ]; then + NAME=$_NAME_ + fi + + lxc-destroy -n $NAME + RETVAL=$? + if [ ! $RETVAL -eq 0 ]; then + echo "Failed to destroyed '$NAME'" + return $RETVAL; + fi + + ROOTFS="./rootfs.$NAME" + + echo -n "Shall I remove the rootfs [y/n] ? " + read + if [ "$REPLY" = "y" ]; then + rm -rf $ROOTFS + fi + + return 0 +} + +help() { + cat </var/lock/subsys/lxc +} + +if [ "$(id -u)" != "0" ]; then + echo "This script should be run as 'root'" + exit 1 +fi + +case "$1" in + create) + create;; + destroy) + destroy;; + help) + help;; + purge) + purge;; + *) + echo "Usage: $0 {create|destroy|purge|help}" + exit 1;; +esac