diff options
author | Serge Schneider <[email protected]> | 2016-04-11 07:21:07 +0100 |
---|---|---|
committer | Serge Schneider <[email protected]> | 2016-04-11 07:21:07 +0100 |
commit | 2701f10c909dee234185ddf082728fd661b941de (patch) | |
tree | c849443e6568f224d14a254ce777e16b9073bc4c /build.sh | |
parent | 25b7d54af514f3839c991b268e8d21018ccf0090 (diff) |
Initial build script
Diffstat (limited to 'build.sh')
-rwxr-xr-x | build.sh | 162 |
1 files changed, 162 insertions, 0 deletions
@@ -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}" |