2007-07-10 10:48:04 +01:00
#!/bin/bash
BUILD_LOG=~/public_html/BuildLive.out
ALWAYS_SEND_LOG=yes
2011-07-15 11:19:49 -06:00
LANG=C
2007-07-10 10:48:04 +01:00
finish() {
[ $? != "0" ] && STATUS="Failed" || STATUS="Successful"
if [ "$STATUS" = "Failed" ] || [ "$ALWAYS_SEND_LOG" = "yes" ]; then
SEND_LOG=yes
fi
if [ -e "$LOG" ]; then
echo "======================= Log of livefs.sh output follows ======================="
cat $LOG
fi
if [ "$SEND_LOG" = "yes" ]; then
exec >/dev/null 2>&1
2011-09-06 15:25:52 +02:00
mailx -s "LiveCD: $STATUS $STE:$FS${SUBPROJECT:+-$SUBPROJECT}${SUBARCH:+-$SUBARCH}${UBUNTU_DEFAULTS_LOCALE:+-$UBUNTU_DEFAULTS_LOCALE} build on ${ARCH}" buildd+porters < "$BUILD_LOG"
2007-07-10 10:48:04 +01:00
fi
rm -f ~/buildLiveCD.lock
nohup ~/bin/pruneLiveCD >/dev/null 2>&1 &
}
if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
set -- $SSH_ORIGINAL_COMMAND
[ ${1##*/} != 'BuildLiveCD' ] && echo bad command >&2 && exit 2
shift
fi
2009-05-29 09:19:59 +02:00
ARCH=$(dpkg --print-architecture)
2007-07-10 10:48:04 +01:00
SUBARCH=""
SUBARCHARG=""
2011-12-05 07:50:14 -07:00
NEWSUITE="precise"
2007-07-10 10:48:04 +01:00
SUITES=""
PROPOSED=""
2010-06-25 17:30:28 +02:00
IMAGEFORMAT=""
2011-06-13 12:35:47 +01:00
LIVE_BUILD=false
2011-08-23 18:35:56 +01:00
UBUNTU_DEFAULTS_LOCALE=""
2010-06-03 18:40:10 +02:00
2013-03-28 16:02:12 +01:00
while getopts :A:s:r:d:f:pa:lu:t: name; do case $name in
2012-01-09 03:23:26 -07:00
A) ARCH="$OPTARG";;
2010-06-03 18:40:10 +02:00
s) SUBARCH="$OPTARG";;
2011-07-06 17:21:48 +01:00
r) SUBPROJECT="$OPTARG";;
2010-06-03 18:40:10 +02:00
d) NEWSUITE="$OPTARG";;
2011-06-15 14:40:05 +01:00
f) IMAGEFORMAT="$OPTARG";;
2010-06-03 18:40:10 +02:00
p) PROPOSED="-p";;
2010-07-20 22:38:10 +02:00
a) APT_SOURCE="-A $OPTARG";;
2011-06-13 12:35:47 +01:00
l) LIVE_BUILD=:;;
2011-08-23 18:35:56 +01:00
u) UBUNTU_DEFAULTS_LOCALE="$OPTARG";;
2013-03-28 16:02:12 +01:00
t) UBUNTU_TOUCH_ANDROID="$OPTARG";;
2010-06-03 18:40:10 +02:00
esac; done;
shift $((OPTIND-1))
2010-06-29 12:54:35 +02:00
if [ -n "$SUBARCH" ]; then
SUBARCHARG="-s$SUBARCH"
fi
2007-07-10 10:48:04 +01:00
for s in $NEWSUITE; do
if [ -d build-${s}-live/chroot-${s} ]; then SUITES="$SUITES $s"; fi
done
if [ -z "$SUITES" ]; then
echo "No valid suites to build for" >&2 && exit 1
fi
2008-05-02 15:44:17 -06:00
for s in $SUITES; do
case $s in
dapper|edgy|feisty|gutsy|hardy)
ARCHARG=""
old_suite="yes"
;;
*)
ARCHARG="-a$ARCH"
new_suite="yes"
;;
esac
done
if [ "$new_suite" = "yes" ] && [ "$old_suite" = "yes" ]; then
echo "Can't build images for suites older than intrepid and suites" >&2
echo "greater than hardy at the same time, please use two invocations" >&2
exit 1
fi
2011-06-13 12:35:47 +01:00
if ([ $# = 0 ] || [ "X$1" = "Xall" ]) && ! $LIVE_BUILD; then
2012-02-22 11:58:20 +00:00
set -- ubuntu kubuntu kubuntu-active edubuntu xubuntu mythbuntu base
2007-09-07 19:11:03 +01:00
if [ "$ARCH" = "i386" ]; then
2012-02-22 11:58:20 +00:00
set -- ubuntu ubuntu-dvd ubuntu-lpia ubuntu-netbook kubuntu kubuntu-dvd kubuntu-active edubuntu edubuntu-dvd xubuntu mythbuntu base
2007-09-07 19:11:03 +01:00
fi
2007-07-10 10:48:04 +01:00
fi
case ${ARCH} in
hppa|sparc|powerpc) LINUX32=linux32;;
*) LINUX32="";;
esac
if [ "`echo $@ | wc -w`" -gt "1" ]; then
for arg in "$@"; do
$0 $arg
done
exit 0
fi
2011-06-13 12:35:47 +01:00
FS="$1"
2011-07-06 17:21:48 +01:00
shift
2007-07-10 10:48:04 +01:00
lockfile ~/buildLiveCD.lock || exit 1
trap "finish" 0
trap "rm -f ~/buildLiveCD.lock; exit 1" 1 2 3 15
exec > $BUILD_LOG 2>&1
set -e
2010-06-26 07:37:46 -06:00
for STE in $SUITES; do
if [ -d ~/build-${STE}-live/chroot-${STE} ]; then
sudo chroot ~/build-${STE}-live/chroot-${STE} apt-get -qq update || true
sudo chroot ~/build-${STE}-live/chroot-${STE} apt-get -y dist-upgrade || true
2011-09-06 15:25:52 +02:00
sudo chroot ~/build-${STE}-live/chroot-${STE} apt-get -y install livecd-rootfs || true
2011-09-14 12:15:02 +01:00
sudo chroot ~/build-${STE}-live/chroot-${STE} apt-get -y --install-recommends install ubuntu-defaults-builder || true
2010-06-26 07:37:46 -06:00
fi
done
2007-07-10 10:48:04 +01:00
for STE in $SUITES; do
if cd ~/build-${STE}-live 2>/dev/null; then
DIR=~/build-${STE}-live/chroot-${STE}/./build/
else
cd ~/build.live
DIR=~/build.live/chroot-${STE}/./build/
fi
2011-08-24 12:25:52 +01:00
PUBDIR=~/public_html/LiveCD/${STE}/${FS}${SUBPROJECT:+-$SUBPROJECT}${SUBARCH:+-$SUBARCH}${UBUNTU_DEFAULTS_LOCALE:+-$UBUNTU_DEFAULTS_LOCALE}/
2011-06-13 12:35:47 +01:00
mkdir -p ${PUBDIR}
2007-07-10 10:48:04 +01:00
2011-06-13 12:35:47 +01:00
NOW=$(date +%Y%m%d)
if [ -d ${PUBDIR}${NOW} ]; then
typeset -i n=1; while [ -d ${PUBDIR}${NOW}.$n ]; do n=n+1; done
NOW=${NOW}.$n
fi
NOW=${NOW}
LOG=${PUBDIR}${NOW}/livecd-${NOW}-${ARCH}.out
2007-07-10 10:48:04 +01:00
2011-06-13 12:35:47 +01:00
rm -f ${PUBDIR}latest
ln -sf ${PUBDIR}${NOW} ${PUBDIR}latest
mkdir -p ${PUBDIR}${NOW}
2011-06-13 23:32:40 +01:00
> ${LOG}
2013-04-11 11:28:08 +02:00
ln -sf livecd-${NOW}-${ARCH}.out ${PUBDIR}${NOW}/livecd-${ARCH}.out
2011-06-13 12:35:47 +01:00
if $LIVE_BUILD; then
2011-06-13 23:32:40 +01:00
$LINUX32 sudo chroot ${DIR%/./*} sh -c "cd /${DIR#*/./} && rm -rf auto && mkdir -p auto && for f in config build clean; do ln -s /usr/share/livecd-rootfs/live-build/auto/\$f auto/; done" >> ${LOG} 2>&1 || true
2011-06-13 12:35:47 +01:00
$LINUX32 sudo chroot ${DIR%/./*} sh -c "cd /${DIR#*/./} && lb clean --purge" >> ${LOG} 2>&1 || true
2012-06-30 07:13:50 +01:00
if ! $LINUX32 sudo chroot ${DIR%/./*} sh -c "cd /${DIR#*/./} && SUITE=${STE} PROJECT=${FS} SUBPROJECT=${SUBPROJECT} ARCH=${ARCH} SUBARCH=${SUBARCH} IMAGEFORMAT=${IMAGEFORMAT} PROPOSED=${PROPOSED:+1} lb config" >> ${LOG} 2>&1; then
2011-06-13 12:35:47 +01:00
exit 1
fi
2011-07-06 11:59:24 +01:00
COMMAND="PROJECT=${FS} SUBPROJECT=${SUBPROJECT} ARCH=${ARCH} SUBARCH=${SUBARCH} lb build"
2011-08-23 18:35:56 +01:00
elif [ "$UBUNTU_DEFAULTS_LOCALE" ]; then
2011-10-07 18:29:59 +02:00
COMMAND="ubuntu-defaults-image --locale ${UBUNTU_DEFAULTS_LOCALE} --arch ${ARCH} --release ${STE}"
2013-03-28 16:02:12 +01:00
elif [ "$UBUNTU_TOUCH_ANDROID" ]; then
COMMAND="/usr/sbin/ubuntu-touch-android.sh ${SUBARCH}"
2011-06-13 12:35:47 +01:00
else
2011-06-15 14:40:05 +01:00
COMMAND="/usr/sbin/livecd.sh ${SUBARCHARG} ${APT_SOURCE} ${PROPOSED} -d${STE} ${IMAGEFORMAT:+-f$IMAGEFORMAT} ${ARCHARG} ${IMAGEARG} ${FS}"
2011-06-13 12:35:47 +01:00
fi
if $LINUX32 sudo chroot ${DIR%/./*} sh -c "cd /${DIR#*/./} && $COMMAND" >> ${LOG} 2>&1; then
rm -f ${PUBDIR}current
ln -sf ${NOW} ${PUBDIR}current
2007-07-10 10:48:04 +01:00
2011-06-13 12:35:47 +01:00
for file in ${DIR}livecd.*; do
if [ -f ${file} ]; then
ext=${file##*.}
base=${file%.*}; base=${base##*/}
sudo chown buildd ${file}
sudo mv ${file} ${PUBDIR}${NOW}/${base}-${NOW}-${ARCH}.${ext}
ln -sf ${base}-${NOW}-${ARCH}.${ext} ${PUBDIR}${NOW}/${base}.${ext}
fi
done
2007-07-10 10:48:04 +01:00
2011-06-13 12:35:47 +01:00
for f in ${PUBDIR}${NOW}/livecd.*.cloop-*; do
2012-01-09 03:23:26 -07:00
if [ -f ${f} ]; then
target=${f%-*}
2011-06-13 12:35:47 +01:00
if [ ! -f ${target} ]; then
2012-01-09 03:23:26 -07:00
for fsbs in 4096:4096 1024:65536; do
if [ -f ${target}-${fsbs} ]; then
ln -sf ${target##*/}-${fsbs} ${target}
break
fi
done
if [ ! -f ${target} ]; then
best=$(ls -ld ${target}-* | sort -k5,5n| awk '{print $NF; quit}')
ln -sf ${best##*/} ${target}
fi
2007-07-10 10:48:04 +01:00
fi
2011-06-13 12:35:47 +01:00
fi
done
else
exit 1
fi
2007-07-10 10:48:04 +01:00
done