summaryrefslogtreecommitdiffhomepage
path: root/install.sh
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