#!/bin/bash
# -*-shell-*-
-# $Id$
#shopt -s huponexit
DIRNAME=$(dirname $0)
# pkgs parsing utilities
-PATH=$(dirname $0):$PATH . build.common
+PATH=$(dirname $0):$PATH export PATH
+. build.common
DEFAULT_FCDISTRO=f8
DEFAULT_PLDISTRO=planetlab
function package_method () {
fcdistro=$1; shift
case $fcdistro in
- f[0-9]*|centos[0-9]*) echo yum ;;
+ f[0-9]*|centos[0-9]*|sl[0-9]*) echo yum ;;
lenny|etch) echo debootstrap ;;
*) echo Unknown distro $fcdistro ;;
esac
fi
fi
+ BCAPFILE=/etc/vservers/$vserver/bcapabilities
+ touch $BCAPFILE
if [ -n "$VBUILD_MODE" ] ; then
### capabilities required for a build vserver
# set up appropriate vserver capabilities to mount, mknod and IPC_LOCK
- BCAPFILE=/etc/vservers/$vserver/bcapabilities
- touch $BCAPFILE
- cap=$(grep ^CAP_SYS_ADMIN /etc/vservers/$vserver/bcapabilities | wc -l)
- [ $cap -eq 0 ] && echo 'CAP_SYS_ADMIN' >> /etc/vservers/$vserver/bcapabilities
- cap=$(grep ^CAP_MKNOD /etc/vservers/$vserver/bcapabilities | wc -l)
- [ $cap -eq 0 ] && echo 'CAP_MKNOD' >> /etc/vservers/$vserver/bcapabilities
- cap=$(grep ^CAP_IPC_LOCK /etc/vservers/$vserver/bcapabilities | wc -l)
- [ $cap -eq 0 ] && echo 'CAP_IPC_LOCK' >> /etc/vservers/$vserver/bcapabilities
+ grep -q ^CAP_SYS_ADMIN $BCAPFILE || echo CAP_SYS_ADMIN >> $BCAPFILE
+ grep -q ^CAP_MKNOD $BCAPFILE || echo CAP_MKNOD >> $BCAPFILE
+ grep -q ^CAP_IPC_LOCK $BCAPFILE || echo CAP_IPC_LOCK >> $BCAPFILE
+ # useful for f15 guests that use set_cap_file
+ grep -q ^CAP_SETFCAP $BCAPFILE || echo CAP_SETFCAP >> $BCAPFILE
else
### capabilities required for a myplc vserver
# for /etc/plc.d/gpg - need to init /dev/random
- cap=$(grep ^CAP_MKNOD /etc/vservers/$vserver/bcapabilities | wc -l)
- [ $cap -eq 0 ] && echo 'CAP_MKNOD' >> /etc/vservers/$vserver/bcapabilities
- cap=$(grep ^CAP_NET_BIND_SERVICE /etc/vservers/$vserver/bcapabilities | wc -l)
- [ $cap -eq 0 ] && echo 'CAP_NET_BIND_SERVICE' >> /etc/vservers/$vserver/bcapabilities
+ grep -q ^CAP_MKNOD $BCAPFILE || echo CAP_MKNOD >> $BCAPFILE
+ grep -q ^CAP_NET_BIND_SERVICE $BCAPFILE || echo CAP_NET_BIND_SERVICE >> $BCAPFILE
+ # useful for f15 guests that use set_cap_file
+ grep -q ^CAP_SETFCAP $BCAPFILE || echo CAP_SETFCAP >> $BCAPFILE
fi
+ # Set persistent for the network context
+ # Thierry: Daniel's kernels come with single_ip turned off by default, let's make this explicit
+ echo "persistent,lback_allow,~single_ip" > /etc/vservers/$vserver/nflags
+
+ # Set cflags
+ echo -e "persistent\n~info_init" > /etc/vservers/$vserver/cflags
+
+ # Enable cgroup
+ mkdir /etc/vservers/$vserver/cgroup
+
+ # Start Vserver automatically on boot
+ echo "default" > /etc/vservers/$vserver/apps/init/mark
+
+ # Set the init style of your vserver to plain for f15 and higher
+ # not working with f15 anyways, systemd requires 2.6.36 to work
+ case $fcdistro in
+ f1[5-9]) echo plain > /etc/vservers/$vserver/apps/init/style ;;
+ esac
+
if [ "$pkg_method" = "yum" ] ; then
$personality vyum $vserver -- -y install yum
# ditto
function translate_rpm_hashes () {
set -x
set -e
+ local personality="$1"; shift
local vserver="$1"; shift
# need to have utilities installed
type -p file
files=$(cd $host_dir ; file * | grep Hash | cut -d: -f 1)
for file in $files; do
(cd $host_dir && mv $file ${file}-foreign)
- /usr/lib/rpm/rpmdb_dump $host_dir/${file}-foreign | vserver $VERBOSE $vserver exec /usr/lib/rpm/rpmdb_load $guest_dir/$file
+ /usr/lib/rpm/rpmdb_dump $host_dir/${file}-foreign | $personality vserver $VERBOSE $vserver exec /usr/lib/rpm/rpmdb_load $guest_dir/$file
done
+ $personality vserver $VERBOSE $vserver exec rpm --rebuilddb
return 0
}
# try the simple way, if that fails try to cross fix the rpm hashes
- $personality vserver $VERBOSE $vserver exec rpm --rebuilddb || translate_rpm_hashes $vserver
+ $personality vserver $VERBOSE $vserver exec rpm --rebuilddb || translate_rpm_hashes $personality $vserver
fi
# check if the vserver kernel is using VSERVER_DEVICE (vdevmap) support
packages=$(pl_getPackages -a $vserver_arch $fcdistro $pldistro $pkgsfile)
groups=$(pl_getGroups -a $vserver_arch $fcdistro $pldistro $pkgsfile)
- [ "$pkg_method" = yum ] && [ -n "$packages" ] && $personality vserver $vserver exec yum -y install $packages
- [ "$pkg_method" = yum ] && for group_plus in $groups; do
- group=$(echo $group_plus | sed -e "s,+++, ,g")
- $personality vserver $vserver exec yum -y groupinstall "$group"
- done
+ case "$pkg_method" in
+ yum)
+ [ -n "$packages" ] && $personality vserver $vserver exec yum -y install $packages
+ for group_plus in $groups; do
+ group=$(echo $group_plus | sed -e "s,+++, ,g")
+ $personality vserver $vserver exec yum -y groupinstall "$group"
+ done
+ # store current rpm list in /init-vserver.rpms in case we need to check the contents
+ $personality vserver $vserver exec rpm -aq > /vservers/$vserver/init-vserver.rpms
+ ;;
+ debootstrap)
+ $personality vserver $vserver exec apt-get update
+ for package in $packages ; do
+ $personality vserver $vserver exec apt-get install -y $package
+ done
+ ### xxx todo install groups with apt..
+ ;;
+ *)
+ echo "unknown pkg_method $pkg_method"
+ ;;
+ esac
- [ "$pkg_method" = debootstrap ] && $personality vserver $vserver exec apt-get update
- [ "$pkg_method" = debootstrap ] && for package in $packages ; do
- $personality vserver $vserver exec apt-get install -y $package
- done
-
return 0
}