blob: 05cdb416beed29e3c5913e8660379c25426fa8cd (
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# SPDX-FileCopyrightText: 2026 Dilluti0n <[email protected]>
# SPDX-License-Identifier: GPL-3.0-or-later
#
# DPIBreak install script
# CHANGELOG:
# v1.1 - Remove make dependency
set -eu
PROJECT='DPIBreak'
REPO='dilluti0n/dpibreak'
LINUX='Linux'
AMD64='x86_64'
die() {
[ $# -eq 0 ] || echo Error: "$@" >&2
exit 1
}
get_tag() {
api_version='2022-11-28'
api_uri="https://api.github.com/repos/$REPO/releases/latest"
tag=$(curl -fsSL -H "X-GitHub-Api-Version: $api_version" "$api_uri" \
| grep '"tag_name":' | cut -d '"' -f 4)
[ -n "$tag" ] || die Failed to fetch latest release tag from $api_uri
echo Latest release: $tag >&2
echo "$tag"
}
available_cmd() {
[ $# -eq 0 ] && return
cmd=
for cmd in "$@"; do
if command -v "$cmd" >/dev/null 2>&1; then
echo "$cmd"
return 0
fi
done
return 1
}
do_sudo() {
if [ "$(id -u)" -eq 0 ]; then
"$@"
return $?
fi
SUDO=$(available_cmd sudo doas)
[ -n "$SUDO" ] || die No privilege escalation command found '(sudo/doas)'. Re-run as root.
echo Privilege escalation required: "$@" >&2
$SUDO "$@"
}
get_opt() {
if [ $# -eq 0 ]; then
echo install
elif [ "$1" = "uninstall" ]; then
echo uninstall
else
die "Unknown argument: $1"
fi
}
echo $PROJECT installer for $AMD64 $LINUX
echo Source: "https://github.com/$REPO/install.sh"
MODE=$(get_opt "$@") || die
KERNEL=$(uname -s)
ARCH=$(uname -m)
[ "$KERNEL" = "$LINUX" ] || die "$KERNEL: not supported. Only $LINUX is supported."
[ "$ARCH" = "$AMD64" ] || die "$ARCH: not supported. Only $AMD64 is supported."
TAG=$(get_tag)
TARBALL="$PROJECT-${TAG#v}-$ARCH-unknown-linux-musl.tar.gz"
EXDIR="${TARBALL%.tar.gz}"
URI="https://github.com/$REPO/releases/download/$TAG/$TARBALL"
WORKDIR=$(mktemp -d)
trap 'rm -rf "$WORKDIR"' EXIT
cd "$WORKDIR" || die Failed to create temporary directory
curl -fsSL --retry 3 --connect-timeout 5 -o "$TARBALL" "$URI" \
|| die Failed to download $URI
tar -xzvf "$TARBALL"
cd "$EXDIR" || die Failed to enter directory: $EXDIR
PREFIX=/usr/local
MANPREFIX="$PREFIX/share/man"
PROG='dpibreak'
MAN='dpibreak.1'
do_install() {
do_sudo install -Dm755 "$PROG" "$PREFIX/bin/$PROG"
do_sudo install -Dm644 "$MAN" "$MANPREFIX/man1/$MAN"
echo "Installation complete." >&2
}
do_uninstall() {
do_sudo rm -f "$PREFIX/bin/$PROG"
do_sudo rm -f "$MANPREFIX/man1/$MAN"
echo "Uninstallation complete." >&2
}
case "$MODE" in
install) do_install ;;
uninstall) do_uninstall ;;
esac
|