#!/usr/bin/env bash # # --- T2-COPYRIGHT-NOTE-BEGIN --- # T2 SDE: scripts/Build-Job # Copyright (C) 2004 - 2023 The T2 SDE Project # Copyright (C) 1998 - 2003 ROCK Linux Project # # This Copyright note is generated by scripts/Create-CopyPatch, # more information can be found in the files COPYING and README. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2. # --- T2-COPYRIGHT-NOTE-END --- config=default xdaemon=0 daemon=0 while [ "$1" ]; do case "$1" in -daemon) daemon=1 ; shift ;; -xdaemon) xdaemon=1; shift ;; -cfg) config=$2; shift; shift ;; -*) echo "Usage: $0 [ -cfg config ] { -daemon | job(s) }" exit 1 ;; *) break ;; esac done . scripts/parse-config qdir="build/$SDECFG_ID/TOOLCHAIN/queue" build_logs="build/$SDECFG_ID/TOOLCHAIN/logs" mkdir -p "${build_logs}" if [ $daemon = 1 ]; then if [ -f $qdir/queue.txt ]; then if [ -f $qdir/use_build_job_daemon ]; then nohup $0 -cfg $config -xdaemon > /dev/null & sleep 1; exit 0 else echo echo "The build has been configured to use a command for" echo "adding jobs (useing another job scheduler)." echo exit 1 fi else echo echo "$qdir:" echo "Queue not found! Please start 'Build-Target -cfg $config'" echo "first on the master node ..." echo exit 1 fi fi if [ $xdaemon = 1 ]; then echo "Writing output to $build_logs/build_job_${HOSTNAME}_$$.log." >&2 exec > "$build_logs/build_job_${HOSTNAME}_$$.log" 2>&1 < /dev/null echo -e "Build-Job (daemon mode)\trunning on ${HOSTNAME} with PID $$" \ > "$qdir/build_job_${HOSTNAME}_$$.stat" date "+%H:%M ${HOSTNAME} new build-job daemon with PID $$" \ >> $qdir/1_$qid.msg while [ -f $qdir/queue.txt -a -f $qdir/use_build_job_daemon -a \ -f "$qdir/build_job_${HOSTNAME}_$$.stat" ]; do didsomething=0 while read next && [ "$next" ]; do set $next; qid="$1-$6" if [ -f $qdir/$qid.job -a ! -f $qdir/$qid.lock ]; then $0 -cfg $config $qid didsomething=1; break fi done < $qdir/queue.txt [ $didsomething = 1 ] || sleep 3 done rm -f "$qdir/build_job_${HOSTNAME}_$$.stat" if [ -f $qdir/queue.txt ]; then date "+%H:%M ${HOSTNAME}%tbuild-job daemon ended ($$)" \ >> $qdir/8_$qid.msg fi echo "Queue has been removed. exit now." exit 0 fi for qid; do if [ -f $qdir/$qid.job ]; then if ! mv $qdir/$qid.todo $qdir/$qid.lock 2> /dev/null; then echo "Job locked by other build proc:" \ "$qid ($qdir/$qid.lock)!" exit 1 fi . $qdir/$qid.job date "+Job $qid%t$HOSTNAME ($PPID) since %H:%M %Y-%m-%d" \ > $qdir/$qid.lock date "+%H:%M ${HOSTNAME}:%tbuilding job '$qid' ($PPID) .." \ >> $qdir/6_$qid.msg pkgloop_package $next if [ -f "${build_root}/var/adm/logs/$qid.log" ]; then date "+%H:%M ${HOSTNAME}:%tfinished job '$qid' ` `(ok)" >> $qdir/3_$qid.msg else date "+%H:%M ${HOSTNAME}:%tfinished job '$qid' ` `(ERROR)" >> $qdir/3_$qid.msg fi rm -f $qdir/$qid.lock $qdir/$qid.job else echo "No such job: $qid ($qdir/$qid.job)!"; exit 1 fi done