ezbuild/ezsync

127 lines
4.2 KiB
Bash
Executable File

#!/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