schwarzheit
Supporter
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
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
Supporter
(Themenstarter)
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
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:
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
Supporter
(Themenstarter)
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:
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
Supporter
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 3758
|
Sooooo... Ich habe das ganze nun noch ein bischen erweitert. dazu gekommen:
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
Supporter
(Themenstarter)
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
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
Supporter
(Themenstarter)
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
Supporter
(Themenstarter)
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
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
Supporter
(Themenstarter)
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
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
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. 😎
|