|
|
- #!/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
- ;;
- -l|--listmods)
- listModules
- ;;
- -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
-
- # Execute all 'presync' enabled modules
- for MODULE in ${MODULES_PRESYNC}; do
- loadModule ${MODULE} "presync"
- RESULT=${?}
- if [ ${RESULT} -eq 255 ]; then
- printWarn "Trying to load module: ${MODULE}, that is incompatible with event: presync!"
- elif [ ${RESULT} -ne 0 ]; then
- fail "EzBuild was unable to execute module: ${MODULE}!"
- fi
- unloadModule
- done
-
- # Update local copy of Portage that is being built
- printInfo "Refreshing constructed 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 constructed Portage tree!" 2
-
- # Update local copy of mainline Portage
- if ! hasElement "mainline" ${EZNOSYNC} && ! hasElement "portage" ${EZNOSYNC}; then
- printInfo "Refreshing mainline Portage tree..."
- pullRepository ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]} ${PORTAGE_MAINLINE[1]} ${PORTAGE_MAINLINE[2]} ${PORTAGE_MAINLINE[3]}
- [ ${?} -ne 0 ] && die "EzBuild was unable to refresh local copy of 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 "Refreshing 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 refresh local copy of overlay: ${CURRENT_OVERLAY[0]}!" 4
- fi
- done
-
- # Execute all 'postsync' enabled modules
- for MODULE in ${MODULES_POSTSYNC}; do
- loadModule ${MODULE} "postsync"
- RESULT=${?}
- if [ ${RESULT} -eq 255 ]; then
- printWarn "Trying to load module: ${MODULE}, that is incompatible with event: postsync!"
- elif [ ${RESULT} -ne 0 ]; then
- fail "EzBuild was unable to execute module: ${MODULE}!"
- fi
- unloadModule
- done
-
- # Optionally merge data into build overlay
- if isSet MERGED_OVERLAY && isSet OVERLAY_BUILD; then
- printInfo "Merging ebuilds into constructed Overlay..."
- for OVERLAY in ${MERGED_OVERLAY[*]}; do
- TEMP="\${$OVERLAY[*]}"
- CURRENT_OVERLAY=(`eval echo ${TEMP}`)
- mergeOverlay ${OVERLAYSDIR}/${CURRENT_OVERLAY[0]} ${OVERLAYSDIR}/${OVERLAY_BUILD[0]} ${CURRENT_OVERLAY[4]} ${CURRENT_OVERLAY[5]} ${CURRENT_OVERLAY[6]}
- [ ${?} -ne 0 ] && fail "EzBuild was unable to merge ebuilds into overlay!" 8
- done
- if ! isEnabled ${EZOPT_NOPUSH}; then
- pushRepository ${OVERLAYSDIR}/${OVERLAY_BUILD[0]} ${OVERLAY_BUILD[1]} "Automatic overlay update [$(date +"${PUSHDATEFORMAT}")]."
- [ ${?} -ne 0 ] && die "Ezbuild was unable to record changes to the remote overlay repository!" 8
- fi
- fi
-
- # Merge data into build portage
- printInfo "Merging ebuilds into constructed Portage..."
- pullRsync ${PORTAGESDIR}/${PORTAGE_BUILD[0]} ${PORTAGESDIR}/${PORTAGE_MAINLINE[0]}/
- [ ${?} -ne 0 ] && die "EzBuild was unable to merge ebuilds into Portage tree!" 16
- for OVERLAY in ${MERGED_PORTAGE[*]}; do
- TEMP="\${$OVERLAY[*]}"
- CURRENT_OVERLAY=(`eval echo ${TEMP}`)
- mergeOverlay ${OVERLAYSDIR}/${CURRENT_OVERLAY[0]} ${PORTAGESDIR}/${PORTAGE_BUILD[0]} ${CURRENT_OVERLAY[4]} ${CURRENT_OVERLAY[5]} ${CURRENT_OVERLAY[6]}
- [ ${?} -ne 0 ] && die "EzBuild was unable to merge ebuilds into Portage tree!" 16
- if [ -f ${OVERLAYSDIR}/${CURRENT_OVERLAY[0]}/profiles/package.mask ]; then
- run "cp -apf ${OVERLAYSDIR}/${CURRENT_OVERLAY[0]}/profiles/package.mask ${PORTAGESDIR}/${PORTAGE_BUILD[0]}/profiles/package.mask/${OVERLAY_BUILD[0]%-*}"
- [ ${?} -ne 0 ] && die "EzBuild was unable to merge package.mask file into Portage tree!" 16
- fi
- done
-
- # Regenerate Portage cache
- printInfo "Updating constructed Portage cache..."
- run "FEATURES="metadata-transfer" PORTDIR="${PORTAGESDIR}/${PORTAGE_BUILD[0]}" egencache --update --portdir=${PORTAGESDIR}/${PORTAGE_BUILD[0]} --jobs=${MAXJOBS} --load-average=${LOADAVERAGE} --tolerant"
- [ ${?} -ne 0 ] && die "EzBuild was unable to regenerate cache!"
-
- # Finally quit the application
- quit
|