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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#!/bin/bash
# Copyright 2014-2017 Holger Levsen <holger@layer-acht.org>
# © 2015 Mattia Rizzolo <mattia@mapreri.org>
# released under the GPLv=2
DEBUG=false
. /srv/jenkins/bin/common-functions.sh
common_init "$@"
# common code defining db access
. /srv/jenkins/bin/reproducible_common.sh
# some defaults
DIRTY=false
REP_RESULTS=/srv/reproducible-results
show_fstab_and_mounts() {
echo "################################"
echo "/dev/shm and /run/shm on $HOSTNAME"
echo "################################"
ls -lartd /run/shm /dev/shm/
echo "################################"
echo "/etc/fstab on $HOSTNAME"
echo "################################"
cat /etc/fstab
echo "################################"
echo "mount output on $HOSTNAME"
echo "################################"
mount
echo "################################"
DIRTY=true
}
#
# we fail hard
#
set -e
#
# is the filesystem writetable?
#
echo "$(date -u) - testing whether /tmp is writable..."
TEST=$(mktemp --tmpdir=/tmp rwtest-XXXXXX)
if [ -z "$TEST" ] ; then
echo "Failure to write a file in /tmp, assuming read-only filesystem."
exit 1
fi
rm $TEST > /dev/null
#
# check for /dev/shm being mounted properly
#
echo "$(date -u) - testing whether /dev/shm is mounted correctly..."
mount | egrep -q "^tmpfs on /dev/shm"
if [ $? -ne 0 ] ; then
echo "Warning: /dev/shm is not mounted correctly on $HOSTNAME, it should be a tmpfs, please tell the jenkins admins to fix this."
show_fstab_and_mounts
fi
test "$(stat -c %a -L /dev/shm)" = 1777
if [ $? -ne 0 ] ; then
echo "Warning: /dev/shm is not mounted correctly on $HOSTNAME, it should be mounted with 1777 permissions, please tell the jenkins admins to fix this."
show_fstab_and_mounts
fi
#
# check for /run/shm being a link to /dev/shm
#
echo "$(date -u) - testing whether /run/shm is a link..."
if ! test -L /run/shm ; then
echo "Warning: /run/shm is not a link on $HOSTNAME, please tell the jenkins admins to fix this."
show_fstab_and_mounts
elif [ "$(readlink /run/shm)" != "/dev/shm" ] ; then
echo "Warning: /run/shm is a link, but not pointing to /dev/shm on $HOSTNAME, please tell the jenkins admins to fix this."
show_fstab_and_mounts
fi
#
# check for hanging mounts
#
echo "$(date -u) - testing whether running 'mount' takes forever..."
timeout -s 9 15 mount > /dev/null
TIMEOUT=$?
if [ $TIMEOUT -ne 0 ] ; then
echo "$(date -u) - running 'mount' takes forever, giving up."
exit 1
fi
#
# check for correct MTU
#
echo "$(date -u) - testing whether the network interfaces MTU is 1500..."
if [ "$(ip link | sed -n '/LOOPBACK\|NOARP/!s/.* mtu \([0-9]*\) .*/\1/p' | sort -u)" != "1500" ] ; then
ip link
echo "$(date -u) - network interfaces MTU != 1500 - this is wrong. => please \`sudo ifconfig eth0 mtu 1500\`"
# should probably turn this into a warning if this becomes to annoying
irc_message debian-reproducible "$HOSTNAME has wrong MTU, please tell the jenkins admins to fix this. (sudo ifconfig eth0 mtu 1500)"
exit 1
fi
#
# check for correct future
#
# (yes this is hardcoded but meh…)
echo "$(date -u) - testing whether the time is right..."
if [ "$(date +%Y)" = "2019" ] ; then
echo "Warning, today is the wrong future: $(date -u)."
DIRTY=true
elif [ "$(date +%Y)" = "2018" ] ; then
echo "Good, today is the right future: $(date -u)."
else
echo "Cherrish today, $(date -u)."
fi
#
# check for cleaned up kernels
# (on Ubuntu systems only, as those have free spaces issues on /boot frequently)
#
if [ "$(lsb_release -si)" = "Ubuntu" ] ; then
echo "$(date -u) - testing whether only one kernel is installed..."
if [ "$(ls /boot/vmlinuz-*|wc -l)" != "1" ] ; then
echo "Warning, more than one kernel in /boot:"
ls -lart /boot/vmlinuz-*
df -h /boot
DIRTY=true
fi
fi
#
# finally
#
if ! $DIRTY ; then
echo "$(date -u ) - Everything seems to be fine."
echo
fi
echo "$(date -u) - the end."
|