* tentative merge of onelab myplc
[myplc.git] / build_devel.sh
index e8bce85..1f755ec 100755 (executable)
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2006 The Trustees of Princeton University
 #
-# $Id: build_devel.sh,v 1.6 2007/01/11 21:49:52 mlhuang Exp $
+# $Id: build_devel.sh 1078 2007-11-15 13:38:27Z thierry $
 #
 
+echo "$0" not supported anymore
+echo "need to figure a way to handle space in group names in .lst files"
+exit 1
+
 . build.functions
 
 # These directories are allowed to grow to unspecified size, so they
 # expect some of them to be real directories, however.
 datadirs=(
 /etc/planetlab
-/build
-/cvs
 /root
 /tmp
 /usr/tmp
 /var/tmp
 /var/log
 )
-for datadir in "${datadirs[@]}" ; do
-    # If we are being re-run, it may be a symlink
-    if [ -h devel/root/$datadir ] ; then
-       rm -f devel/root/$datadir
-       mkdir -p devel/root/$datadir
-    fi
-done
+
+pl_fixdirs devel/root "${datadirs[@]}"
+
 
 echo "* myplc-devel: Installing base filesystem"
 mkdir -p devel/root
-make_chroot devel/root plc_devel_config.xml
-
-# Import everything (including ourself) into a private CVS tree
-echo "* myplc-devel: Building CVS repository"
-cvsroot=$PWD/devel/data/cvs
-mkdir -p $cvsroot
-cvs -d $cvsroot init
-
-myplc=$(basename $PWD)
-pushd ..
-for dir in * ; do
-    if [ ! -d $cvsroot/$dir ] ; then
-       pushd $dir
-       if [ "$dir" = "$myplc" ] ; then
-           # Ignore generated files
-           ignore="-I ! -I devel -I root -I root.img -I data" 
-       else
-           ignore="-I !"
-       fi
-       cvs -d $cvsroot import -m "Initial import" -ko $ignore $dir planetlab $IMPORT_TAG
-       popd
-    fi
-done
-popd
+# xxx need be pldistro & fcdistro dependant
+make_chroot_from_lst devel/root planetlab-devel.lst
 
 # Install configuration file
 echo "* myplc-devel: Installing configuration file"
@@ -86,24 +62,40 @@ find plc.d/functions | cpio -p -d -u devel/root/etc/
 install -D -m 755 guest.init devel/root/etc/init.d/plc
 chroot devel/root sh -c 'chkconfig --add plc; chkconfig plc on'
 
-# handle root's homedir and tweak root prompt
-echo "* myplc-devel: root's homedir and prompt"
-roothome=devel/data/root
-mkdir -p $roothome
-cat << EOF > $roothome/.profile
-export PS1="<plc-devel> \$PS1"
+# Add a build user with the same ID as the current build user, who can
+# then cross-mount their home directory into the image and build MyPLC
+# in their home directory.
+echo "* myplc-devel: Adding build user"
+uid=${SUDO_UID:-2000}
+gid=${SUDO_GID:-2000}
+if ! grep -q "Automated Build" devel/root/etc/passwd ; then
+    chroot devel/root <<EOF
+groupadd -o -g $gid build
+useradd -o -c 'Automated Build' -u $uid -g $gid -n -d /data/build -M -s /bin/bash build
+exit 0
+EOF
+fi
+
+# Copy build scripts to build home directory
+mkdir -p devel/data/build
+rsync -a $srcdir/build/ devel/data/build/
+
+# Allow build user to build certain RPMs as root
+cat >devel/root/etc/sudoers <<EOF
+root   ALL=(ALL) ALL
+#build ALL=(root) NOPASSWD: /usr/bin/rpmbuild
+build   ALL=(ALL)       NOPASSWD: ALL
 EOF
-chmod 644 $roothome/.profile
 
 # Move "data" directories out of the installation
 echo "* myplc-devel: Moving data directories out of the installation"
-move_datadirs devel/root devel/data "${datadirs[@]}"
+pl_move_dirs devel/root devel/data /data "${datadirs[@]}"
 
 # Fix permissions on tmp directories
-chmod 1777 devel/data/tmp devel/data/usr/tmp devel/data/var/tmp
+pl_fixtmp_permissions devel/data
 
 # Make image out of directory
 echo "* myplc-devel: Building loopback image"
-make_image devel/root devel/root.img
+pl_make_image devel/root devel/root.img 100000000
 
 exit 0