blob: e037f3ccc0efce5a1aeda52f14dabb9565e32bb8 (
plain) (
blame)
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
139
140
141
142
143
144
145
146
|
#!/bin/sh
set -eu
usage() {
cat <<-'EOF'
Usage:
gc [TYPE]
gc -h
EOF
}
help() {
cat <<-'EOF'
Options:
-h, --help show this message
TYPE what to do GC on (default: all):
- guix
- deploy
- trash
- tmpdir
- logs
GC the server, deleting old, unusable data, in order to free
disk space system-wide.
Examples:
Just run it, for all:
$ gc
Cleanup tmpdir:
$ gc tmpdir
EOF
}
for flag in "$@"; do
case "$flag" in
--)
break
;;
--help)
usage
help
exit
;;
*)
;;
esac
done
while getopts 'h' flag; do
case "$flag" in
h)
usage
help
exit
;;
*)
usage >&2
exit 2
;;
esac
done
shift $((OPTIND - 1))
if [ "$(id -un)" != 'root' ]; then
printf 'This script must be run as root.\n\n' >&2
usage >&2
exit 2
fi
disk() {
df -h / /mnt/backup/ |
tail -n +2 |
awk '{ printf "%s\t%s/%s\t%s\n", $4, $3, $2, $6 }'
}
today() {
date '+%Y-%m-%d'
}
gc_guix() {
sudo -i guix system delete-generations 1m
sudo -i guix gc -d 1m
}
gc_deploy() {
find /opt/deploy \
! -path /opt/deploy -prune \
-type d \
-not -name "$(today)*" \
-exec rm -rvf "{}" ';'
}
gc_trash() {
yes | sudo -i trash-empty
}
gc_tmpdir() {
find "${TMPDIR:-/tmp}" -atime +10 -exec rm -vf "{}" ';'
}
gc_logs() {
find /var/log/ci/ -atime +10 -exec rm -vf "{}" ';'
}
gc_all() {
gc_guix
gc_deploy
gc_trash
gc_tmpdir
gc_logs
}
TYPE="${1:-all}"
CMD=gc_"$TYPE"
if ! command -v "$CMD" >/dev/null; then
printf 'Invalid TYPE: "%s".\n\n' "$TYPE" >&2
usage >&2
exit 2
fi
BEFORE="$(disk)"
set -x
"$CMD"
set +x
AFTER="$(disk)"
cat <<-EOF
Disk space:
before: $BEFORE
after: $AFTER
EOF
|