22 Οκτωβρίου 2025 / Lefteris Iliadis (SomniusX)
Ventoy Fetch (Python) λάβε πάντα το τελευταίο!
22 Οκτωβρίου 2025
Αυτοματοποιημένο Script Ενημέρωσης και Εκκίνησης Ventoy
Αυτοματοποιημένο Script Ενημέρωσης και Εκκίνησης Ventoy
Αυτό το Python script δημιουργήθηκε για να απλοποιήσει τη διαδικασία ενημέρωσης και χρήσης του Ventoy στο Linux. Πρακτικά, κάνει όλη τη δουλειά αυτόματα χωρίς να χρειάζεται να ψάχνεις manually για νέες εκδόσεις ή να κατεβάζεις αρχεία από το SourceForge.
Τι κάνει ακριβώς:
Κάθε φορά που το τρέχεις, το python script συνδέεται στο RSS feed του Ventoy στο SourceForge και ελέγχει ποια είναι η τελευταία διαθέσιμη έκδοση για Linux. Στη συνέχεια διαβάζει την τοπική έκδοση που έχεις αποθηκευμένη (αν υπάρχει) και τις συγκρίνει.
Αν υπάρχει νεότερη έκδοση, αυτόματα κατεβάζει το tarball για Linux, το αποσυμπιέζει σε προσωρινό φάκελο, σβήνει τα παλιά αρχεία από τον φάκελο Downloads/ventoy και μεταφέρει τα νέα αρχεία εκεί. Μετά αποθηκεύει το νούμερο της νέας έκδοσης σε ένα αρχείο version.txt για μελλοντική σύγκριση.
Το ωραίο είναι ότι στέλνει και ειδοποίηση στο Telegram (χρησιμοποιώντας ένα άλλο script που έχω, το tg-msg.sh) για να ξέρεις αμέσως ότι κατέβηκε νέα έκδοση και πού αποθηκεύτηκε. Εάν δεν το θέλετε, κάντε το comment out.
Δηλαδή από
run([str(TG_SCRIPT), f"New Ventoy {latest_version} fetched and placed in {VENTOY_DIR}"])
Σε
## run([str(TG_SCRIPT), f"New Ventoy {latest_version} fetched and placed in {VENTOY_DIR}"])
Αφού ολοκληρωθεί η ενημέρωση (ή αν ήσουν ήδη up-to-date), το script ανιχνεύει αυτόματα την αρχιτεκτονική του συστήματός σου (x86_64, aarch64, i386, κτλ.) και ξεκινάει το αντίστοιχο Ventoy GUI για το σύστημά σου. Δηλαδή, με ένα command έχεις αμέσως μπροστά σου το Ventoy έτοιμο για χρήση.
Τέλος, καθαρίζει αυτόματα τον προσωρινό φάκελο που χρησιμοποίησε για το κατέβασμα, οπότε δεν σου αφήνει σκουπίδια πίσω.
Σε ποιους απευθύνεται:
Αν χρησιμοποιείς συχνά το Ventoy και θες να είσαι πάντα στην τελευταία έκδοση χωρίς να ασχολείσαι με manual downloads και extractions, να ψάχνεις το πρόσφατο appimage ή άλλο, αυτό το script είναι ιδανικό. Μπορείς ακόμα να το βάλεις σε cron job ή systemd timer για να τρέχει αυτόματα κάθε εβδομάδα και να σε ειδοποιεί μόνο όταν υπάρχει ενημέρωση, απλά να μην τρέχει το gui.
Απαιτήσεις:
Python 3
wget
tar
Ένα Telegram bot (προαιρετικό, για τις ειδοποιήσεις)
Και τώρα το actual python script..
#!/usr/bin/env python3
import os
import platform
import shutil
import subprocess
import sys
import xml.etree.ElementTree as ET
from pathlib import Path
from urllib.request import urlopen
# --- Configuration ---
VENTOY_DIR = Path.home() / "Downloads/ventoy"
TG_SCRIPT = Path.home() / "scripts/tg-msg.sh"
TMP_DIR = Path("/tmp/ventoy_download")
RSS_URL = "https://sourceforge.net/projects/ventoy/rss"
# --- Helper Functions ---
def verbose(msg):
print(f"[INFO] {msg}")
def run(cmd, check=True):
verbose(f"Running: {' '.join(cmd)}")
subprocess.run(cmd, check=check)
# --- Parse RSS to find latest Linux tarball ---
def get_latest_tarball():
verbose(f"Fetching RSS feed: {RSS_URL}")
with urlopen(RSS_URL) as response:
rss_data = response.read()
root = ET.fromstring(rss_data)
# Find all <link> elements
links = [elem.text for elem in root.iter() if elem.tag.endswith("link")]
# Filter for Linux tarballs
linux_links = [link for link in links if link.endswith("linux.tar.gz/download")]
if not linux_links:
raise RuntimeError("No Linux tarball found in RSS feed")
latest_link = linux_links[0] # First link is usually latest
# Extract version from URL path (e.g., "v1.1.07" -> "1.1.07")
version_folder = Path(latest_link).parts[-3] # e.g., "v1.1.07"
latest_version = version_folder.lstrip('v') # Remove 'v' prefix
return latest_version, latest_link
# --- Main Logic ---
def main():
TMP_DIR.mkdir(exist_ok=True)
try:
latest_version, download_url = get_latest_tarball()
except Exception as e:
print(f"[ERROR] {e}")
return
verbose(f"Latest Ventoy version: {latest_version}")
local_version_file = VENTOY_DIR / "version.txt"
local_version = local_version_file.read_text().strip() if local_version_file.exists() else ""
verbose(f"Local Ventoy version: {local_version or 'none'}")
if latest_version.lower() != local_version.lower():
verbose("Downloading latest Ventoy tarball...")
tarball = TMP_DIR / "ventoy.tar.gz"
run(["wget", "-O", str(tarball), download_url])
verbose("Extracting tarball...")
run(["tar", "-xzf", str(tarball), "-C", str(TMP_DIR)])
# Detect extracted folder (case-insensitive)
extracted_folders = [f for f in TMP_DIR.iterdir() if f.is_dir() and "ventoy" in f.name.lower()]
if not extracted_folders:
print("[ERROR] Could not find extracted Ventoy folder!")
return
extracted_folder = extracted_folders[0]
verbose("Updating local Ventoy installation...")
VENTOY_DIR.mkdir(parents=True, exist_ok=True)
# Clear old files
for item in VENTOY_DIR.iterdir():
if item.is_dir():
shutil.rmtree(item)
else:
item.unlink()
# Move new files
for item in extracted_folder.iterdir():
shutil.move(str(item), VENTOY_DIR)
# Save version
local_version_file.write_text(latest_version)
# Send Telegram notification
verbose("Sending Telegram notification...")
run([str(TG_SCRIPT), f"New Ventoy {latest_version} fetched and placed in {VENTOY_DIR}"])
else:
verbose("Ventoy is already up-to-date.")
# Launch GUI edition for current architecture
arch = platform.machine() # e.g., 'x86_64', 'aarch64', 'i686', 'mips64'
# Map common architecture names to Ventoy naming
arch_map = {
'x86_64': 'x86_64',
'AMD64': 'x86_64',
'aarch64': 'aarch64',
'arm64': 'aarch64',
'i386': 'i386',
'i686': 'i386',
'mips64': 'mips64el'
}
ventoy_arch = arch_map.get(arch, arch)
gui_name = f"VentoyGUI.{ventoy_arch}"
gui_path = VENTOY_DIR / gui_name
if gui_path.exists():
verbose(f"Launching Ventoy GUI: {gui_path}")
run([str(gui_path)])
else:
print(f"[ERROR] {gui_name} not found in local Ventoy folder! (System arch: {arch})")
# Cleanup tmp folder
verbose("Cleaning up temporary folder...")
shutil.rmtree(TMP_DIR)
TMP_DIR.mkdir(exist_ok=True)
if __name__ == "__main__":
main()
Σώστε το ξέρω γω ventoy-fetch.py δώστε του chmod +x ventoy-fetch.py για να είναι εκτελέσιμο, και εκτελέστε το ./ventoy-fetch.py