Files
xen/tools/misc/xen-clone
T
kaf24@firebug.cl.cam.ac.uk ba4a95bee1 In some cases, say for instance for some bizzare reason
the tree was checked out of CVS, which doens't neccessarily
store file permissions, mkbuildtree may not be executable.
So run them explicitly via bash.

Signed-Off-By: Horms <horms@verge.net.au>
2006-04-13 11:24:00 +01:00

135 lines
3.3 KiB
Bash
Executable File

#!/bin/sh -x
# usage: xen-clone hg_repository dest_dir orig_linux_dir
#
# this script contains some CL site specific details, but can easily be adapted
#
# test which site we're on
[ -d /usr/groups/xeno/ -a -d /usr/groups/srgboot ] && SITE=UCCL
case "$SITE" in
UCCL)
BK_REP=${1:-http://hg.srg.cl.cam.ac.uk/xen-unstable.hg}
LINUX_DIR=${3:-/usr/groups/xeno/archive/}
;;
*)
BK_REP=${1:-http://xenbits.xensource.com/xen-unstable.hg}
LINUX_DIR=${3:-.:..}
;;
esac
DEST_DIR=${2:-xeno-clone}
DEST_BK_REP=`basename "${BK_REP}"`
DEST_VER=`basename ${DEST_BK_REP} .hg`
echo usage: xen-clone hg dest_dir orig_linux_dir
echo Source BK Repository : ${BK_REP}
echo Destination Dir/Repository : ${DEST_DIR}/${DEST_BK_REP}
echo Pristine Linux Source directory : ${LINUX_DIR}
mkdir -p ${DEST_DIR}
cd ${DEST_DIR}
TOP=`/bin/pwd`
# site-specific set up of installation directories
case "$SITE" in
UCCL)
PATH=$PATH:/usr/groups/xeno/build_tools/bin
mkdir -p install/boot
cd install/boot
ln -sf ../../../xeno-roots/roots .
ln -sf ../../../xeno-roots/usr .
ln -sf ../lib .
ln -sf ../bin .
ln -sf /usr/groups/srgboot/${USER}/xenoboot.sh .
ln -sf `pwd` /usr/groups/srgboot/${USER}/${DEST_DIR}
ln -sf xen.gz image.gz
cd ../..
;;
esac
# clone the master repository (now checked-out by default)
if [ ! -d ${DEST_BK_REP} ]
then
mkdir -p ${DEST_BK_REP} ; cd ${DEST_BK_REP} ; hg init ${BK_REP} ; hg co ; cd ${TOP}
else
cd ${DEST_BK_REP}
hg pull ; hg co
cd ${TOP}
fi
if [ -d ${DEST_BK_REP}/linux-2.4*-xen-sparse ]
then
# this is a new style Xen repository so building is dead easy
export LINUX_SRC_PATH=${LINUX_DIR}
cd ${DEST_BK_REP}
# Recent repositories install into 'dist/install' rather than 'install'.
if [ -f install.sh ]
then
mkdir -p dist
ln -sf ../../install dist/install
else
ln -sf ../install install
fi
make -j4 KERNELS=linux-* world
#make -j4 linux24
cd ../install/boot
if [ -r vmlinuz-2.6-xen0 ]
then
ln -s vmlinuz-2.6-xen0 xenolinux.gz
else
kern=`ls vmlinuz-2.6.*-xen0 | head -1`
[ -r "$kern" ] && ln -s "$kern" xenolinux.gz
fi
else
# old style repository without 'make world'
# identify this version of linux
LINUX_VER=`( /bin/ls -ld ${DEST_BK_REP}/*xenolinux-sparse || /bin/ls -ld ${DEST_BK_REP}/*xenolinux-*-sparse ) 2>/dev/null | sed -e 's!^.*xenolinux-\(.\+\)-sparse!\1!'`
if [ -z "${LINUX_VER}" ]
then
echo Unable to identify Linux version. Bailing.
exit -1
fi
# copy in the master Linux tree for this kernel
if [ ! -d linux-${LINUX_VER} ]
then
tar -jxf ${LINUX_DIR}/linux-${LINUX_VER}.tar.bz2 || tar -zxf ${LINUX_DIR}/linux-${LINUX_VER}.tar.gz || tar -zxf ${LINUX_DIR}/linux-${LINUX_VER}.tgz || cp -a ${LINUX_DIR}/linux-${LINUX_VER} . || wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-${LINUX_VER}.tar.gz -O- | tar -zxf - || exit -1
fi
# build and install Xen and tools
cd ${DEST_BK_REP}
make dist || make install
# Turn linux into xenolinux then build it
cd xenolinux-${LINUX_VER}-sparse
bash ./mkbuildtree ../../linux-${LINUX_VER}
cd ../..
mv linux-${LINUX_VER} xenolinux-${LINUX_VER}
cd xenolinux-${LINUX_VER}
# cope with the change from ARCH=xeno to ARCH=xen
cd arch; XEN=`/bin/ls -d xen*`; cd ..
# built it all
ARCH=$XEN make oldconfig
ARCH=$XEN make dep
ARCH=$XEN make bzImage
ARCH=$XEN make dist || ARCH=xen make install
ARCH=$XEN make modules
ARCH=$XEN make INSTALL_MOD_PATH=${TOP}/install modules_install
cd ..
fi