#!/bin/bash # Copyright 2010-2012, Asio Software Technologies # Distributed under the terms of the GNU General Public License v3 # Declare basic system variables EZNAME=$(basename ${0}) EZROOT=$(dirname $(readlink -ne ${0})) # Load necessary files source /etc/profile source ${EZROOT}/libraries/common # Load EzBuild libraries & configuration loadLibraries loadConfiguration # Print EzBuild notice and parse arguments printNotice until [[ -z "${1}" ]]; do case "${1}" in -c|--cleanlog) EZOPT_CLEANLOG=true ;; -h|--help) showEzsyncUsage ;; -n|--nosync) shift if [ -z ${1} ]; then die "--nosync requires an additional argument!" else EZNOSYNC=${EZNOSYNC+"$EZNOSYNC "}"${1}" fi ;; -N|--nopush) EZOPT_NOPUSH=true ;; -p|--purge) EZOPT_PURGETMP=true ;; -P|--purgeonly) EZOPT_PURGETMP=true EZOPT_PURGEONLY=true ;; -s|--syscheck) EZOPT_SYSCHECKONLY=true ;; *) die "Unrecognized option ${1}" ;; esac shift done # Check system requirements printInfo "Checking system prerequisites..." checkPrerequisites [ ${?} -ne 0 ] && die "Your environment does not meet EzBuild requirements!" 1 if isEnabled ${EZOPT_SYSCHECKONLY}; then printInfo "Your system meets all EzBuild requirements!" quit fi # Do not allow more than one working copy PID=$(pidof -s -o '%PPID' -x ${EZNAME}) if [ ${PID} ]; then printWarn "The ${EZNAME} is already working with PID: ${PID}" printWarn "You cannot have more than one instancy running" exit 0 fi # Optionally purge whole temp directory or log file only if isEnabled ${EZOPT_PURGETMP}; then printInfo "Clearing temp directory..." cleanTemp if isEnabled ${EZOPT_PURGEONLY}; then quit fi elif isEnabled ${EZOPT_CLEANLOG}; then printInfo "Clearing log file..." cleanLog fi # Initialize EzBuild environment makeCoreDirectories || die "EzBuild was unable to create all necessary directories!" 1 EZNOTIFY="yes" makeSshWrapper || die "EzBuild was unable to create a wrapper file to SSH" 1 trap 'die "Process killed! This may lead into unexpected problems!"' 1 2 3 9 15 17 18 23 # Load necessary public keys printInfo "Loading public keys..." eval `keychain --noask --eval id_dsa id_rsa &> /dev/null` [ ${?} -ne 0 ] && die "EzBuild was unable to load public keys!" 1 # Update local copy of Portage that is being built printInfo "Refreshing local build Portage tree..." pullRepository ${PORTAGESDIR}/${PORTAGE_BUILD[0]} ${PORTAGE_BUILD[1]} ${PORTAGE_BUILD[2]} ${PORTAGE_BUILD[3]} [ ${?} -ne 0 ] && die "EzBuild was unable to refresh local copy of build Portage tree!" 2 # Update local copy of mainline Portage if ! hasElement "mainline" ${EZNOSYNC} && ! hasElement "portage" ${EZNOSYNC}; then printInfo "Synchronizing mainline Portage tree..." pullRepository ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]} ${PORTAGE_MAINLINE[1]} ${PORTAGE_MAINLINE[2]} ${PORTAGE_MAINLINE[3]} [ ${?} -ne 0 ] && die "EzBuild was unable to synchronize mainline Portage tree!" 2 [ -e ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/metadata/cache ] && rm -rf ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/metadata/cache echo "distfiles/*" > ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/.gitignore echo "packages/*" >> ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/.gitignore if [ ! -d ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/profiles/package.mask ]; then mv ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/profiles/package.mask ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/profiles/package.mask.bak &> /dev/null makeDirectory ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/profiles/package.mask mv ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/profiles/package.mask.bak ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/profiles/package.mask/${PORTAGE_MAINLINE[0]%-*} &> /dev/null fi fi # Update all overlays (including the one that's optionally going to be built) SYNC_OVERLAYS=( ${MERGED_OVERLAY[*]} ${MERGED_PORTAGE[*]} ) for OVERLAY in ${SYNC_OVERLAYS[*]}; do TEMP="\${$OVERLAY[*]}" CURRENT_OVERLAY=(`eval echo ${TEMP}`) if ! hasElement "${CURRENT_OVERLAY[0]}" ${EZNOSYNC}; then printInfo "Synchronizing overlay: ${CURRENT_OVERLAY[0]}..." pullRepository ${OVERLAYSDIR}/${CURRENT_OVERLAY[0]} ${CURRENT_OVERLAY[1]} ${CURRENT_OVERLAY[2]} ${CURRENT_OVERLAY[3]} [ ${?} -ne 0 ] && fail "EzBuild was unable to synchronize ${CURRENT_OVERLAY[0]}!" 4 fi done