aboutsummaryrefslogtreecommitdiffstats
path: root/build.sh
diff options
context:
space:
mode:
authorSerge Schneider <[email protected]>2016-04-11 07:21:07 +0100
committerSerge Schneider <[email protected]>2016-04-11 07:21:07 +0100
commit2701f10c909dee234185ddf082728fd661b941de (patch)
treec849443e6568f224d14a254ce777e16b9073bc4c /build.sh
parent25b7d54af514f3839c991b268e8d21018ccf0090 (diff)
Initial build script
Diffstat (limited to 'build.sh')
-rwxr-xr-xbuild.sh162
1 files changed, 162 insertions, 0 deletions
diff --git a/build.sh b/build.sh
index e69de29..e3f7a6e 100755
--- a/build.sh
+++ b/build.sh
@@ -0,0 +1,162 @@
+#!/bin/bash -e
+
+run_sub_stage()
+{
+ log "Begin ${SUB_STAGE_DIR}"
+ pushd ${SUB_STAGE_DIR} > /dev/null
+ for i in {00..99}; do
+ if [ -f ${i}-debconf ]; then
+ log "Begin ${SUB_STAGE_DIR}/${i}-debconf"
+ on_chroot sh -e - << EOF
+debconf-set-selections <<SELEOF
+`cat ${i}-debconf`
+SELEOF
+EOF
+ log "End ${SUB_STAGE_DIR}/${i}-debconf"
+ fi
+ if [ -f ${i}-packages-nr ]; then
+ log "Begin ${SUB_STAGE_DIR}/${i}-packages-nr"
+ PACKAGES=`cat $i-packages-nr | tr '\n' ' '`
+ if [ -n "$PACKAGES" ]; then
+ on_chroot sh -e - << EOF
+apt-get install --no-install-recommends -y $PACKAGES
+EOF
+ fi
+ log "End ${SUB_STAGE_DIR}/${i}-packages-nr"
+ fi
+ if [ -f ${i}-packages ]; then
+ log "Begin ${SUB_STAGE_DIR}/${i}-packages"
+ PACKAGES=`cat $i-packages | tr '\n' ' '`
+ if [ -n "$PACKAGES" ]; then
+ on_chroot sh -e - << EOF
+apt-get install -y $PACKAGES
+EOF
+ fi
+ log "End ${SUB_STAGE_DIR}/${i}-packages"
+ fi
+ if [ -d ${i}-patches ]; then
+ log "Begin ${SUB_STAGE_DIR}/${i}-patches"
+ pushd ${STAGE_WORK_DIR} > /dev/null
+ if [ "${CLEAN}" = "1" ]; then
+ rm -rf .pc
+ rm -rf *-pc
+ fi
+ QUILT_PATCHES=${SUB_STAGE_DIR}/${i}-patches
+ mkdir -p ${i}-pc
+ ln -sf .pc ${i}-pc
+ if [ -e ${SUB_STAGE_DIR}/${i}-patches/EDIT ]; then
+ echo "Dropping into bash to edit patches..."
+ bash
+ fi
+ RC=0
+ quilt push -a || RC=$?
+ case "$RC" in
+ 0|2)
+ ;;
+ *)
+ false
+ ;;
+ esac
+ popd > /dev/null
+ log "End ${SUB_STAGE_DIR}/${i}-patches"
+ fi
+ if [ -x ${i}-run.sh ]; then
+ log "Begin ${SUB_STAGE_DIR}/${i}-run.sh"
+ ./${i}-run.sh
+ log "End ${SUB_STAGE_DIR}/${i}-run.sh"
+ fi
+ if [ -f ${i}-run-chroot ]; then
+ log "Begin ${SUB_STAGE_DIR}/${i}-run-chroot"
+ on_chroot sh -e - < ${i}-run-chroot
+ log "End ${SUB_STAGE_DIR}/${i}-run-chroot"
+ fi
+ done
+ popd > /dev/null
+ log "End ${SUB_STAGE_DIR}"
+}
+
+run_stage(){
+ log "Begin ${STAGE_DIR}"
+ pushd ${STAGE_DIR} > /dev/null
+ unmount ${WORK_DIR}/${STAGE}
+ STAGE_WORK_DIR=${WORK_DIR}/${STAGE}
+ ROOTFS_DIR=${STAGE_WORK_DIR}/rootfs
+ if [ ! -f SKIP ]; then
+ if [ "${CLEAN}" = "1" ]; then
+ if [ -d ${ROOTFS_DIR} ]; then
+ rm -rf ${ROOTFS_DIR}
+ fi
+ fi
+ if [ -x prerun.sh ]; then
+ log "Begin ${STAGE_DIR}/prerun.sh"
+ ./prerun.sh
+ log "End ${STAGE_DIR}/prerun.sh"
+ fi
+ for SUB_STAGE_DIR in ${STAGE_DIR}/*; do
+ if [ -d ${SUB_STAGE_DIR} ]; then
+ run_sub_stage
+ fi
+ done
+ fi
+ unmount ${WORK_DIR}/${STAGE}
+ PREV_STAGE=${STAGE}
+ PREV_STAGE_DIR=${STAGE_DIR}
+ PREV_ROOTFS_DIR=${ROOTFS_DIR}
+ popd > /dev/null
+ log "End ${STAGE_DIR}"
+}
+
+if [ "$(id -u)" != "0" ]; then
+ echo "Please run as root" 1>&2
+ exit 1
+fi
+
+if [ -f config ]; then
+ source config
+fi
+
+if [ -z "${IMG_NAME}" ]; then
+ echo "IMG_NAME not set" 1>&2
+ exit 1
+fi
+
+export IMG_DATE=${IMG_DATE:-"$(date -u +%Y-%m-%d)"}
+
+export BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+export SCRIPT_DIR="${BASE_DIR}/scripts"
+export WORK_DIR="${BASE_DIR}/work/${IMG_DATE}-${IMG_NAME}"
+export LOG_FILE="${WORK_DIR}/build.log"
+
+export CLEAN
+export IMG_NAME
+export APT_PROXY
+
+export STAGE
+export PREV_STAGE
+export STAGE_DIR
+export PREV_STAGE_DIR
+export ROOTFS_DIR
+export PREV_ROOTFS_DIR
+
+export QUILT_PATCHES
+export QUILT_NO_DIFF_INDEX=1
+export QUILT_NO_DIFF_TIMESTAMPS=1
+export QUILT_REFRESH_ARGS="-p ab"
+
+source ${SCRIPT_DIR}/common
+export -f log
+export -f bootstrap
+export -f unmount
+export -f on_chroot
+export -f copy_previous
+export -f update_issue
+
+mkdir -p ${WORK_DIR}
+log "Begin ${BASE_DIR}"
+
+for STAGE_DIR in ${BASE_DIR}/stage*; do
+ STAGE=$(basename ${STAGE_DIR})
+ run_stage
+done
+
+log "End ${BASE_DIR}"