3 # Common functions for MyPLC build scripts (build_devel.sh and
6 # Mark Huang <mlhuang@cs.princeton.edu>
7 # Copyright (C) 2006 The Trustees of Princeton University
9 # $Id: build.functions,v 1.9 2007/08/28 21:52:14 mef Exp $
12 PATH=/sbin:/bin:/usr/sbin:/usr/bin
14 # In both a normal CVS environment and a PlanetLab RPM
15 # build environment, all of our dependencies are checked out into
16 # directories at the same level as us.
17 if [ -d ../build ] ; then
21 echo "Error: Could not find $(cd .. && pwd -P)/build/"
27 # Release and architecture to install
28 PLC_DEVEL_FEDORA_RELEASE=$([ -f "/etc/fedora-release" ] && awk ' { if ($2=="Core") print $4; else print $3 } ' /etc/fedora-release || echo 4)
29 [ $PLC_DEVEL_FEDORA_RELEASE -lt 4 ] && PLC_DEVEL_FEDORA_RELEASE=4
30 PLC_DEVEL_FEDORA_ARCH=$(uname -i)
31 # Fedora Core mirror from which to install filesystems
32 # xxx don't set URL... mkfedora will pick up the right thing
33 #PLC_DEVEL_FEDORA_URL=file:///data/fedora
36 # We may be running inside a myplc-devel environment, which can
37 # override these defaults.
38 if [ -f /etc/planetlab/plc_config ] ; then
39 . /etc/planetlab/plc_config
44 echo "Usage: $0 [OPTION]..."
45 echo " -l url Fedora mirror location (default: $PLC_DEVEL_FEDORA_URL)"
46 echo " -r release Fedora release number (default: $PLC_DEVEL_FEDORA_RELEASE)"
47 echo " -a arch Fedora architecture (default: $PLC_DEVEL_FEDORA_ARCH)"
48 echo " -h This message"
53 while getopts "l:r:a:h" opt ; do
56 PLC_DEVEL_FEDORA_URL=$OPTARG
59 PLC_DEVEL_FEDORA_RELEASE=$OPTARG
62 PLC_DEVEL_FEDORA_ARCH=$OPTARG
70 # Do not tolerate errors
76 # Make a basic chroot at the specified location given the specified
85 groups="$groups -g \"$group\""
86 done < <(./plc-config --groups $config)
90 while read package ; do
91 packages="$packages -p \"$package\""
92 done < <(./plc-config --packages $config)
95 if [ ! -z "$PLC_DEVEL_FEDORA_URL" ] ; then
96 eval mkfedora -v -l $PLC_DEVEL_FEDORA_URL -r $PLC_DEVEL_FEDORA_RELEASE -a $PLC_DEVEL_FEDORA_ARCH $packages $groups $root
98 eval mkfedora -v -r $PLC_DEVEL_FEDORA_RELEASE -a $PLC_DEVEL_FEDORA_ARCH $packages $groups $root
101 # Disable all services in reference image
102 chroot $root sh -c "/sbin/chkconfig --list | awk '{ print \$1 }' | xargs -i /sbin/chkconfig {} off"
104 # FC2 minilogd starts up during shutdown and makes unmounting
105 # impossible. Just get rid of it.
106 rm -f $root/sbin/minilogd
107 ln -nsf /bin/true $root/sbin/minilogd
110 # Move specified directories out of the chroot and into a "data"
111 # directory that will be bind mounted on /data inside the chroot.
118 for datadir in "$@" ; do
119 mkdir -p ${data}$datadir
120 if [ -d $root/$datadir -a ! -h $root/$datadir ] ; then
121 (cd $root && find ./$datadir | cpio -p -d -u ../$data/)
123 rm -rf $root/$datadir
124 mkdir -p $(dirname $root/$datadir)
125 ln -nsf /data$datadir $root/$datadir
129 # Make loopback filesystem from specified location
134 # Leave about 100 MB free space and allow for about 20% inode overhead
135 bytes=$((($(du -sb $root | cut -f1) + 100000000) * 120 / 100))
137 blocks=$(($bytes / $bs))
138 dd bs=$bs count=$blocks if=/dev/zero of=$image
139 mkfs.ext3 -b $bs -j -F $image
141 # Temporarily mount it
142 tmp=$(mktemp -d tmp.XXXXXX)
143 mount -o loop $image $tmp
144 trap "umount $tmp; rmdir $tmp" ERR INT
147 (cd $root && tar cpf - .) | (cd $tmp && tar xpf -)