This commit is contained in:
Sebastian Hanz 2025-02-17 17:56:00 +01:00
commit 6a8b9708fd
9 changed files with 320 additions and 0 deletions

55
update/deConz/README.md Normal file
View file

@ -0,0 +1,55 @@
# Firmware Upgrade Script
Dieses Script ermöglicht es, eine Firmware für das DeCONZ ConBee II oder ähnliche Geräte herunterzuladen und auf einem angegebenen Gerät zu installieren. Es verwendet einen Docker-Container, um die Aktualisierung sicher und isoliert durchzuführen.
## Voraussetzungen
- Installierter Docker-Client auf dem System.
- Das Zielgerät muss per USB an das System angeschlossen und unter `/dev/` verfügbar sein.
- Die URL der Firmware, die heruntergeladen und installiert werden soll.
## Verwendung
**Hinweis:
Stelle sicher, dass das angegebene Gerät korrekt angeschlossen ist, bevor du das Skript ausführst!**
Das Skript erwartet zwei Parameter:
- **URL der Firmware**: Diese findest du auf der [DeCONZ-Firmware-Seite](https://deconz.dresden-elektronik.de/deconz-firmware/).
- **Device**: Der Pfad zum Gerät (z.B. `/dev/ttyACM0`).
**Beispiel:**
```bash
./firmware-upgrade.sh https://deconz.dresden-elektronik.de/deconz-firmware/deCONZ_ConBeeII_0x26780700.bin.GCF /dev/ttyACM0
```
# Was tut das Script?
### Firmware-Download:
Das Skript wechselt in das temporäre Verzeichnis /tmp und lädt die Firmware über die angegebene URL herunter.Falls der Download fehlschlägt, gibt das Skript eine entsprechende Fehlermeldung aus.
### Docker-Container starten:
Ein temporärer Docker-Container wird gestartet, um die Firmware-Installation sicher durchzuführen. Der Container erhält Zugriff auf notwendige Systemverzeichnisse wie /dev, /lib/modules, /sys und /tmp.
### Firmware-Flashen:
Der Flasher GCFFlasher_internal wird innerhalb des Containers aufgerufen und führt das Update auf dem angegebenen Gerät durch.
### Cleanup:
Nach erfolgreichem Flashen wird der Docker-Container gestoppt und entfernt. Außerdem wird die heruntergeladene Firmware-Datei gelöscht, um Speicherplatz freizugeben.
### Fehlerbehandlung
**Fehlende Parameter:** Wenn keine URL oder kein Gerät angegeben wird, erinnert das Skript daran, wie es korrekt verwendet wird.
**Gerät nicht gefunden:** Falls das angegebene Gerät nicht existiert, wird das Skript mit einem entsprechenden Hinweis abgebrochen.
**Fehler beim Download:** Wenn der Download fehlschlägt (z.B. durch eine falsche URL), bricht das Skript ebenfalls ab.

View file

@ -0,0 +1,50 @@
#!/bin/bash
url=$1
filename="${url##*/}"
device=$2
if [ -z "$1" ]; then
echo -e "\nParameter fehlen!\n"
echo -e "Die Firmware findest du hier: https://deconz.dresden-elektronik.de/deconz-firmware/\n"
echo -e "Usage: firmware-upgrade.sh <url> <device>\n"
echo -e "Beispiel: ./firmware-upgrade.sh https://deconz.dresden-elektronik.de/deconz-firmware/deCONZ_ConBeeII_0x26780700.bin.GCF /dev/ttyACM0\n"
exit
fi
# Check ob Gerät existiert
if [ -e "$device" ]; then
echo -e "\nDas Gerät $device existiert."
else
echo -e "\nDas Gerät $device existiert nicht. Hast du dich verschrieben?\n"
exit 1 # Abbruch mit Fehlercode 1
fi
#Wechse in das Arbeits-Verzeichnis und lade die Firmware herunter
cd /tmp
wget $url
# Check ob Download erfolgreich war
if [ $? -eq 0 ]; then
echo -e "\nDownload erfolgreich!\n"
else
echo -e "\nDownload fehlgeschlagen! Die URL ist eventuell nicht korrekt!\n"
exit 1 # Abbruch mit Fehlercode 1
fi
#Starte deconz-docker-container
docker run -d --name deconz-firmware --privileged --cap-add=ALL -v /dev:/dev -v /lib/modules:/lib/modules -v /sys:/sys -v /tmp:/tmp deconzcommunity/deconz:stable
#Führen den Flasher im deconz-container aus mit den zugehörigen Parametern
docker exec deconz-firmware /bin/bash -c "cd /tmp && GCFFlasher_internal -d $device -f ./$filename"
#Cleanup
echo -e "Stopped deconz-firmware\n"
docker stop deconz-firmware
echo -e "Removed deconz-firmware\n"
docker rm deconz-firmware
echo -e "Cleanup\n"
rm -f /tmp/$filename
echo "Done"

View file

@ -0,0 +1,32 @@
#!/bin/bash
# This script will automatically update your whole ioBroker-System inside Docker including adapters
# Define your common ioBroker-container-name from Docker
iobroker_container_name=iobroker
echo -e "\nBackup ioBroker...\n"
docker exec $iobroker_container_name iob backup
echo -e "\nStopping ioBroker...\n"
docker exec $iobroker_container_name pkill -u iobroker
echo -e "\nStopping ioBroker...\n"
docker exec $iobroker_container_name iob stop
echo -e "\nFixxing ioBroker if necessary...\n"
docker exec $iobroker_container_name iob fix
echo -e "\nUpdating database...\n"
docker exec $iobroker_container_name iob update
echo -e "\nUpgrade all updatable adapters\n"
docker exec $iobroker_container_name iob upgrade
echo -e "\nUpdate ioBroker js-controller (core). This may take a while..\n"
docker exec $iobroker_container_name iob upgrade self
echo -e "\nRestarting ioBroker\n"
docker exec $iobroker_container_name iob start
echo -e "\nAll done!\n"
echo Finish!
exit

View file

@ -0,0 +1,16 @@
#!/bin/bash
#This script will automatically update the js-controller of your ioBroker-System inside Docker
iobroker_container_name=iobroker
echo -e "Stopping ioBroker...\n"
docker exec $iobroker_container_name pkill -u iobroker
echo -e "\nUpdating database...\n"
docker exec $iobroker_container_name iob update
echo -e "\nUpdate ioBroker js-controller (core). This may take a while..\n"
docker exec $iobroker_container_name iob upgrade self
echo -e "\nAll done!\n"
echo Finish!
exit

View file

@ -0,0 +1,42 @@
#!/bin/bash
# Create docker-volume if not exists
#docker run -d \
# --name postgres \
# -e POSTGRES_USER=matrix \
# -e POSTGRES_PASSWORD="9uZoFV%cJi&EAZCV*dm7gSSyLs5XS@F8" \
# -e POSTGRES_DB=matrix_synapse \
# -e LC_COLLATE='C' \
# -e LC_CTYPE='C' \
# -e POSTGRES_INITDB_ARGS="--encoding=UTF-8" \
# -v /mnt/Docker/Synapse/postgres:/var/lib/postgresql/data \
# --restart=unless-stopped postgres:alpine
echo "Sichere PostgresSQL..."
docker exec postgres sh -c "pg_dumpall -U matrix > /var/lib/postgresql/data/dump.sql"
mv /mnt/Docker/Synapse/postgres/dump.sql /mnt/Docker/Synapse/dump.sql
echo "Erledigt!"
echo "Stoppe Docker-Container"
docker stop postgres
echo "Lösche Postgres-Volume..."
rm -r /mnt/Docker/Synapse/postgres/*
echo "Erledigt!"
echo "Jetzt aktualisiere das PostgresSQL-Image auf eine neue Version!"
echo "Bestätige mit OK wenn der Container läuft..."
read -p "Warte auf Eingabe" readline
if [ "$readline" = "OK" ]; then
echo "Restore PostgresSQL aus Backup in neue Version...!"
cp /mnt/Docker/Synapse/dump.sql /mnt/Docker/Synapse/postgres/dump.sql
docker exec postgres sh -c "psql -U matrix -d matrix_synapse < /var/lib/postgresql/data/dump.sql"
docker restart postgres
else
echo "Abbruch"
exit
fi
echo "Finish!"