################################################################# # # Debian live-build specific functions. # # Author: Jan Blunck # # This file is part of build. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 or 3 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program (see the file COPYING); if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # ################################################################# recipe_setup_livebuild() { TOPDIR=/usr/src/packages rm -rf "$BUILD_ROOT$TOPDIR" for i in OTHER SOURCES LIVEBUILD_ROOT ; do mkdir -p "$BUILD_ROOT$TOPDIR/$i" done chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR" if test "$MYSRCDIR" = $BUILD_ROOT/.build-srcdir ; then mv "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/ else cp -p "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/ fi } recipe_prepare_livebuild() { : } createrepo_debian() { local DIR=${1} local ARCH=${2} local DIST=${3} if [ -z "${DIR}" -o ! -d ${DIR} -o ${DIR} = ${DIR##${BUILD_ROOT}} ] ; then return fi pushd ${DIR} >/dev/null # cleanup existing repository files rm -f Packages Packages.gz Release rm -fr dists mkdir -p dists/${DIST} # Suite is symlinked to Codename ln -s ${DIST} dists/stable # create Packages and Sources files mkdir -p dists/${DIST}/main/binary-${ARCH} mkdir -p dists/${DIST}/main/source cat > ${BUILD_ROOT}/.createrepo_debian.tmp.sh <<-EOF cd /.build.binaries || exit 1 dpkg-scanpackages -m . > dists/${DIST}/main/binary-${ARCH}/Packages gzip -c9 < dists/${DIST}/main/binary-${ARCH}/Packages \ > dists/${DIST}/main/binary-${ARCH}/Packages.gz dpkg-scansources . > dists/${DIST}/main/source/Sources gzip -c9 dists/${DIST}/main/source/Sources \ > dists/${DIST}/main/source/Sources.gz EOF $CHROOT su -c "sh /.createrepo_debian.tmp.sh" - root local RESULT=$? rm -f $BUILD_ROOT/.createrepo_debian.tmp.sh [ "${RESULT}" != 0 ] && return # create Release file pushd dists/${DIST} >/dev/null cat > Release <<-EOF Origin: Debian Label: Debian Suite: stable Version: 7.1 Codename: ${DIST} Date: Sat, 15 Jun 2013 10:55:26 UTC Description: Debian repository created by build-recipe-livebuild Components: main EOF echo "SHA256:" >> Release for file in main/binary-${ARCH}/Packages* ; do local SUM=( $(sha256sum ${file}) ) local SIZE=$(stat -c '%s' ${file}) echo " ${SUM} ${SIZE} ${file}" >> Release done for file in main/source/Sources* ; do local SUM=( $(sha256sum ${file}) ) local SIZE=$(stat -c '%s' ${file}) echo " ${SUM} ${SIZE} ${file}" >> Release done popd >/dev/null # TODO: this is missing the signature with the private key popd >/dev/null } # This script expects that the $BUILD_ROOT is a Debian installation with # live-build already installed! # # Variables: # $BUILD_ROOT the Debian chroot # $TOPDIR/SOURCES includes the live-build config tarball # $TOPDIR/$LIVEBUILD_ROOT where live-build will be called # $RECIPEFILE the name of the live-build config tarball recipe_build_livebuild() { local ARCH=$($CHROOT su -c "dpkg-architecture -qDEB_BUILD_ARCH") local DIST=$($CHROOT su -c "lsb_release --codename" | awk '{ print $2 }') local LIVEBUILD_ROOT="LIVEBUILD_ROOT" [ -z "${ARCH}" -o -z "${DIST}" ] && cleanup_and_exit 1 test -d $BUILD_ROOT/.build.binaries || cleanup_and_exit 1 if test "$DO_INIT" = true -o ! -d "$BUILD_ROOT/.build.binaries/dists" ; then echo "creating repository metadata..." createrepo_debian $BUILD_ROOT/.build.binaries ${ARCH} ${DIST} fi # Write our default configuration variables mkdir -p $BUILD_ROOT/etc/live cat > $BUILD_ROOT/etc/live/build.conf <<-EOF LB_DEBIAN_INSTALLER_DISTRIBUTION="${DIST}" LB_DISTRIBUTION="${DIST}" LB_PARENT_DISTRIBUTION="${DIST}" LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="${DIST}" LB_PARENT_MIRROR_BOOTSTRAP="file:/.build.binaries/" LB_PARENT_MIRROR_CHROOT="file:/.build.binaries/" LB_PARENT_MIRROR_CHROOT_SECURITY="file:/.build.binaries/" LB_PARENT_MIRROR_BINARY="file:/.build.binaries/" LB_PARENT_MIRROR_BINARY_SECURITY="file:/.build.binaries/" LB_PARENT_MIRROR_DEBIAN_INSTALLER="file:/.build.binaries/" LB_MIRROR_BOOTSTRAP="file:/.build.binaries/" LB_MIRROR_CHROOT="file:/.build.binaries/" LB_MIRROR_CHROOT_SECURITY="file:/.build.binaries/" LB_MIRROR_BINARY="file:/.build.binaries/" LB_MIRROR_BINARY_SECURITY="file:/.build.binaries/" LB_MIRROR_DEBIAN_INSTALLER="file:/.build.binaries/" LB_APT_SECURE="false" EOF # Expand live-build configuration to $TOPDIR/$LIVEBUILD_ROOT echo "Expanding live-build configuration" tar -xvf $BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE \ -C $BUILD_ROOT/$TOPDIR/$LIVEBUILD_ROOT || cleanup_and_exit 1 # Skip top-level directory if it matches recipe name, ... local files=($BUILD_ROOT/$TOPDIR/$LIVEBUILD_ROOT/*) # ... but ignore some well known names files=(${files[@]%%*/auto}) files=(${files[@]%%*/config}) files=(${files[@]%%*/local}) if [ ${#files[@]} -eq 1 ] && \ [ -d $BUILD_ROOT/$TOPDIR/$LIVEBUILD_ROOT/${RECIPEFILE%.livebuild} ] then LIVEBUILD_ROOT="LIVEBUILD_ROOT/${RECIPEFILE%.livebuild}" fi # Sanity check to not configure archives inside configuration files=($BUILD_ROOT/$TOPDIR/$LIVEBUILD_ROOT/config/archives/*) [ ${#files[@]} -gt 0 ] && cleanup_and_exit 1 # TODO: Add the repository public key # cp ... $BUILD_ROOT/$TOPDIR/$LIVEBUILD_ROOT/config/archives/debian.key if [ -x $BUILD_ROOT/usr/lib/build/livebuild_pre_run ] ; then echo "Running OBS build livebuild_pre_run hook" $CHROOT su -c "/usr/lib/build/livebuild_pre_run" - root \ < /dev/null || cleanup_and_exit 1 fi # TODO: this might move to lb auto/config file if [ -f $BUILD_ROOT/$TOPDIR/SOURCES/livebuild_pre_run ] ; then cp $BUILD_ROOT/$TOPDIR/SOURCES/livebuild_pre_run \ $BUILD_ROOT/.build.livebuild_pre_run chmod +x $BUILD_ROOT/.build.livebuild_pre_run echo "Running package livebuild_pre_run hook" $CHROOT su -c "/.build.livebuild_pre_run" - root \ < /dev/null || cleanup_and_exit 1 fi $CHROOT su -c "cd $TOPDIR/$LIVEBUILD_ROOT && lb build" - root \ < /dev/null || cleanup_and_exit 1 # Move created product to destination for i in $BUILD_ROOT/$TOPDIR/$LIVEBUILD_ROOT/* ; do test -f "$i" || continue case "${i##*/}" in *.iso) # all created files share the same name without suffix mv ${i%%.iso}.* $BUILD_ROOT/$TOPDIR/OTHER/. BUILD_SUCCEEDED=true ;; *) ;; esac done # Fail the build if no ISO was created if [ -z "$(ls $BUILD_ROOT/$TOPDIR/OTHER/*.iso)" ] ; then echo "No ISO image found" cleanup_and_exit 1 fi } recipe_resultdirs_livebuild() { # our results are already in OTHER : } # Local Variables: # mode: Shell-script # End: