summaryrefslogtreecommitdiff
path: root/tinderbox/matter-build.sh
blob: 7d80366c4f78a38bba21ca524153dde9a10f60ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash

show_help() {
	echo "${0} <schedule> <pre-chroot (linux32, linux64)> <chroot dir> <chroot name>"
}

ARGS="${@}"
schedule="${1}"
if [ "${schedule}" != "weekly" ] && [ "${schedule}" != "monthly" ] && [ "${schedule}" != "daily" ]; then
	echo "schedule is invalid, must be either weekly, monthly, daily"
	show_help
	exit 1
fi
PRE_CHROOT="${2}"
if [ "${PRE_CHROOT}" != "linux32" ] && [ "${PRE_CHROOT}" != "linux64" ]; then
	echo "pre-chroot is invalid, must be either linux32, linux64"
	show_help
	exit 1
fi
CHROOT_DIR="${3}"
if [ -z "${CHROOT_DIR}" ] || [ ! -d "${CHROOT_DIR}" ]; then
	echo "chroot dir is invalid"
	show_help
	exit 1
fi
CHROOT_NAME="${4:-unknown}"
shift 4

LOCK_FILE="${CHROOT_DIR}/.matter-build.lock"
LVM_LOCK_FILE="/entropy_LOCKS/vg_chroots-lv_chroots-snapshot.lock"
LOG_FILE=/var/log/particles/$(basename "${CHROOT_DIR}")-${schedule}-$(date +%Y%m%d).log

# Make sure th have these directories in place
mkdir -p /var/log/particles /entropy_LOCKS || exit 1

# Drop these settings from the environment as they could interfere
# with interactive processing
unset PORTDIR PORTAGE_TMPDIR

echo "CHROOT_DIR: ${CHROOT_DIR}"
echo "PRE_CHROOT: ${PRE_CHROOT}"
echo "LOG_FILE: ${LOG_FILE}.bz2"

echo "Acquiring locks at ${LOCK_FILE} and ${LVM_LOCK_FILE} in blocking mode, waiting until we're ready"
(
	flock -s --timeout=$((3600 * 12)) 10
	if [ "${?}" != "0" ]; then
		echo "Tried to acquire the LVM lock in shared mode." >&2
		echo "After 12 hours, I give up. This is really wrong," >&2
		echo "since the backup script should not hold the lock for" >&2
		echo "this long." >&2
		exit 1
	fi

	flock -x --timeout=36000 9
	rc="${?}"
	if [ "${rc}" != "0" ]; then
		echo "CANNOT ACQUIRE LOCK, QUITTING" >&2
	else
		echo "Lock acquired, let's go"
		echo "Starting matter-scheduler at $(date)..."
		export ETP_NO_COLOR="1"

		pre_post="--pre /particles/hooks/pre.sh --post /particles/hooks/post.sh"
		# Place standard outout and standard error together to make
		# tee happy. Filter out stdout because it gets to mail
		PARTICLES_DIR="/particles/${schedule}" \
		MATTER_ARGS="--commit --blocking --gentle --disable-preserved-libs ${pre_post} ${@}" "${PRE_CHROOT}" \
			/build/tinderbox/matter-scheduler "${CHROOT_DIR}" 2>&1 3>&1 | tee "${LOG_FILE}" > /dev/null
		rc=${?}
		echo "Completed matter-scheduler at $(date) with exit status: ${rc}"
	fi

	bzip2 -f -k "${LOG_FILE}"
	# send mail
	echo "Hello boys and girls,
this is andromeda.rogentos.ro informing you that a new matter run has been
eventually executed.

Call : ${ARGS}
Exit : ${rc}
Log  : ${LOG_FILE}.bz2

Do not forget to check logs before touching repositories.
Thanks for reading." | mutt -s "${schedule} matter run, $(basename ${LOG_FILE})" -a "${LOG_FILE}.bz2" -- entropy-team@lists.rogentos.ro

	# spawn GLSA and ignore any failures
	/build/tinderbox/glsa-scheduler "${CHROOT_DIR}" "${CHROOT_NAME}" "${PRE_CHROOT}" > /dev/null
	# spawn AntiMatter and ignore any failures
	/build/tinderbox/antimatter-scheduler "${CHROOT_DIR}" "${CHROOT_NAME}" "${PRE_CHROOT}" > /dev/null

	exit ${rc}

) 9> "${LOCK_FILE}" 10> "${LVM_LOCK_FILE}"