#!/bin/bash : ${MAGERC="/etc/mage.rc"} source /etc/mage.rc.global source ${MAGERC} source ${MLIBDIR}/mage4.functions.sh source ${MLIBDIR}/smage2.functions.sh RESUME="" if [[ $1 = --resume ]] then echo "resume enabled!" RESUME="--resume" shift fi SMAGEFILE="$1" if [[ -z ${SMAGEFILE} ]] then echo "No smagefile given." exit 1 fi [[ -n $2 ]] && [[ $2 != -st ]] && SVN_COMMIT="$2" if [[ $3 = -st ]] || [[ $2 = -st ]] then echo "Using SRCTARBALL ..." USE_SRCTARBALL=true fi #CURARCH=i686 #CURARCH=x86_64 if [[ -z ${CURARCH} ]] then echo "Environment variable \${CURARCH} not given. Aborted." exit 1 fi # get smagedir from given smagefile SMAGESCRIPTSDIR=${SMAGEFILE%/*/*/*} # source distribution file if [[ ${SMAGESCRIPTSDIR}/distribution ]] then source ${SMAGESCRIPTSDIR}/distribution fi # force usage of distrotag here MAGE_FEATURES+=( "pkgdistrotag" ) # load all mage features load_mage_features USE_UNIONFS=false BUILDROOT=/mnt/BUILDROOT-R11-"${CURARCH}" if [[ ${USE_UNIONFS} = true ]] then BUILDROOT_CHROOT=${BUILDROOT}/chroot BUILDROOT_WRITEABLE=${BUILDROOT}/writeable BUILDROOT_LAYEREDFS=${BUILDROOT}/layeredfs fi SMAGEDIR=$(dirname ${SMAGEFILE}) MD5DIR=${SMAGEDIR}/md5 MD5NAME=$(basename $1 .smage2).md5 SMAGENAME=$(basename $1) CURPNAME=$(magename2pname $1) CURPVER=$(magename2pver $1) CURPBUILD=$(magename2pbuild $(basename $1 .smage2)) CURDISTROTAG=$(print_distrotag) PKGNAME=${CURPNAME}-${CURPVER}-${CURARCH}${CURDISTROTAG}-${CURPBUILD}.${PKGSUFFIX} SRCPKGNAME=${CURPNAME}-${CURPVER}-${CURPBUILD}.${SRCPKGSUFFIX} REPO="$(echo ${SMAGEFILE#*trunk/} | cut -d'/' -f1)" #REPO="$(echo ${SMAGEFILE#*branches/magellan-next/} | cut -d'/' -f1)" SSHLOGIN="tjoke@magellan-linux.de:/var/www/htdocs/magellan/R11/packages" SRCTARBALL_URI="http://magellan-linux.de/magellan/R11/packages/src" die() { echo "ERROR: $@" trap_exit exit 1 } is_loc_mounted() { local filesys local i filesys=$1 i="$(cat /proc/mounts | grep " ${filesys} " | cut -d ' ' -f2)" [[ ${i} != ${filesys} ]] && return 1 return 0 } trap_exit() { is_loc_mounted "${BUILDROOT}/dev" && sudo umount ${BUILDROOT}/dev is_loc_mounted "${BUILDROOT}/proc" && sudo umount ${BUILDROOT}/proc is_loc_mounted "${BUILDROOT}/sys" && sudo umount ${BUILDROOT}/sys if [[ ${USE_UNIONFS} = true ]] then is_loc_mounted "${BUILDROOT_LAYEREDFS}" && sudo umount ${BUILDROOT_LAYEREDFS} fi echo "add2svn-r11 aborted" exit 1 } get_value_from_file() { local var="$1" local file="$2" local value # source /etc/mage.rc to get the includes right source /etc/mage.rc.global source /etc/mage.rc # set the right arch ARCH="${CURARCH}" # evaluate the value source ${file} $> /dev/null # fix pcategorie -> pcat if [[ -z ${PCAT} ]] then [[ -n ${PCATEGORIE} ]] && PCAT="${PCATEGORIE}" fi eval value=\$$(echo ${var}) echo "${value}" } get_function_from_file() { local function="$1" local file="$2" # source /etc/mage.rc to get the includes right source /etc/mage.rc.global source /etc/mage.rc # set the right arch ARCH="${CURARCH}" # evaluate the value source ${file} $> /dev/null export -f ${function} } CURPCAT=$(get_value_from_file PCAT ${SMAGEFILE}) if [[ ${USE_UNIONFS} = true ]] then INSTALLDB_BUILDROOT=$(get_value_from_file INSTALLDB ${BUILDROOT}/chroot/etc/mage.rc) else INSTALLDB_BUILDROOT=$(get_value_from_file INSTALLDB ${BUILDROOT}/etc/mage.rc) fi CURSPLITPACKAGES="$(get_value_from_file SPLIT_PACKAGES ${SMAGEFILE})" PKGTYPE="$(get_value_from_file PKGTYPE ${SMAGEFILE})" # set some proper traps trap "trap_exit" SIGINT SIGTERM if [[ ${USE_UNIONFS} = true ]] then # install layeredfs direcories [[ ! -d ${BUILDROOT_CHROOT} ]] && sudo install -d ${BUILDROOT_CHROOT} [[ ! -d ${BUILDROOT_WRITEABLE} ]] && sudo install -d ${BUILDROOT_WRITEABLE} [[ ! -d ${BUILDROOT_LAYEREDFS} ]] && sudo install -d ${BUILDROOT_LAYEREDFS} # mount layeredfs sudo mount -t unionfs -o dirs=${BUILDROOT_WRITEABLE}=rw:${BUILDROOT_CHROOT}=ro unionfs ${BUILDROOT_LAYEREDFS} BUILDROOT=${BUILDROOT_LAYEREDFS} fi sudo mount -t proc proc ${BUILDROOT}/proc sudo mount -t sysfs sysfs ${BUILDROOT}/sys sudo mount -o bind /dev ${BUILDROOT}/dev # abort if the package is already installed in BUILDROOT if [[ -z ${CURSPLITPACKAGES} ]] then if [[ -d ${BUILDROOT}/${INSTALLDB_BUILDROOT}/${CURPCAT}/${CURPNAME}-${CURPVER}-${CURPBUILD} ]] then die "Package '${CURPCAT}/${CURPNAME}-${CURPVER}-${CURPBUILD}' already installed in ${BUILDROOT}. Aborting!" fi else for i in ${CURSPLITPACKAGES} do if [[ -d ${BUILDROOT}/${INSTALLDB_BUILDROOT}/${CURPCAT}/${i}-${CURPVER}-${CURPBUILD} ]] then SPLITINSTALLED+=" ${CURPCAT}/${i}-${CURPVER}-${CURPBUILD}" fi done if [[ ! -z ${SPLITINSTALLED} ]] then echo "Following SPLIT-Packages are installled from ${CURPCAT}/${CURPNAME}-${CURPVER}-${CURPBUILD} in ${BUILDROOT}:" for i in ${SPLITINSTALLED} do echo " ${i}" done die "Aborted." fi fi # delete md5 if exist [[ -f ${MD5DIR}/${MD5NAME} ]] && rm ${MD5DIR}/${MD5NAME} if [[ ${USE_SRCTARBALL} != true ]] then /sbin/smage2 download ${SMAGEFILE} /sbin/smage2 calcmd5 ${SMAGEFILE} ${MD5DIR} pushd ${SMAGEDIR}/../ svn add ${CURPNAME} pushd ${SMAGEDIR} svn add md5 svn add ${SMAGENAME} md5/${MD5NAME} [[ -z ${SVN_COMMIT} ]] && SVN_COMMIT="auto added: ver bump to ${CURPVER}-${CURPBUILD}" svn commit -m "${SVN_COMMIT}" ../${CURPNAME} ${SMAGENAME} md5 md5/${MD5NAME} popd fi sudo -s << EOF :> ${BUILDROOT}/.installrc echo "export LC_ALL=C" >> ${BUILDROOT}/.installrc # do not start any services, set mage bootstrap flag echo "export MAGE_BOOTSTRAP=true" >> ${BUILDROOT}/.installrc echo "REPO=${REPO}" >> ${BUILDROOT}/.installrc echo "CURPNAME=${CURPNAME}" >> ${BUILDROOT}/.installrc echo "CURPVER=${CURPVER}" >> ${BUILDROOT}/.installrc echo "CURPBUILD=${CURPBUILD}" >> ${BUILDROOT}/.installrc echo "CURARCH=${CURARCH}" >> ${BUILDROOT}/.installrc echo "CURDISTROTAG=${CURDISTROTAG}" >> ${BUILDROOT}/.installrc echo "CURSPLITPACKAGES=\"${CURSPLITPACKAGES}\"" >> ${BUILDROOT}/.installrc echo "SMAGENAME=${SMAGENAME}" >> ${BUILDROOT}/.installrc echo "MD5NAME=${MD5NAME}" >> ${BUILDROOT}/.installrc echo "PKGNAME=${PKGNAME}" >> ${BUILDROOT}/.installrc echo "SPKGNAME=${SPKGNAME}" >> ${BUILDROOT}/.installrc echo '/usr/bin/whoami' >> ${BUILDROOT}/.installrc echo 'source /etc/profile' >> ${BUILDROOT}/.installrc #echo 'echo PATH=\${PATH};read' >> ${BUILDROOT}/.installrc echo 'cd /var/cache/mage/smage/trunk/${REPO}' >> ${BUILDROOT}/.installrc #echo 'cd /var/cache/mage/smage/branches/magellan-next/${REPO}' >> ${BUILDROOT}/.installrc echo 'svn update distribution' >> ${BUILDROOT}/.installrc echo 'svn update include' >> ${BUILDROOT}/.installrc echo 'svn update ${CURPNAME}' >> ${BUILDROOT}/.installrc echo 'USE_SRCTARBALL=${USE_SRCTARBALL}' >> ${BUILDROOT}/.installrc echo 'if [[ \${USE_SRCTARBALL} != true ]];then ' >> ${BUILDROOT}/.installrc echo "/sbin/smage2 ${RESUME} /var/cache/mage/smage/trunk/${REPO}/${CURPNAME}/${SMAGENAME} || exit 1" >> ${BUILDROOT}/.installrc #echo "/sbin/smage2 ${RESUME} /var/cache/mage/smage/branches/magellan-next/${REPO}/${CURPNAME}/${SMAGENAME} || exit 1" >> ${BUILDROOT}/.installrc echo 'else' >> ${BUILDROOT}/.installrc echo 'echo "Fetching SRC_TARBALL"' >> ${BUILDROOT}/.installrc echo 'pushd /var/tmp/magebuild > /dev/null' >> ${BUILDROOT}/.installrc echo "SRCTARBALL=${CURPNAME}-${CURPVER}-${CURPBUILD}.${SRCPKGSUFFIX}" >> ${BUILDROOT}/.installrc echo "SRCTARBALL_URI=${SRCTARBALL_URI}" >> ${BUILDROOT}/.installrc echo '/usr/bin/wget -c \${SRCTARBALL_URI}/\${SRCTARBALL}' >> ${BUILDROOT}/.installrc echo '/sbin/smage2 -st \${SRCTARBALL}' >> ${BUILDROOT}/.installrc echo '[[ -f \${SRCTARBALL} ]] && rm \${SRCTARBALL}' >> ${BUILDROOT}/.installrc echo 'popd > /dev/null' >> ${BUILDROOT}/.installrc echo 'fi' >> ${BUILDROOT}/.installrc echo '[ ! -d /BUILDED ] && install -d /BUILDED' >> ${BUILDROOT}/.installrc echo '[ ! -d /BUILDED/sources ] && install -d /BUILDED/sources' >> ${BUILDROOT}/.installrc echo 'if [[ ! -z \${CURSPLITPACKAGES} ]]' >> ${BUILDROOT}/.installrc echo 'then' >> ${BUILDROOT}/.installrc echo 'for package in \${CURSPLITPACKAGES}' >> ${BUILDROOT}/.installrc echo 'do' >> ${BUILDROOT}/.installrc echo '/sbin/mage install \${package} || exit 1' >> ${BUILDROOT}/.installrc echo 'mv /var/cache/mage/packages/\${package}-${CURPVER}-${CURARCH}${CURDISTROTAG}-${CURPBUILD}.${PKGSUFFIX} /BUILDED' >> ${BUILDROOT}/.installrc echo 'done' >> ${BUILDROOT}/.installrc echo 'else' >> ${BUILDROOT}/.installrc echo '/sbin/mage install ${CURPNAME} || exit 1' >> ${BUILDROOT}/.installrc echo 'mv /var/cache/mage/packages/${PKGNAME} /BUILDED' >> ${BUILDROOT}/.installrc echo 'fi' >> ${BUILDROOT}/.installrc echo 'mv /var/cache/mage/packages/sources/${SRCPKGNAME} /BUILDED/sources' >> ${BUILDROOT}/.installrc echo 'rm -rf /var/cache/mage/sources/${CURPNAME}' >> ${BUILDROOT}/.installrc EOF sudo -H chroot ${BUILDROOT} /bin/bash /.installrc sudo rm ${BUILDROOT}/.installrc if [[ ! -z ${CURSPLITPACKAGES} ]] then for package in ${CURSPLITPACKAGES} do # get pkgtyp get_function_from_file split_info_${package} ${SMAGEFILE} split_info_${package} if [[ ${PKGTYPE} = virtual ]] then unset PKGTYPE continue fi if [[ ${NOPKGBUILD} = true ]] then unset NOPKGBUILD continue fi pkgname="${package}-${CURPVER}-${CURARCH}${CURDISTROTAG}-${CURPBUILD}.${PKGSUFFIX}" if [[ -f ${BUILDROOT}/BUILDED/${pkgname} ]] then scp ${BUILDROOT}/BUILDED/${pkgname} ${SSHLOGIN}/${CURARCH}/ else die "Error: ${BUILDROOT}/BUILDED/${pkgname} missing!" fi done else if [[ ${PKGTYPE} = virtual ]] then unset PKGTYPE echo "Virtual Package: nothing to upload" elif [[ -f ${BUILDROOT}/BUILDED/${PKGNAME} ]] then scp ${BUILDROOT}/BUILDED/${PKGNAME} ${SSHLOGIN}/${CURARCH}/ else die "Error: ${BUILDROOT}/BUILDED/${PKGNAME} missing!" fi fi if [[ -f ${BUILDROOT}/BUILDED/sources/${SRCPKGNAME} ]] then scp ${BUILDROOT}/BUILDED/sources/${SRCPKGNAME} ${SSHLOGIN}/src/ else echo "Error: ${BUILDROOT}/BUILDED/${SRCPKGNAME} missing!" # die fi [[ -d /var/cache/mage/sources/${CURPNAME} ]] && rm -rf /var/cache/mage/sources/${CURPNAME} # umount layeredfs is_loc_mounted "${BUILDROOT}/dev" && sudo umount ${BUILDROOT}/dev is_loc_mounted "${BUILDROOT}/proc" && sudo umount ${BUILDROOT}/proc is_loc_mounted "${BUILDROOT}/sys" && sudo umount ${BUILDROOT}/sys if [[ ${USE_UNIONFS} = true ]] then is_loc_mounted "${BUILDROOT_LAYEREDFS}" && sudo umount ${BUILDROOT_LAYEREDFS} fi # if we don't break before; all things are right - regardless if $? is not zero # because some things like src-pkg creation may be disabled exit 0