Repository navigation
Expand file tree
/
Copy pathsetup.sh
More file actions
155 lines (146 loc) · 6.26 KB
/
Copy pathsetup.sh
File metadata and controls
155 lines (146 loc) · 6.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
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
147
148
149
150
151
152
153
154
155
#!/bin/sh
set -u
HERE=$(cd "$(dirname "$0")/.." && pwd)
SKIP_SYS=0
for a in "$@"; do [ "$a" = "--ohne-systemupdate" ] && SKIP_SYS=1; done
if [ "${PB_TEST:-0}" != 1 ] && [ "$(id -u)" != 0 ]; then
echo "Bitte mit sudo ausführen: sudo sh install/setup.sh"; exit 1
fi
U="${SUDO_USER:-root}"
H=$(getent passwd "$U" | cut -d: -f6); [ -n "$H" ] || H=/root
LOG="${PB_LOG:-$H/install-ausgabe.txt}"
TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
VERSION=$(cat "$HERE/VERSION" 2>/dev/null || echo "?")
TTY=0; [ -t 1 ] && TTY=1
COL=0; { [ "$TTY" = 1 ] || [ "${PB_COLOR:-0}" = 1 ]; } && [ -z "${NO_COLOR:-}" ] && COL=1
if [ "$COL" = 1 ]; then
C_RST=$(printf '\033[0m'); C_OK=$(printf '\033[1;32m'); C_LINK=$(printf '\033[1;4;36m'); C_WARN=$(printf '\033[1;30;43m'); C_BOLD=$(printf '\033[1m')
else
C_RST=""; C_OK=""; C_LINK=""; C_WARN=""; C_BOLD=""
fi
export DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a
upgradable() { LC_ALL=C apt list --upgradable 2>/dev/null | sed -n 's#^\([^/]*\)/.*#\1#p'; }
say() { printf '%s\n' "$*"; }
LASTP=-1
bar() {
p=$1; t=$2; [ "$p" -gt 100 ] && p=100; [ "$p" -lt 0 ] && p=0
if [ "$TTY" = 1 ]; then
n=$((p * 30 / 100)); full=$(printf '%*s' "$n" '' | tr ' ' '#'); rest=$(printf '%*s' $((30 - n)) '' | tr ' ' '.')
printf '\r [%s%s] %3d %% %-34s' "$full" "$rest" "$p" "$t"
else
q=$((p / 10 * 10)); [ "$q" = "$LASTP" ] && return; LASTP=$q
printf ' [%3d %%] %s\n' "$p" "$t"
fi
}
bar_end() { [ "$TTY" = 1 ] && printf '\n'; LASTP=-1; return 0; }
{
echo "IRL4YOU BOX Einrichtung, Version $VERSION, $(date '+%Y-%m-%d %H:%M:%S')"
echo "System: $(uname -sr), $(. /etc/os-release 2>/dev/null; echo "${PRETTY_NAME:-?}")"
} > "$LOG"
say "IRL4YOU BOX: Komplett-Einrichtung (Version $VERSION)"
say "Das vollständige Protokoll: $LOG"
say ""
if systemctl is-active --quiet pipbox-send.service 2>/dev/null || pgrep -x belacoder >/dev/null 2>&1; then
say "Die Box sendet gerade. Bitte erst die Sendung beenden und dann noch einmal starten."; exit 1
fi
if ! wget -q --spider --timeout=10 https://github.com 2>/dev/null; then
say "Kein Internet auf der Box (github.com nicht erreichbar). Bitte Netzwerk prüfen und noch einmal starten."; exit 1
fi
NEED_REBOOT=0
apt_run() {
label=$1; shift
rc="$TMP/rc"; : > "$rc"
{
apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -o APT::Status-Fd=3 "$@" 3>&1 >>"$LOG" 2>&1
echo $? > "$rc"
} | while IFS=: read -r kind a pct c; do
case "$kind" in
dlstatus) v=${pct%%.*}; case "$v" in ''|*[!0-9]*) continue ;; esac; bar $((v * 40 / 100)) "Pakete laden" ;;
pmstatus) v=${pct%%.*}; case "$v" in ''|*[!0-9]*) continue ;; esac; bar $((40 + v * 60 / 100)) "Pakete einrichten" ;;
esac
done
bar_end
[ "$(cat "$rc" 2>/dev/null)" = 0 ]
}
if [ "$SKIP_SYS" = 1 ]; then
say "Schritt 1 von 2: Grundsystem (übersprungen)"
else
say "Schritt 1 von 2: Grundsystem aktualisieren (dauert je nach Stand einige Minuten)"
{
echo; echo "===== apt-get update ====="
} >> "$LOG"
bar 0 "Paketlisten holen"
if ! apt-get -o Acquire::http::Timeout=30 update >>"$LOG" 2>&1; then
bar_end; say " Die Paketlisten ließen sich nicht laden. Details im Protokoll. Weiter mit Schritt 2."
else
bar 100 "Paketlisten geholt"; bar_end
up=$(upgradable || true)
if [ -z "$up" ]; then
say " Das Grundsystem ist schon aktuell."
else
case " $(echo "$up" | tr '\n' ' ') " in *" l4t"*|*" linux-image-"*|*" belabox-linux-"*|*" belabox-network-config"*) NEED_REBOOT=1 ;; esac
echo "Zu aktualisieren: $(echo "$up" | wc -l) Pakete" >> "$LOG"
{
echo; echo "===== apt-get dist-upgrade ====="
} >> "$LOG"
if ! apt_run "Pakete" dist-upgrade; then
say " Das Systemupdate meldete einen Fehler (Details im Protokoll). Weiter mit Schritt 2."
else
held=$(upgradable | tr '\n' ' ' || true)
if [ -n "${held# }" ]; then
{ echo; echo "===== apt-get install (zurückgehaltene Pakete) ====="; } >> "$LOG"
apt_run "Pakete" install $held || say " Einige zurückgehaltene Pakete ließen sich nicht einrichten (Details im Protokoll)."
fi
say " Grundsystem aktualisiert."
fi
fi
fi
fi
say ""
say "Schritt 2 von 2: IRL4YOU BOX installieren (das Bauen der Bausteine dauert einige Minuten)"
{ echo; echo "===== install/install.sh ====="; } >> "$LOG"
rc="$TMP/rc2"; : > "$rc"
{
sh "$HERE/install/install.sh" install 2>&1
echo $? > "$rc"
} | while IFS= read -r line; do
printf '%s\n' "$line" >> "$LOG"
case "$line" in
"PIPBOX-STEP pakete") bar 12 "Benötigte Pakete prüfen" ;;
"PIPBOX-STEP dienst") bar 25 "Benutzer und Daten einrichten" ;;
"PIPBOX-STEP dateien") bar 38 "Programme und Oberfläche kopieren" ;;
"PIPBOX-STEP baustein") bar 50 "Bild-in-Bild-Baustein bauen" ;;
"PIPBOX-STEP srtla") bar 66 "SRTLA-Sender bauen" ;;
"PIPBOX-STEP belacoder") bar 80 "Encoder bauen" ;;
"PIPBOX-STEP start") bar 94 "Dienste starten" ;;
esac
done
bar 100 "Fertig"; bar_end
RC2=$(cat "$rc" 2>/dev/null || echo 1)
say ""
HINTS=$(sed -n '/===== install\/install.sh =====/,$p' "$LOG" | grep -E '^(WARNUNG|FEHLER)' || true)
BAD=""
for s in pipbox pipbox-dji nginx; do systemctl is-active --quiet "$s.service" 2>/dev/null || BAD="$BAD $s"; done
IP=$(hostname -I 2>/dev/null | awk '{print $1}')
if [ "$RC2" = 0 ] && [ -z "$HINTS" ] && [ -z "$BAD" ]; then
say "${C_OK}Alles fehlerfrei installiert.${C_RST}"
say "IRL4YOU BOX Version $VERSION ist eingerichtet."
RESULT=0
else
RESULT=1
say "Die Installation ist durchgelaufen, aber es gibt Hinweise:"
[ "$RC2" = 0 ] || say " - install.sh endete mit Fehlercode $RC2."
[ -z "$HINTS" ] || printf '%s\n' "$HINTS" | sed 's/^/ - /'
[ -z "$BAD" ] || say " - Diese Dienste laufen nicht:$BAD"
say "Bitte das Protokoll schicken: $LOG"
fi
say ""
say "Die Oberfläche der IRL4YOU BOX: ${C_LINK}http://${IP:-<Adresse der Box>}:8780${C_RST}"
if [ "$NEED_REBOOT" = 1 ] || [ -f /var/run/reboot-required ]; then
say ""
say "${C_WARN} NEUSTART NÖTIG ${C_RST}"
say "Das Systemupdate hat einen neuen Kernel und weitere Systempakete installiert."
say "${C_BOLD}Die Box muss jetzt neu gestartet werden:${C_RST} sudo reboot"
say "Erst danach läuft alles mit dem neuen Kernel. Nach etwa einer Minute ist die Oberfläche unter dem Link oben erreichbar."
fi
exit $RESULT