-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupdate_naps3_app.sh
More file actions
executable file
·81 lines (71 loc) · 3.13 KB
/
Copy pathupdate_naps3_app.sh
File metadata and controls
executable file
·81 lines (71 loc) · 3.13 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
#!/usr/bin/env bash
# Обновляет только Python-приложение NAPS3 до версии из этого архива.
# Поддерживает RPM-установку и старую ручную установку.
set -Eeuo pipefail
if [[ $EUID -ne 0 ]]; then
echo "Запустите через sudo: sudo $0" >&2
exit 1
fi
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
SOURCE="$SCRIPT_DIR/naps3.py"
[[ -s "$SOURCE" ]] || { echo "Не найден $SOURCE" >&2; exit 1; }
BACKEND_SOURCE="$SCRIPT_DIR/windows_backend.py"
[[ -s "$BACKEND_SOURCE" ]] || { echo "Не найден $BACKEND_SOURCE" >&2; exit 1; }
UDEV_RULE_SOURCE="$SCRIPT_DIR/packaging/60-naps3-scanners.rules"
[[ -s "$UDEV_RULE_SOURCE" ]] || { echo "Не найден $UDEV_RULE_SOURCE" >&2; exit 1; }
VERSION="$(sed -nE 's/^APP_VERSION = "([^"]+)"/\1/p' "$SOURCE" | head -n 1)"
[[ -n "$VERSION" ]] || { echo "Не удалось определить версию." >&2; exit 1; }
TARGET=""
if [[ -f /usr/libexec/naps3/naps3.py ]]; then
TARGET=/usr/libexec/naps3/naps3.py
elif [[ -f /opt/naps3/naps3.py ]]; then
TARGET=/opt/naps3/naps3.py
else
echo "Установленный NAPS3 не найден." >&2
echo "Для новой ручной установки используйте install_redos8.sh." >&2
exit 1
fi
STAMP="$(date +%Y%m%d-%H%M%S)"
BACKUP="${TARGET}.backup-${STAMP}"
BACKEND_TARGET="$(dirname "$TARGET")/windows_backend.py"
BACKEND_BACKUP="${BACKEND_TARGET}.backup-${STAMP}"
cp -a "$TARGET" "$BACKUP"
if [[ -f "$BACKEND_TARGET" ]]; then
cp -a "$BACKEND_TARGET" "$BACKEND_BACKUP"
fi
pkill -f "$TARGET" 2>/dev/null || true
sleep 1
install -m 0755 "$SOURCE" "${TARGET}.new"
install -m 0644 "$BACKEND_SOURCE" "${BACKEND_TARGET}.new"
mv -f "${TARGET}.new" "$TARGET"
mv -f "${BACKEND_TARGET}.new" "$BACKEND_TARGET"
rm -rf "$(dirname "$TARGET")/__pycache__"
if ! /usr/bin/python3 -m py_compile "$TARGET" "$BACKEND_TARGET"; then
cp -a "$BACKUP" "$TARGET"
if [[ -f "$BACKEND_BACKUP" ]]; then
cp -a "$BACKEND_BACKUP" "$BACKEND_TARGET"
fi
exit 1
fi
install -d -m 0755 /etc/udev/rules.d
install -m 0644 "$UDEV_RULE_SOURCE" /etc/udev/rules.d/60-naps3-scanners.rules
udevadm control --reload-rules 2>/dev/null || true
udevadm trigger --action=add --subsystem-match=usb \
--attr-match=idVendor=04a9 --attr-match=idProduct=2737 \
2>/dev/null || true
INSTALLED_VERSION="$(sed -nE 's/^APP_VERSION = "([^"]+)"/\1/p' "$TARGET" | head -n 1)"
[[ "$INSTALLED_VERSION" == "$VERSION" ]] || {
echo "Проверка версии не пройдена: $INSTALLED_VERSION" >&2
cp -a "$BACKUP" "$TARGET"
if [[ -f "$BACKEND_BACKUP" ]]; then
cp -a "$BACKEND_BACKUP" "$BACKEND_TARGET"
fi
exit 1
}
echo
echo "NAPS3 обновлён до версии $INSTALLED_VERSION."
echo "Резервная копия: $BACKUP"
echo "Запустите приложение командой: naps3"
if command -v rpm >/dev/null 2>&1 && rpm -q naps3 >/dev/null 2>&1; then
echo "Примечание: RPM-база сохранит номер старого пакета до установки нового RPM."
fi