blob: e4dacd1391d6ce35a042efd521fe8cef362025b5 (
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
95
96
97
98
99
|
#!/usr/bin/env bash
#
# zectl-prune is used by zectl-hook to rotate Boot Environments
# Tests
if [ "$EUID" -ne 0 ]
then echo "Please run as root"
exit
fi
# Vars
# Set where zectl is installed
PATH="$PATH:/usr/bin"
BIN=/usr/bin/zectl
# Get current script name
FILENAME="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")"
# String to prepend to boot env name
PREFIX="pacmanhook"
# Functions
print () {
echo -e "\033[1m• $1\033[0m"
}
usage(){
echo "Usage: $FILENAME [options]"
echo "-h : afficher l'aide"
exit
}
# Get a value from zectl
get_value () {
value=$("$BIN" get -H "$1" | awk '{print $2}')
if [[ $value =~ \t- ]]
then
return 1
else
echo "$value"
fi
}
# Create a boot env prepended with prefix
zectl_create () {
bename="$PREFIX-$(date +'%Y%m%dT%H%M%S')"
$BIN create "$bename" && print "Created $bename"
}
# List boot env by prefix, and omit booted|activated
zectl_list () {
# TOFIX: sort https://github.com/johnramsden/zectl/issues/18
# Here: sorting on the be name which contains date
$BIN list -H | grep $PREFIX | grep -Ev '\ N\ |\ NR\ |\ R\ ' | sort -k1
}
# Remove latest prefixed boot env
zectl_purge () {
latest=$(zectl_list | head -n1 | grep "$PREFIX" | awk '{print $1}')
zectl destroy "$latest" && print "Destroyed $latest"
}
# Args
while getopts "h" option; do
case "${option}" in
h)
usage
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
# Main
# Get how many boot env to keep from zectl
prune_count=$(get_value pacmanhook-prunecount)
# Test if value is numeric
if [[ $prune_count =~ ^[0-9]+$ ]]
then
# If keep number is not reach, create a boot env
if [[ $(zectl_list | wc -l) -lt "$prune_count" ]]
then
zectl_create
# Else remove the latest and create a boot env
else
zectl_purge
zectl_create
fi
else
echo 'error: please run "zectl set pacmanhook-prunecount=X" where "X" is the number of boot environment to keep when rotating.'
fi
|