ubuntuusers.de

Ventoy Script und Crontab

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3758

Ich hab mal wieder bischen rumgescriptet weil es mir ständig passiert das meine Ventoy Sticks veraltet sind und ich es meist erst merke wenn zu spät ist und es mich dann noch nervt das ich erst X-fach rumklicken muss eh ich zum passenden Download komme.

Also habe ich ein Script erstellt das folgendes tut:

  • es prüft welche Version auf meinem Rechner ist und ob es eine Neuere Version gibt

  • wenn es eine neuere Version gibt führt das Scripte nach Abfrage den Download durch

  • das Script fragt dann weiter ob die geladenen tar.gz gleich noch entpackt werden soll

  • und ob alte Versionen entfernt werden sollen

Und das ganze kann man dann per Crontab in einem vorgegebenen Zeitraum prüfen lassen.


Das Script:

#!/bin/bash

# Pfad zum Installationsverzeichnis
INSTALL_DIR="$HOME/Downloads"

# Aktuelle installierte Version ermitteln (durchsucht die Ordnernamen nach der Version)
INSTALLED_VERSION=$(ls -d "$INSTALL_DIR"/ventoy-* | grep -E '/ventoy-[0-9]+\.[0-9]+' | sort -V | tail -n 1 | grep -oP 'ventoy-\K[0-9]+\.[0-9]+')

# Neueste Version von der Ventoy-Website (Hauptseite) auslesen
LATEST_VERSION=$(curl -s "https://www.ventoy.net/en/index.html" | grep -oP 'ventoy-\K[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)

# Überprüfen, ob die installierte Version der neuesten entspricht
if [ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]; then
    # Überprüfen, ob der Ordner für die neueste Version bereits existiert
    INSTALL_DIR_FOR_LATEST="$INSTALL_DIR/ventoy-$LATEST_VERSION"
    
    if [ ! -d "$INSTALL_DIR_FOR_LATEST" ]; then
        # Download-Link zum vorgefertigten Linux-Paket erstellen
        DOWNLOAD_LINK="https://github.com/ventoy/Ventoy/releases/download/v$LATEST_VERSION/ventoy-$LATEST_VERSION-linux.tar.gz"

        # Anzeige der Version und des Links
        echo "Neue Version gefunden: $LATEST_VERSION"
        echo "Download-Link: $DOWNLOAD_LINK"

        # Anfrage, ob die neue Version heruntergeladen werden soll (Enter als j)
        read -p "Möchtest du die Version $LATEST_VERSION herunterladen? (J/n): " DOWNLOAD_CHOICE

        if [[ "$DOWNLOAD_CHOICE" == "" || "$DOWNLOAD_CHOICE" == "j" || "$DOWNLOAD_CHOICE" == "J" ]]; then
            # Mit wget den Download im gewünschten Ordner starten
            echo "Lade Ventoy Version $LATEST_VERSION herunter..."
            wget -P "$INSTALL_DIR" "$DOWNLOAD_LINK"

            # Bestätigung nach dem Download
            echo -e "\e[32mDownload abgeschlossen.\e[0m Du findest die Datei unter $INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz"
            
            # Abfrage, ob die Datei entpackt werden soll
            read -p "Soll die tar.gz entpackt werden? (J/n): " EXTRACT_CHOICE
            if [[ "$EXTRACT_CHOICE" == "" || "$EXTRACT_CHOICE" == "j" || "$EXTRACT_CHOICE" == "J" ]]; then
                echo "Entpacke Ventoy..."
                tar -xzf "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz" -C "$INSTALL_DIR"
                echo -e "\e[32mEntpacken abgeschlossen.\e[0m Du findest den entpackten Ordner unter $INSTALL_DIR/ventoy-$LATEST_VERSION"
                
                # Abfrage, ob alte Dateien gelöscht werden sollen
                read -p "Sollen alte Versionen entfernt werden? (J/n): " DELETE_CHOICE
                if [[ "$DELETE_CHOICE" == "" || "$DELETE_CHOICE" == "j" || "$DELETE_CHOICE" == "J" ]]; then
                    echo "Lösche alte Versionen..."
                    find "$INSTALL_DIR" -maxdepth 1 -type f -name "ventoy-*.tar.gz" ! -name "ventoy-$LATEST_VERSION-linux.tar.gz" -exec rm {} +
                    find "$INSTALL_DIR" -maxdepth 1 -type d -name "ventoy-*" ! -name "ventoy-$LATEST_VERSION" -exec rm -r {} +
                    echo -e "\e[32mAlte Versionen wurden entfernt.\e[0m"
                else
                    echo -e "\e[31mLöschen abgebrochen.\e[0m"
                fi
            else
                echo -e "\e[31mEntpacken abgebrochen.\e[0m"
            fi
        else
            echo -e "\e[31mDownload abgebrochen.\e[0m"
        fi
    fi
else
    # Keine neue Version, keine Benachrichtigung und keine Ausgabe mehr
    exit 0
fi

Bei mir liegt das Script dann unter ´$HOME/scripte/ventoy.sh


Und nun noch der Crontab Aufruf dazu.

crontab -e

Eintrag ergänzen

0 12 * * * [ ! -d "$HOME/Downloads/ventoy-$(curl -s https://www.ventoy.net/en/index.html | grep -oP 'ventoy-\K[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)" ] && xfce4-terminal --hold --command="bash -c '/$HOME/scripte/ventoy.sh; exec bash'"

Somit wird jeden Tag um 12 die Ventoyversion auf den Rechner geprüft und ggf. auf Nachfrage erneuert und altes entsorgt.

Achja - gibt es keine neuere Version wird auch keiner belästigt. 😀

Pfade müsst ihr ggf. selbst anpassen.

Danach muss man natürlich leider selbst per Hand alle Stick upgraden.


Nachtrag: Die $HOME/scripte/ventoy.sh muss man natürlich auch ausführbar machen.

chmod +x $HOME/scripte/ventoy.sh

Dimanche Team-Icon

Ikhayateam

Anmeldungsdatum:
20. Juli 2007

Beiträge: 2074

Ich habe das Script noch nicht getestet, aber was ich nicht verstehe, ist, warum du die alte Ventoy-Version entfernen willst.

Wenn ich Ventoy händisch aktualisiere, dann mache ich es, nach dem Entpacken, mit dem Befehl:

sudo ./Ventoy2Disk.sh -u /dev/sdb  >sdb ist der Ventoy-Stick

Dadurch wird die alte Version einfach überschrieben, ohne Probleme.

Und sollte nicht nach dem Download auch die sha256sum überprüft werden?

schwarzheit Team-Icon

Supporter
(Themenstarter)
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3758

@Dimanche

Die alte Version auf dem Rechner (also der alte Download und der alte Ordner) wird entfernt. Nicht die Version auf den Stick - die muss man ja nach dem ganzen Kram eh per Hand upgraden zumal wenn es mehrere sind. Zumindest wenn man es grafisch (mit der VentoyGUI.x86_64) macht.

Ich halte halt gleich den Rechner mit sauber. 😉


Aber die Idee das Script gleich noch zu nutzen um die USB Sticks zu upgraden finde ich super. 👍

Ich denk da mal noch n bisl drauf rum und erweiter das Script dann noch.

Wer mitmachen will - nur zu. 😀

Dimanche Team-Icon

Ikhayateam

Anmeldungsdatum:
20. Juli 2007

Beiträge: 2074

schwarzheit schrieb:

Die alte Version auf dem Rechner (also der alte Download und der alte Ordner) wird entfernt. […]

Da hätte ich auch selber drauf kommen können. 😕

Aber die Idee das Script gleich noch zu nutzen um die USB Sticks zu upgraden finde ich super. 👍

Diese Idee möchte ich jetzt noch etwas weiter ausspinnen. Auch wenn ich nicht weis, ob der Gedanke überhaupt umsetzbar ist.

Ideal wäre es doch, wenn dein Script erst dann anfängt zu arbeiten, wenn man den Ventoy-Stick nutzt, also in den Rechner einsteckt. Dazu dann auch zu Beginn noch die alte Versionsnummer anzeigt und zum Schluss die neue Versionsnummer.

schwarzheit schrieb:

  • es prüft welche Version auf meinem Rechner ist und ob es eine Neuere Version gibt

Was aber auch nur dann funktioniert, wenn überhaupt noch eine Version vorhanden ist. Ich lösche den Download immer sofort nachdem ich den Stick aktualisiert habe.

schwarzheit Team-Icon

Supporter
(Themenstarter)
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3758

Dimanche schrieb:

Aber die Idee das Script gleich noch zu nutzen um die USB Sticks zu upgraden finde ich super. 👍

Diese Idee möchte ich jetzt noch etwas weiter ausspinnen. Auch wenn ich nicht weis, ob der Gedanke überhaupt umsetzbar ist.

Ideal wäre es doch, wenn dein Script erst dann anfängt zu arbeiten, wenn man den Ventoy-Stick nutzt, also in den Rechner einsteckt. Dazu dann auch zu Beginn noch die alte Versionsnummer anzeigt und zum Schluss die neue Versionsnummer.

Das war eigentlich meine Ausgangsidee die ich dann verworfen habe. Weil es nutzt mir nix wenn ich den Stick an irgendeinem Rechner anstecke wo das dann nicht dementsprechend eingerichtet ist. Und vor allem nutzt es nichts wenn man mit dem Stick arbeiten will. Weil dann isses ja schon zu spät.

Deswegen für mich sinnvoller die regelmäßige Prüfung auf neue Versionen (mein Recher <> Homepage). Damit ich eben nicht erst in die Verlegenheit komme mit ner alten Version aufm Stick rumzufummeln.

schwarzheit schrieb:

  • es prüft welche Version auf meinem Rechner ist und ob es eine Neuere Version gibt

Was aber auch nur dann funktioniert, wenn überhaupt noch eine Version vorhanden ist. Ich lösche den Download immer sofort nachdem ich den Stick aktualisiert habe.

Dein Download ist irrelevant. Es prüft ob der entpackte Ordner (Beispiel: ventoy-1.1.05) vorhanden ist. 😀

Und selbst wenn der fehlt - gibts zwar ne Fehlermeldung das der Order nicht da ist aber das Script an sich läuft dann trotzdem weiter.

Ist das "sauber" - ne wahrscheinlich nich. Stört mich aber gerade erstmal weniger. 😀


Auf jeden Fall - danke für deine Ideen. ☺

schwarzheit Team-Icon

Supporter
(Themenstarter)
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3758

Sooooo...

Ich habe das ganze nun noch ein bischen erweitert.

dazu gekommen:

  • SHA-256 Prüfung

  • man kann nun gleich noch Sticks erstellen oder aktualisieren lassen

Hier das aktualisierte Script:

#!/bin/bash

# Pfad zum Installationsverzeichnis
INSTALL_DIR="$HOME/Downloads"

# Aktuelle installierte Version ermitteln (durchsucht die Ordnernamen nach der Version)
INSTALLED_VERSION=$(ls -d "$INSTALL_DIR"/ventoy-* | grep -E '/ventoy-[0-9]+\.[0-9]+' | sort -V | tail -n 1 | grep -oP 'ventoy-\K[0-9]+\.[0-9]+')

# Neueste Version von der Ventoy-Website (Hauptseite) auslesen
LATEST_VERSION=$(curl -s "https://www.ventoy.net/en/index.html" | grep -oP 'ventoy-\K[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)

# Überprüfen, ob die installierte Version der neuesten entspricht
if [ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]; then
    INSTALL_DIR_FOR_LATEST="$INSTALL_DIR/ventoy-$LATEST_VERSION"
    
    # Prüfen, ob die neueste Version bereits vorhanden ist
    if [ ! -d "$INSTALL_DIR_FOR_LATEST" ]; then
        DOWNLOAD_LINK="https://github.com/ventoy/Ventoy/releases/download/v$LATEST_VERSION/ventoy-$LATEST_VERSION-linux.tar.gz"
        
        echo "Neue Version gefunden: $LATEST_VERSION"
        echo "Download-Link: $DOWNLOAD_LINK"

        # Nutzer fragen, ob die neue Version heruntergeladen werden soll
        read -p "Möchtest du die Version $LATEST_VERSION herunterladen? (J/n): " DOWNLOAD_CHOICE

        if [[ "$DOWNLOAD_CHOICE" == "" || "$DOWNLOAD_CHOICE" == "j" || "$DOWNLOAD_CHOICE" == "J" ]]; then
            echo "Lade Ventoy Version $LATEST_VERSION herunter..."
            wget -P "$INSTALL_DIR" "$DOWNLOAD_LINK"

            echo "Überprüfe SHA-256 Hash..."
            EXPECTED_HASH=$(curl -sL "https://github.com/ventoy/Ventoy/releases" | grep -oP "[a-f0-9]{64}(?=  ventoy-$LATEST_VERSION-linux.tar.gz)" | head -n 1)
            ACTUAL_HASH=$(sha256sum "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz" | awk '{print $1}')

            # Prüfen, ob der erwartete Hash mit dem tatsächlichen übereinstimmt
            if [[ "$EXPECTED_HASH" == "$ACTUAL_HASH" ]]; then
                echo -e "\e[32mSHA-256 OK\e[0m"
            else
                echo -e "\e[31mSHA-256 fehlerhaft. Download wiederholen? (J/n)\e[0m"
                read -p "" REPEAT_CHOICE
                if [[ "$REPEAT_CHOICE" == "" || "$REPEAT_CHOICE" == "j" || "$REPEAT_CHOICE" == "J" ]]; then
                    rm "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz"
                    exec "$0"
                else
                    exit 1
                fi
            fi

            echo -e "\e[32mDownload abgeschlossen.\e[0m Du findest die Datei unter $INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz"
            
            # Nutzer fragen, ob das Archiv entpackt werden soll
            read -p "Soll die ventoy-$LATEST_VERSION-linux.tar.gz entpackt werden? (J/n): " EXTRACT_CHOICE
            if [[ "$EXTRACT_CHOICE" == "" || "$EXTRACT_CHOICE" == "j" || "$EXTRACT_CHOICE" == "J" ]]; then
                echo "Entpacke Ventoy..."
                tar -xzf "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz" -C "$INSTALL_DIR"
                echo -e "\e[32mEntpacken abgeschlossen.\e[0m Du findest den entpackten Ordner unter $INSTALL_DIR/ventoy-$LATEST_VERSION"
                
                # Nutzer fragen, ob alte Versionen gelöscht werden sollen
                read -p "Sollen alte Versionen entfernt werden? (J/n): " DELETE_CHOICE
                if [[ "$DELETE_CHOICE" == "" || "$DELETE_CHOICE" == "j" || "$DELETE_CHOICE" == "J" ]]; then
                    echo "Lösche alte Versionen..."
                    find "$INSTALL_DIR" -maxdepth 1 -type f -name "ventoy-*.tar.gz" ! -name "ventoy-$LATEST_VERSION-linux.tar.gz" -exec rm {} +
                    find "$INSTALL_DIR" -maxdepth 1 -type d -name "ventoy-*" ! -name "ventoy-$LATEST_VERSION" -exec rm -r {} +
                    echo -e "\e[32mAlte Versionen wurden entfernt.\e[0m"
                else
                    echo -e "\e[31mLöschen abgebrochen.\e[0m"
                fi
            else
                echo -e "\e[31mEntpacken abgebrochen.\e[0m"
            fi
        else
            echo -e "\e[31mDownload abgebrochen.\e[0m"
        fi
    fi
else
    exit 0
fi

# Funktion, um die angeschlossenen USB-Geräte und deren Größe korrekt anzuzeigen
get_usb_devices() {
    lsblk -o NAME,SIZE,TRAN | grep usb | awk '$1 !~ /[0-9]/ {print $1, $2}' | column -t
}

# Schleife, um nach dem Erstellen oder Aktualisieren von Ventoy zu fragen
while true; do
    # Abfrage, ob der Stick erstellt oder aktualisiert werden soll
    read -p "Möchtest du einen Ventoy USB Stick erstellen (neue Installation) (e), aktualisieren (A) oder nichts tun (n)? (e/A/n): " ACTION_CHOICE

    if [[ "$ACTION_CHOICE" == "" || "$ACTION_CHOICE" == "a" || "$ACTION_CHOICE" == "A" ]]; then
        echo "Verfügbare USB-Geräte:"
        get_usb_devices

        # USB-Gerät auswählen
        while true; do
            read -p "Bitte wähle das USB-Gerät (z.B. sda, sdb, sdc): " USB_DEVICE
            if ls /dev/$USB_DEVICE &>/dev/null; then
                echo "Das gewählte USB-Gerät ist: /dev/$USB_DEVICE"
                break
            else
                echo "Das USB-Gerät /dev/$USB_DEVICE existiert nicht. Bitte wähle ein gültiges Gerät."
                get_usb_devices
            fi
        done

        # Aktualisieren
        echo "Aktualisiere den Stick mit Ventoy..."
        sudo "$INSTALL_DIR/ventoy-$LATEST_VERSION/Ventoy2Disk.sh" -u "/dev/$USB_DEVICE"
        echo "Der Stick wurde erfolgreich erstellt."

    elif [[ "$ACTION_CHOICE" == "e" || "$ACTION_CHOICE" == "E" ]]; then
        echo "Verfügbare USB-Geräte:"
        get_usb_devices

        # USB-Gerät auswählen
        while true; do
            read -p "Bitte wähle das USB-Gerät (z.B. sda, sdb, sdc): " USB_DEVICE
            if ls /dev/$USB_DEVICE &>/dev/null; then
                echo "Das gewählte USB-Gerät ist: /dev/$USB_DEVICE"
                break
            else
                echo "Das USB-Gerät /dev/$USB_DEVICE existiert nicht. Bitte wähle ein gültiges Gerät."
                get_usb_devices
            fi
        done

        # Neu erstellen
        echo "Erstelle einen neuen Stick mit Ventoy..."
        sudo "$INSTALL_DIR/ventoy-$LATEST_VERSION/Ventoy2Disk.sh" -i "/dev/$USB_DEVICE"
        echo "Der Stick wurde erfolgreich aktualisiert."

    elif [[ "$ACTION_CHOICE" == "n" || "$ACTION_CHOICE" == "N" ]]; then
        echo "Fertig! ;)"
        break

    else
        echo "Ungültige Auswahl. Versuche es erneut."
    fi
done

Ich bin jetzt betriebsblind und habe fertig. 😉 😀

Jetzt dürft ihr testen.

Wenns noch Ideen gibt - immer her damit.

schwarzheit Team-Icon

Supporter
(Themenstarter)
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3758

Der Crontab Eintrag war auch noch fehlerhaft.

Der muss so lauten:

0 12 * * * DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/$(id -u) bash -c '[ ! -d "$HOME/Downloads/ventoy-$(curl -s https://www.ventoy.net/en/index.html | grep -oP "ventoy-\K[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)" ] && xfce4-terminal --hold --command="bash -c \"/$HOME/scripte/ventoy.sh; exec bash\""' 

Dimanche Team-Icon

Ikhayateam

Anmeldungsdatum:
20. Juli 2007

Beiträge: 2074

Ich werde das Script bei Gelegenheit mal testen. Sieh aber auch so schon gut aus. 👍

Was mir aber noch aufgefallen ist, dass du curl zum Download nutzt.

Curl ist aber unter Ubuntu nicht vorinstalliert.

Ist es daher nicht besser wget zunehmen? Auch, um unnötige Supportanfragen zu vermeiden?

schwarzheit Team-Icon

Supporter
(Themenstarter)
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3758

Jup. Ist besser.

Hier nun curl mit wget ersetzt:

Crontab Eintrag:

0 12 * * * DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/$(id -u) bash -c '[ ! -d "$HOME/Downloads/ventoy-$(wget -qO- https://www.ventoy.net/en/index.html | grep -oP "ventoy-\K[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)" ] && xfce4-terminal --hold --command="bash -c \"/$HOME/scripte/ventoy.sh; exec bash\""' 

das Script:

#!/bin/bash

# Pfad zum Installationsverzeichnis
INSTALL_DIR="$HOME/Downloads"

# Aktuelle installierte Version ermitteln (durchsucht die Ordnernamen nach der Version)
INSTALLED_VERSION=$(ls -d "$INSTALL_DIR"/ventoy-* | grep -E '/ventoy-[0-9]+\.[0-9]+' | sort -V | tail -n 1 | grep -oP 'ventoy-\K[0-9]+\.[0-9]+')

# Neueste Version von der Ventoy-Website (Hauptseite) auslesen
LATEST_VERSION=$(wget -qO- "https://www.ventoy.net/en/index.html" | grep -oP 'ventoy-\K[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)

# Überprüfen, ob die installierte Version der neuesten entspricht
if [ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]; then
    INSTALL_DIR_FOR_LATEST="$INSTALL_DIR/ventoy-$LATEST_VERSION"
    
    # Prüfen, ob die neueste Version bereits vorhanden ist
    if [ ! -d "$INSTALL_DIR_FOR_LATEST" ]; then
        DOWNLOAD_LINK="https://github.com/ventoy/Ventoy/releases/download/v$LATEST_VERSION/ventoy-$LATEST_VERSION-linux.tar.gz"
        
        echo "Neue Ventoy-Version gefunden: $LATEST_VERSION"
        echo "Download-Link: $DOWNLOAD_LINK"

        # Nutzer fragen, ob die neue Version heruntergeladen werden soll
        read -p "Möchtest du die Version $LATEST_VERSION herunterladen? (J/n): " DOWNLOAD_CHOICE

        if [[ "$DOWNLOAD_CHOICE" == "" || "$DOWNLOAD_CHOICE" == "j" || "$DOWNLOAD_CHOICE" == "J" ]]; then
            echo "Lade Ventoy Version $LATEST_VERSION herunter..."
            wget -P "$INSTALL_DIR" "$DOWNLOAD_LINK"

            echo "Überprüfe SHA-256 Hash..."
            EXPECTED_HASH=$(wget -qO- "https://github.com/ventoy/Ventoy/releases" | grep -oP "[a-f0-9]{64}(?=  ventoy-$LATEST_VERSION-linux.tar.gz)" | head -n 1)
            ACTUAL_HASH=$(sha256sum "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz" | awk '{print $1}')

            # Prüfen, ob der erwartete Hash mit dem tatsächlichen übereinstimmt
            if [[ "$EXPECTED_HASH" == "$ACTUAL_HASH" ]]; then
                echo -e "\e[1;32mSHA-256 OK\e[0m"
            else
                echo -e "\e[1;31mSHA-256 fehlerhaft. Download wiederholen? (J/n)\e[0m"
                read -p "" REPEAT_CHOICE
                if [[ "$REPEAT_CHOICE" == "" || "$REPEAT_CHOICE" == "j" || "$REPEAT_CHOICE" == "J" ]]; then
                    rm "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz"
                    exec "$0"
                else
                    exit 1
                fi
            fi

            echo -e "\e[1;32mDownload abgeschlossen.\e[0m Du findest die Datei unter $INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz"
            
            # Nutzer fragen, ob das Archiv entpackt werden soll
            read -p "Soll die ventoy-$LATEST_VERSION-linux.tar.gz entpackt werden? (J/n): " EXTRACT_CHOICE
            if [[ "$EXTRACT_CHOICE" == "" || "$EXTRACT_CHOICE" == "j" || "$EXTRACT_CHOICE" == "J" ]]; then
                echo "Entpacke Ventoy..."
                tar -xzf "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz" -C "$INSTALL_DIR"
                echo -e "\e[1;32mEntpacken abgeschlossen.\e[0m Du findest den entpackten Ordner unter $INSTALL_DIR/ventoy-$LATEST_VERSION"
                
                # Nutzer fragen, ob alte Versionen gelöscht werden sollen
                read -p "Sollen alte Versionen entfernt werden? (J/n): " DELETE_CHOICE
                if [[ "$DELETE_CHOICE" == "" || "$DELETE_CHOICE" == "j" || "$DELETE_CHOICE" == "J" ]]; then
                    echo "Lösche alte Versionen..."
                    find "$INSTALL_DIR" -maxdepth 1 -type f -name "ventoy-*.tar.gz" ! -name "ventoy-$LATEST_VERSION-linux.tar.gz" -exec rm {} +
                    find "$INSTALL_DIR" -maxdepth 1 -type d -name "ventoy-*" ! -name "ventoy-$LATEST_VERSION" -exec rm -r {} +
                    echo -e "\e[1;32mAlte Versionen wurden entfernt.\e[0m"
                else
                    echo -e "\e[1;31mLöschen abgebrochen.\e[0m"
                fi
            else
                echo -e "\e[1;31mEntpacken abgebrochen.\e[0m"
            fi
        else
            echo -e "\e[1;31mDownload abgebrochen.\e[0m"
        fi
    fi
else
    exit 0
fi

# Funktion, um die angeschlossenen USB-Geräte und deren Größe korrekt anzuzeigen
get_usb_devices() {
    lsblk -o NAME,SIZE,TRAN | grep usb | awk '$1 !~ /[0-9]/ {print $1, $2}' | column -t
}

# Schleife, um nach dem Erstellen oder Aktualisieren von Ventoy zu fragen
while true; do
    # Abfrage, ob der Stick erstellt oder aktualisiert werden soll
    read -p "Möchtest du einen Ventoy USB Stick erstellen (neue Installation) (e), aktualisieren (A) oder nichts tun (beenden) (n)? (e/A/n): " ACTION_CHOICE

    if [[ "$ACTION_CHOICE" == "" || "$ACTION_CHOICE" == "a" || "$ACTION_CHOICE" == "A" ]]; then
        echo "Verfügbare USB-Geräte:"
        get_usb_devices

        # USB-Gerät auswählen
        while true; do
            read -p "Bitte wähle das USB-Gerät (z.B. sda, sdb, sdc): " USB_DEVICE
            if ls /dev/$USB_DEVICE &>/dev/null; then
                echo "Das gewählte USB-Gerät ist: /dev/$USB_DEVICE"
                break
            else
                echo "Das USB-Gerät /dev/$USB_DEVICE existiert nicht. Bitte wähle ein gültiges Gerät."
                get_usb_devices
            fi
        done

        # Aktualisieren
        echo "Aktualisiere den Stick mit Ventoy..."
        sudo "$INSTALL_DIR/ventoy-$LATEST_VERSION/Ventoy2Disk.sh" -u "/dev/$USB_DEVICE"
        echo -e "\e[1;32mDer Stick wurde erfolgreich erstellt.\e[0m"

    elif [[ "$ACTION_CHOICE" == "e" || "$ACTION_CHOICE" == "E" ]]; then
        echo "Verfügbare USB-Geräte:"
        get_usb_devices

        # USB-Gerät auswählen
        while true; do
            read -p "Bitte wähle das USB-Gerät (z.B. sda, sdb, sdc): " USB_DEVICE
            if ls /dev/$USB_DEVICE &>/dev/null; then
                echo "Das gewählte USB-Gerät ist: /dev/$USB_DEVICE"
                break
            else
                echo "Das USB-Gerät /dev/$USB_DEVICE existiert nicht. Bitte wähle ein gültiges Gerät."
                get_usb_devices
            fi
        done

        # Neu erstellen
        echo "Erstelle einen neuen Stick mit Ventoy..."
        sudo "$INSTALL_DIR/ventoy-$LATEST_VERSION/Ventoy2Disk.sh" -i "/dev/$USB_DEVICE"
        echo -e "\e[1;32mDer Stick wurde erfolgreich aktualisiert.\e[0m"

    elif [[ "$ACTION_CHOICE" == "n" || "$ACTION_CHOICE" == "N" ]]; then
        echo -e "\e[1;34mFertig! ;)\e[0m"
        break

    else
        echo "Ungültige Auswahl. Versuche es erneut."
    fi
done

schwarzheit Team-Icon

Supporter
(Themenstarter)
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3758

Hier noch eine Version ohne unnötige interactive Abfragen.

  • Download, entpacken und alte Versionen (auf dem Rechner 😉 ) löschen passieren hier jetzt automatisch.

  • Es gibt nur eine positive Rückmeldung wenn erledigt und wo es abgelegt wurde.

  • Beim Download sieht man zusätzlich noch den Ladebalken damit man sieht das da noch was passiert.

Sticks erstellen oder aktualisieren bleibt wie vorher bestehen.

Nachtrag: Ich habe noch eine Funktion eingefügt falls aus versehen kein USB Stick angesteckt ist.

Crontab Eintrag bleibt wie er ist:

0 12 * * * DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/$(id -u) bash -c '[ ! -d "$HOME/Downloads/ventoy-$(wget -qO- https://www.ventoy.net/en/index.html | grep -oP "ventoy-\K[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)" ] && xfce4-terminal --hold --command="bash -c \"/$HOME/scripte/ventoy.sh; exec bash\""' 

das verkürzte Script:

#!/bin/bash

# Pfad zum Installationsverzeichnis
INSTALL_DIR="$HOME/Downloads"

# Aktuelle installierte Version ermitteln (durchsucht die Ordnernamen nach der Version)
INSTALLED_VERSION=$(ls -d "$INSTALL_DIR"/ventoy-* | grep -E '/ventoy-[0-9]+\.[0-9]+' | sort -V | tail -n 1 | grep -oP 'ventoy-\K[0-9]+\.[0-9]+')

# Neueste Version von der Ventoy-Website (Hauptseite) auslesen
LATEST_VERSION=$(wget -qO- "https://www.ventoy.net/en/index.html" | grep -oP 'ventoy-\K[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)

# Überprüfen, ob die installierte Version der neuesten entspricht
if [ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]; then
    INSTALL_DIR_FOR_LATEST="$INSTALL_DIR/ventoy-$LATEST_VERSION"
    
    # Prüfen, ob die neueste Version bereits vorhanden ist
    if [ ! -d "$INSTALL_DIR_FOR_LATEST" ]; then
        DOWNLOAD_LINK="https://github.com/ventoy/Ventoy/releases/download/v$LATEST_VERSION/ventoy-$LATEST_VERSION-linux.tar.gz"
        
        echo "Neue Ventoy-Version gefunden: $LATEST_VERSION"
        echo "Download-Link: $DOWNLOAD_LINK"

        # Download
            echo "Lade Ventoy Version $LATEST_VERSION herunter..."
            wget -q --show-progress -P "$INSTALL_DIR" "$DOWNLOAD_LINK"

            echo "Überprüfe SHA-256 Hash..."
            EXPECTED_HASH=$(wget -qO- "https://github.com/ventoy/Ventoy/releases" | grep -oP "[a-f0-9]{64}(?=  ventoy-$LATEST_VERSION-linux.tar.gz)" | head -n 1)
            ACTUAL_HASH=$(sha256sum "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz" | awk '{print $1}')

            # Prüfen, ob der erwartete Hash mit dem tatsächlichen übereinstimmt
            if [[ "$EXPECTED_HASH" == "$ACTUAL_HASH" ]]; then
                echo -e "\e[1;32mSHA-256 OK\e[0m"
            else
                echo -e "\e[1;31mSHA-256 fehlerhaft. Download wiederholen? (J/n)\e[0m"
                read -p "" REPEAT_CHOICE
                if [[ "$REPEAT_CHOICE" == "" || "$REPEAT_CHOICE" == "j" || "$REPEAT_CHOICE" == "J" ]]; then
                    rm "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz"
                    exec "$0"
                else
                    exit 1
                fi
            fi

            echo -e "\e[1;32mDownload abgeschlossen.\e[0m Du findest die Datei unter $INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz"
            
            # entpacken
                echo "Entpacke Ventoy..."
                tar -xzf "$INSTALL_DIR/ventoy-$LATEST_VERSION-linux.tar.gz" -C "$INSTALL_DIR"
                echo -e "\e[1;32mEntpacken abgeschlossen.\e[0m Du findest den entpackten Ordner unter $INSTALL_DIR/ventoy-$LATEST_VERSION"
                
                # alte Versionen löschen
                    echo "Lösche alte Versionen..."
                    find "$INSTALL_DIR" -maxdepth 1 -type f -name "ventoy-*.tar.gz" ! -name "ventoy-$LATEST_VERSION-linux.tar.gz" -exec rm {} +
                    find "$INSTALL_DIR" -maxdepth 1 -type d -name "ventoy-*" ! -name "ventoy-$LATEST_VERSION" -exec rm -r {} +
                    echo -e "\e[1;32mAlte Versionen wurden entfernt.\e[0m"
    fi
else
    exit 0
fi

# Funktion, um die angeschlossenen USB-Geräte und deren Größe korrekt anzuzeigen
get_usb_devices() {
    lsblk -o NAME,SIZE,TRAN | grep usb | awk '$1 !~ /[0-9]/ {print $1, $2}' | column -t
}

# Abfrage, ob der Stick erstellt oder aktualisiert werden soll
while true; do
    read -p "Möchtest du einen Ventoy USB Stick erstellen (neue Installation) (e), aktualisieren (A) oder nichts tun (beenden) (n)? (e/A/n): " ACTION_CHOICE
    if [[ "$ACTION_CHOICE" == "" || "$ACTION_CHOICE" == "a" || "$ACTION_CHOICE" == "A" ]]; then
        ACTION="update"
        break
    elif [[ "$ACTION_CHOICE" == "e" || "$ACTION_CHOICE" == "E" ]]; then
        ACTION="install"
        break
    elif [[ "$ACTION_CHOICE" == "n" || "$ACTION_CHOICE" == "N" ]]; then
        echo -e "\e[1;34mFertig! ;)\e[0m"
        exit 0
    else
        echo "Ungültige Auswahl. Versuche es erneut."
    fi
done

# USB-Geräte überprüfen und auswählen
while true; do
    echo "Verfügbare USB-Geräte:"
    get_usb_devices

    # Wenn keine USB-Geräte gefunden wurden
    if [ -z "$(lsblk -o NAME,TRAN | grep usb)" ]; then
        echo "Keine USB-Geräte gefunden. Bitte stecke einen USB-Stick an und drücke Enter, um fortzufahren oder ESC zum Abbrechen."
        
        # Warten auf Enter oder ESC
        read -n 1 -s -r key
        if [[ $key == $'\e' ]]; then
            echo "Abgebrochen."
            exit 0
        fi
    else
        # USB-Gerät auswählen
        while true; do
            read -p "Bitte wähle das USB-Gerät (z.B. sda, sdb, sdc): " USB_DEVICE
            if ls /dev/$USB_DEVICE &>/dev/null; then
                echo "Das gewählte USB-Gerät ist: /dev/$USB_DEVICE"
                break
            else
                echo "Das USB-Gerät /dev/$USB_DEVICE existiert nicht. Bitte wähle ein gültiges Gerät."
                get_usb_devices
            fi
        done

        # Neu erstellen oder aktualisieren
        if [[ "$ACTION" == "install" ]]; then
            echo "Erstelle einen neuen Stick mit Ventoy..."
            sudo "$INSTALL_DIR/ventoy-$LATEST_VERSION/Ventoy2Disk.sh" -i "/dev/$USB_DEVICE"
            echo -e "\e[1;32mDer Stick wurde erfolgreich erstellt.\e[0m"
        elif [[ "$ACTION" == "update" ]]; then
            echo "Aktualisiere den Stick mit Ventoy..."
            sudo "$INSTALL_DIR/ventoy-$LATEST_VERSION/Ventoy2Disk.sh" -u "/dev/$USB_DEVICE"
            echo -e "\e[1;32mDer Stick wurde erfolgreich aktualisiert.\e[0m"
        fi
        break
    fi
done

# Nach weiteren USB-Geräten fragen
while true; do
	read -p "Möchtest du einen weiteren USB Stick erstellen/aktualisieren? (J/n): " REPEAT_CHOICE
	if [[ "$REPEAT_CHOICE" != "" && "$REPEAT_CHOICE" != "j" && "$REPEAT_CHOICE" != "J" ]]; then
  	  echo -e "\e[1;34mFertig! ;)\e[0m"
  	  exit 0
	fi
        # Abfrage, ob der Stick erstellt oder aktualisiert werden soll
        while true; do
            read -p "Möchtest du einen Ventoy USB Stick erstellen (neue Installation) (e), aktualisieren (A) oder nichts tun (beenden) (n)? (e/A/n): " ACTION_CHOICE
            if [[ "$ACTION_CHOICE" == "" || "$ACTION_CHOICE" == "a" || "$ACTION_CHOICE" == "A" ]]; then
                ACTION="update"
                break
            elif [[ "$ACTION_CHOICE" == "e" || "$ACTION_CHOICE" == "E" ]]; then
                ACTION="install"
                break
            elif [[ "$ACTION_CHOICE" == "n" || "$ACTION_CHOICE" == "N" ]]; then
                echo -e "\e[1;34mFertig! ;)\e[0m"
                exit 0
            else
                echo "Ungültige Auswahl. Versuche es erneut."
            fi
        done
        
        # USB-Geräte überprüfen und auswählen
        while true; do
            echo "Verfügbare USB-Geräte:"
            get_usb_devices

            # Wenn keine USB-Geräte gefunden wurden
            if [ -z "$(lsblk -o NAME,TRAN | grep usb)" ]; then
                echo "Keine USB-Geräte gefunden. Bitte stecke einen USB-Stick an und drücke Enter, um fortzufahren oder ESC zum Abbrechen."
                
                # Warten auf Enter oder ESC
                read -n 1 -s -r key
                if [[ $key == $'\e' ]]; then
                    echo "Abgebrochen."
                    exit 0
                fi
            else
                # USB-Gerät auswählen
                while true; do
                    read -p "Bitte wähle das USB-Gerät (z.B. sda, sdb, sdc): " USB_DEVICE
                    if ls /dev/$USB_DEVICE &>/dev/null; then
                        echo "Das gewählte USB-Gerät ist: /dev/$USB_DEVICE"
                        break
                    else
                        echo "Das USB-Gerät /dev/$USB_DEVICE existiert nicht. Bitte wähle ein gültiges Gerät."
                        get_usb_devices
                    fi
                done

                # Neu erstellen oder aktualisieren
                if [[ "$ACTION" == "install" ]]; then
                    echo "Erstelle einen neuen Stick mit Ventoy..."
                    sudo "$INSTALL_DIR/ventoy-$LATEST_VERSION/Ventoy2Disk.sh" -i "/dev/$USB_DEVICE"
                    echo -e "\e[1;32mDer Stick wurde erfolgreich erstellt.\e[0m"
                elif [[ "$ACTION" == "update" ]]; then
                    echo "Aktualisiere den Stick mit Ventoy..."
                    sudo "$INSTALL_DIR/ventoy-$LATEST_VERSION/Ventoy2Disk.sh" -u "/dev/$USB_DEVICE"
                    echo -e "\e[1;32mDer Stick wurde erfolgreich aktualisiert.\e[0m"
                fi
                break
            fi
        done
done

Dimanche Team-Icon

Ikhayateam

Anmeldungsdatum:
20. Juli 2007

Beiträge: 2074

Hallo schwarzheit,

ich habe dein Script nun getestet und was soll ich sagen 👍 👍

Ein paar kleine Änderungen, die aber wohl nur mich betreffen, habe ich vorgenommen.

  • 1 habe ich den Downloadpfad geändert, da ich schon einen Unterordner Ventoy unter Downloads habe.

  • 2 ich habe cron nicht benutzt, das Script befindet in den Ventoy-Ordner. Wird hier auch gestartet ./ventoy.sh

Cron benutze ich deshalb nicht, weil ich den Ventoy-Stick nur selten nutze. Und daher auch keine laufende Überprüfung auf neuen Versionen brauche.

Ansonsten läuft alles so wie es soll: Stick einstecken, Script aufrufen und alles nimmt so wie geplant seinen Gang.

Etwas ist mir aber noch aufgefallen:

Wenn der Stick schon auf die aktuellste Ventoyversion aktualisiert ist, wird er, wenn man nicht abbricht (n), dennoch aktualisiert.

Kann man hier noch was ändern in der Art, dass die Aktualisierung abgebrochen wird, wenn sich auf dem Stick schon die aktuellste Version befindet?

PS Ich werde dein Projekt im nächsten UWR vorstellen.

schwarzheit Team-Icon

Supporter
(Themenstarter)
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3758

Dimanche schrieb:

ich habe dein Script nun getestet und was soll ich sagen 👍 👍

Danke. ☺

Ein paar kleine Änderungen, die aber wohl nur mich betreffen, habe ich vorgenommen.

  • 1 habe ich den Downloadpfad geändert, da ich schon einen Unterordner Ventoy unter Downloads habe.

  • 2 ich habe cron nicht benutzt, das Script befindet in den Ventoy-Ordner. Wird hier auch gestartet ./ventoy.sh

Cron benutze ich deshalb nicht, weil ich den Ventoy-Stick nur selten nutze. Und daher auch keine laufende Überprüfung auf neuen Versionen brauche.

Ja, die Pfade kann ja jeder anpassen wie er möchte. Und cron macht halt dann Sinn wenn man immer aktuell sein möchte.

Man könnte cron auch ohne den Scriptstart nutzen und nur eine Benachrichtung ausgeben lassen.

Also da gibts bestimmt noch viel mehr "Spielarten". 😉

Ansonsten läuft alles so wie es soll: Stick einstecken, Script aufrufen und alles nimmt so wie geplant seinen Gang.

Sehr gut. ☺

Wenn der Stick schon auf die aktuellste Ventoyversion aktualisiert ist, wird er, wenn man nicht abbricht (n), dennoch aktualisiert.

Kann man hier noch was ändern in der Art, dass die Aktualisierung abgebrochen wird, wenn sich auf dem Stick schon die aktuellste Version befindet?

Diese Abfrage und auch den Abbruch bietet Ventoy in der Aktualierungsroutine selbst an.

Weil es prüft das ja selbst und zeigt dann an: "Update Ventoy 1.1.05 ==⇒ 1.1.05 Continue? (y/n) " Da kann man (n) wählen und falls man aus versehen einen falschen Stick erwischt hat einfach mit einem anderen Stick weiter machen.

Und wenn man da nicht abbricht wird der Stick halt neu geschrieben - das stimmt - seh ich aber nicht wirklich als Problem. Im Gegenteil - lass mal sein das der Stick nicht mehr richtig funktioniert dann kann man trotz der Versionserkennung den Stick neu schreiben lassen. Ohne ihn selbst komplett neu machen zu müssen. Klar könnte man das alles auch selbst per sudo ./Ventoy2Disk.sh -u /dev/sdX machen.

Hm, ich denk da mal noch n bischen drauf rum. 😉

PS Ich werde dein Projekt im nächsten UWR vorstellen.

Oh wow. Werd ich jetzt berühmt? 🤣

Dimanche Team-Icon

Ikhayateam

Anmeldungsdatum:
20. Juli 2007

Beiträge: 2074

schwarzheit schrieb:

Oh wow. Werd ich jetzt berühmt? 🤣

Bist du das nicht sowieso? 🙄 (zumindest hier im Forum)

Mylin

Avatar von Mylin

Anmeldungsdatum:
23. Juli 2024

Beiträge: 218

Dimanche schrieb:

Bist du das nicht sowieso? 🙄 (zumindest hier im Forum)

Dann könnte sie eigentlich ihren Nick in berühmtheit ändern. 😎

Antworten |