Repository navigation
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·84 lines (68 loc) · 2.26 KB
/
Copy pathinstall.sh
File metadata and controls
executable file
·84 lines (68 loc) · 2.26 KB
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
#!/usr/bin/env bash
set -euo pipefail
SOURCE_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
APT_HOOK="/etc/apt/apt.conf.d/80snapper"
BACKUP_DIR="/var/backups/dpkg-pre-post-snapper"
APT_HOOK_BACKUP="${BACKUP_DIR}/80snapper.original"
LEGACY_APT_HOOK_BACKUP="${APT_HOOK}.original"
SCRIPT_DIR="/opt/snapper/bin"
SCRIPT_PATH="${SCRIPT_DIR}/dpkg-pre-post-snapper.sh"
if [[ $EUID -ne 0 ]]; then
echo "Error: Run this installer with sudo." >&2
exit 1
fi
for command in apt-get dpkg; do
if ! command -v "$command" >/dev/null 2>&1; then
echo "Error: Required package tool not found: $command" >&2
echo "This installer requires an APT/dpkg-based system." >&2
echo "Nothing was changed." >&2
exit 1
fi
done
if [[ ! -d /etc/apt/apt.conf.d ]]; then
echo "Error: Required APT configuration directory not found: /etc/apt/apt.conf.d" >&2
echo "Nothing was changed." >&2
exit 1
fi
for file in \
"${SOURCE_DIR}/80snapper" \
"${SOURCE_DIR}/dpkg-pre-post-snapper.sh"
do
if [[ ! -f "$file" ]]; then
echo "Error: Required file not found: $file" >&2
exit 1
fi
done
install -d -m 0755 -o root -g root "$BACKUP_DIR"
if [[ -e "$LEGACY_APT_HOOK_BACKUP" ]]; then
if [[ ! -e "$APT_HOOK_BACKUP" ]]; then
mv "$LEGACY_APT_HOOK_BACKUP" "$APT_HOOK_BACKUP"
elif cmp -s "$LEGACY_APT_HOOK_BACKUP" "$APT_HOOK_BACKUP"; then
rm "$LEGACY_APT_HOOK_BACKUP"
else
echo "Error: Conflicting APT hook backups exist:" >&2
echo " $LEGACY_APT_HOOK_BACKUP" >&2
echo " $APT_HOOK_BACKUP" >&2
echo "Resolve them manually, then rerun the installer." >&2
exit 1
fi
fi
if [[ -e "$APT_HOOK" && ! -e "$APT_HOOK_BACKUP" ]]; then
cp -a "$APT_HOOK" "$APT_HOOK_BACKUP"
fi
if [[ -e "$APT_HOOK_BACKUP" ]]; then
chmod 0644 "$APT_HOOK_BACKUP"
fi
install -d -m 0755 -o root -g root "$SCRIPT_DIR"
install -m 0755 -o root -g root \
"${SOURCE_DIR}/dpkg-pre-post-snapper.sh" \
"$SCRIPT_PATH"
install -m 0644 -o root -g root \
"${SOURCE_DIR}/80snapper" \
"$APT_HOOK"
echo "dpkg-pre-post-snapper installed successfully."
echo "APT hook: $APT_HOOK"
echo "Script: $SCRIPT_PATH"
if [[ -e "$APT_HOOK_BACKUP" ]]; then
echo "Original APT hook backup: $APT_HOOK_BACKUP"
fi