summaryrefslogtreecommitdiff
path: root/fsck/bcachefsck_fail
blob: 283cee70f269c6873165424c607a27541348f19c (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
#!/bin/bash

# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2023-2024 Oracle.  All Rights Reserved.
# Author: Darrick J. Wong <djwong@kernel.org>

# Email logs of failed bcachefsck and bcachefsck_all unit runs

recipient="$1"
test -z "${recipient}" && exit 0
service="$2"
test -z "${service}" && exit 0
mntpoint="$3"

hostname="$(hostname -f 2>/dev/null)"
test -z "${hostname}" && hostname="${HOSTNAME}"

mailer="$(command -v sendmail)"
if [ ! -x "${mailer}" ]; then
	echo "${mailer}: Mailer program not found."
	exit 1
fi

fail_mail_mntpoint() {
	local scrub_svc

	# Turn the mountpoint into a properly escaped systemd instance name
	scrub_svc="$(systemd-escape --template "${service}@.service" --path "${mntpoint}")"
	cat << ENDL
To: ${recipient}
From: <${service}@${hostname}>
Subject: ${service} failure on ${mntpoint}
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8

So sorry, the automatic ${service} of ${mntpoint} on ${hostname} failed.
Please do not reply to this mesage.

A log of what happened follows:
ENDL
	systemctl status --full --lines 4294967295 "${scrub_svc}"
}

fail_mail() {
	cat << ENDL
To: ${recipient}
From: <${service}@${hostname}>
Subject: ${service} failure

So sorry, the automatic ${service} on ${hostname} failed.

A log of what happened follows:
ENDL
	systemctl status --full --lines 4294967295 "${service}"
}

if [ -n "${mntpoint}" ]; then
	fail_mail_mntpoint | "${mailer}" -t -i
else
	fail_mail | "${mailer}" -t -i
fi
exit "${PIPESTATUS[1]}"