From 6a8b9708fda0988fb80ca3ad1dbc9d1ffa537313 Mon Sep 17 00:00:00 2001 From: Sebastian Hanz Date: Mon, 17 Feb 2025 17:56:00 +0100 Subject: [PATCH] Init --- docker/createDockerComposeFile.sh | 20 +++++++ docker/remoteControlDocker.sh | 56 +++++++++++++++++++ system/adjustJournalSize.sh | 20 +++++++ system/cleanupLogs.sh | 29 ++++++++++ update/deConz/README.md | 55 ++++++++++++++++++ update/deConz/firmware-upgrade.sh | 50 +++++++++++++++++ .../ioBroker/update_iobroker_docker_full.sh | 32 +++++++++++ .../update_iobroker_docker_js-controller.sh | 16 ++++++ update/postgres/upgrade_postgres_version.sh | 42 ++++++++++++++ 9 files changed, 320 insertions(+) create mode 100644 docker/createDockerComposeFile.sh create mode 100644 docker/remoteControlDocker.sh create mode 100644 system/adjustJournalSize.sh create mode 100644 system/cleanupLogs.sh create mode 100644 update/deConz/README.md create mode 100644 update/deConz/firmware-upgrade.sh create mode 100644 update/ioBroker/update_iobroker_docker_full.sh create mode 100644 update/ioBroker/update_iobroker_docker_js-controller.sh create mode 100644 update/postgres/upgrade_postgres_version.sh diff --git a/docker/createDockerComposeFile.sh b/docker/createDockerComposeFile.sh new file mode 100644 index 0000000..b372fa0 --- /dev/null +++ b/docker/createDockerComposeFile.sh @@ -0,0 +1,20 @@ +#!/bin/bash +container_name=$1 +output_dir=$2 + +if [ -z "$1" ]; then + echo -e "\nParameter fehlen!\n" + echo -e "Usage: createDockerComposeFile.sh \n" + echo -e "Beispiel: ./createDockerComposeFile.sh iobroker \n" + exit +fi + +if [ -z "$2" ]; then + output_dir=$(pwd)/docker-compose.yml +fi + +# Erstelle Docker-Compose-File +echo -e "\nErstelle Docker-Compose-File in aktuellem Verzeichnis\n" +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose $container_name > $output_dir +echo -e "Fertig!\n" +exit 0 \ No newline at end of file diff --git a/docker/remoteControlDocker.sh b/docker/remoteControlDocker.sh new file mode 100644 index 0000000..dcb8a98 --- /dev/null +++ b/docker/remoteControlDocker.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +CONFIG_FILE="/etc/docker/daemon.json" +SYSTEMD_DIR="/etc/systemd/system/docker.service.d" +SYSTEMD_FILE="$SYSTEMD_DIR/docker.conf" +HOST_IP=$(hostname -I | awk '{print $1}') + +echo "Überprüfe, ob $CONFIG_FILE existiert..." + +if [ ! -f "$CONFIG_FILE" ]; then + echo "Datei existiert nicht. Erstelle $CONFIG_FILE..." + cat < $CONFIG_FILE +{ + "data-root": "/var/lib/docker", + "hosts": ["unix:///var/run/docker.sock", "tcp://$HOST_IP:2375"] +} +EOF + echo "$CONFIG_FILE wurde erstellt." +else + echo "$CONFIG_FILE existiert bereits. Passe den Inhalt an..." + jq '. + {"data-root": "/var/lib/docker", "hosts": (if .hosts then (.hosts + ["tcp://$HOST_IP:2375"] | unique) else ["unix:///var/run/docker.sock", "tcp://$HOST_IP:2375"] end)}' $CONFIG_FILE > /tmp/daemon.json && mv /tmp/daemon.json $CONFIG_FILE + echo "$CONFIG_FILE wurde angepasst." +fi + +echo "Überprüfe, ob $SYSTEMD_FILE existiert..." +if [ ! -f "$SYSTEMD_FILE" ]; then + echo "Datei existiert nicht. Erstelle $SYSTEMD_FILE..." + mkdir -p "$SYSTEMD_DIR" + cat < $SYSTEMD_FILE +[Service] +ExecStart= +ExecStart=/usr/bin/dockerd +EOF + echo "$SYSTEMD_FILE wurde erstellt." +else + echo "$SYSTEMD_FILE existiert bereits. Überprüfe den Inhalt..." + if ! grep -q "ExecStart=/usr/bin/dockerd" "$SYSTEMD_FILE"; then + echo "Inhalt unvollständig. Ergänze erforderliche Zeilen..." + echo -e "[Service]\nExecStart=\nExecStart=/usr/bin/dockerd" >> "$SYSTEMD_FILE" + echo "$SYSTEMD_FILE wurde aktualisiert." + else + echo "$SYSTEMD_FILE enthält bereits die notwendigen Einstellungen. Keine Änderungen erforderlich." + fi +fi + +# Systemd neu laden +echo "Lade Systemd-Daemon neu..." +systemctl daemon-reload + +# Docker-Dienst neu starten +echo "Starte Docker neu..." +service docker restart + +# Status von Docker überprüfen +echo "Prüfe den Status von Docker..." +systemctl status docker --no-pager diff --git a/system/adjustJournalSize.sh b/system/adjustJournalSize.sh new file mode 100644 index 0000000..0b045d7 --- /dev/null +++ b/system/adjustJournalSize.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Pfad zur Datei +FILE="/etc/systemd/journald.conf" + +# Überprüfen, ob die Datei existiert +if [[ ! -f $FILE ]]; then + echo "Datei $FILE existiert nicht." + exit 1 +fi + +# Ersetzen der betroffenen Zeilen in der Datei +sed -i \ + -e 's/^#SystemMaxUse=.*$/SystemMaxUse=50M/' \ + -e 's/^SystemMaxUse=.*$/SystemMaxUse=50M/' \ + "$FILE" + +# Datei neu laden +systemctl restart systemd-journald +echo "Die Änderungen wurden vorgenommen und systemd-journald wurde neu gestartet." \ No newline at end of file diff --git a/system/cleanupLogs.sh b/system/cleanupLogs.sh new file mode 100644 index 0000000..f16befc --- /dev/null +++ b/system/cleanupLogs.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +YELLOW="\[\033[1;33m\]" # Yellow +RED="\[\033[1;31m\]" # Red +ENDCOLOR="\033[0m" + +if [ $USER != root ]; then + echo -e $RED"Error: Du musst root sein" + echo -e $YELLOW"Exiting..."$ENDCOLOR + exit 0 +fi + +echo -e $YELLOW"Leere apt cache..."$ENDCOLOR +apt-get clean + +echo -e $YELLOW"Entferne alle nicht mehr verwendete Pakete..."$ENDCOLOR +apt-get autoremove + +if [ "$1" = "-l" ]; then + echo -e $YELLOW"Entferne alte Logdateien..."$ENDCOLOR + rm /var/log/*.gz >/dev/null 2>&1 + rm /var/log/*.log.* >/dev/null 2>&1 + rm /var/log/*.1 >/dev/null 2>&1 +else + echo -e $YELLOW"Finish!"$ENDCOLOR + exit +fi +echo -e $YELLOW"Finish!"$ENDCOLOR +exit diff --git a/update/deConz/README.md b/update/deConz/README.md new file mode 100644 index 0000000..3695caf --- /dev/null +++ b/update/deConz/README.md @@ -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. diff --git a/update/deConz/firmware-upgrade.sh b/update/deConz/firmware-upgrade.sh new file mode 100644 index 0000000..6296575 --- /dev/null +++ b/update/deConz/firmware-upgrade.sh @@ -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 \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" diff --git a/update/ioBroker/update_iobroker_docker_full.sh b/update/ioBroker/update_iobroker_docker_full.sh new file mode 100644 index 0000000..ab155a7 --- /dev/null +++ b/update/ioBroker/update_iobroker_docker_full.sh @@ -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 diff --git a/update/ioBroker/update_iobroker_docker_js-controller.sh b/update/ioBroker/update_iobroker_docker_js-controller.sh new file mode 100644 index 0000000..88b14af --- /dev/null +++ b/update/ioBroker/update_iobroker_docker_js-controller.sh @@ -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 \ No newline at end of file diff --git a/update/postgres/upgrade_postgres_version.sh b/update/postgres/upgrade_postgres_version.sh new file mode 100644 index 0000000..fdcf5ed --- /dev/null +++ b/update/postgres/upgrade_postgres_version.sh @@ -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!" \ No newline at end of file