# Self-Extracting Archive (SFX) Builder Dieses Projekt packt beliebige Dateien und ein Start-Skript (Entrypoint) zu einer einzigen, selbst-extrahierenden **`.run`**-Datei zusammen. Ideal, wenn du eine Anwendung, ein Install- oder Update-Paket ohne externe Abhängigkeiten verteilen möchtest. --- ## Inhalt - [Self-Extracting Archive (SFX) Builder](#self-extracting-archive-sfx-builder) - [Inhalt](#inhalt) - [Funktionsweise](#funktionsweise) - [Voraussetzungen](#voraussetzungen) - [Schnellstart](#schnellstart) - [Beispiele](#beispiele) - [Erklärung der Parameter](#erklärung-der-parameter) - [Dateiaufbau des SFX](#dateiaufbau-des-sfx) - [Troubleshooting](#troubleshooting) - [Lizenz](#lizenz) --- ## Funktionsweise 1. **`build_sfx.sh`** *Erstellt* ein SFX-Archiv: - komprimiert das Payload-Verzeichnis mit **`tar`** + **`zstd`** - injiziert den komprimierten Stream und Metadaten in **`sfx_header.sh`** - liefert eine ausführbare **`*.run`**-Datei 2. **`sfx_header.sh`** *Läuft* beim Entpacken auf dem Zielsystem: - extrahiert das Archiv in ein temporäres Verzeichnis - macht den angegebenen Entrypoint ausführbar - führt ihn mit sämtlichen an die `.run`-Datei übergebenen Argumenten aus --- ## Voraussetzungen | Tool | Zweck | Getestete Version | | ---------------------------------------- | ------------------------- | ----------------- | | `bash` | Shell-Interpreter | ≥ 4.2 | | `tar` | Paketierung | _(coreutils)_ | | `zstd` | Kompression | ≥ 1.5 | | `numfmt` | Menschliche Größenangaben | _(coreutils)_ | | GNU `sed`, `grep`, `cut`, `wc`, `mktemp` | Hilfs-Tools | _(coreutils)_ | > **Tipp:** Unter Debian/Ubuntu genügt: > `sudo apt install zstd coreutils` --- ## Schnellstart ```bash # 1) Projekt klonen git clone https://github.com//sfx-builder.git cd sfx-builder # 2) Payload vorbereiten mkdir payload && cp -r payload/ chmod +x payload/start.sh # dein Entrypoint # 3) SFX erzeugen ./build_sfx.sh --payload-dir payload --entrypoint start.sh --output cool_tool.run # 4) Verteilen & ausführen scp cool_tool.run user@host:/tmp ssh user@host "chmod +x /tmp/cool_tool.run && /tmp/cool_tool.run --help" ``` --- ## Beispiele ```bash # Minimale Syntax (Standard-Ausgabe: sfx.run) ./build_sfx.sh -p payload -e start.sh # Eigenen Ausgabepfad wählen ./build_sfx.sh -p payload -e bin/app.sh -o dist/app_installer.run # Debug-Info des erzeugten Archivs prüfen bash -x cool_tool.run --version ``` --- ## Erklärung der Parameter | Option | Alias | Pflicht? | Beschreibung | | --------------------- | ----- | -------- | -------------------------------------------------------- | | `--payload-dir ` | `-p` | ✅ | Verzeichnis mit allen zu verteilenden Dateien | | `--entrypoint ` | `-e` | ✅ | Ausführbare Datei *innerhalb* von **DIR** | | `--output ` | `-o` | ❌ | Zielpfad der erzeugten `.run`-Datei (Default: `sfx.run`) | --- ## Dateiaufbau des SFX ```text ┌─────────────┐ sfx_header.sh (Bootstrap-Logik) ├─────────────┤ __ARCHIVE_BEGIN__ (Marker) │ ZSTD-Tar │ payload.tar.zst (komprimierter Payload) └─────────────┘ ``` - **`ARCHIVE_LINE`** = Zeilennummer, ab der das komprimierte Archiv beginnt - **`ENTRYPOINT`** = Dateiname des Start-Skripts im Payload-Archiv Die Platzhalter werden beim Build automatisch ersetzt. --- ## Troubleshooting | Problem | Ursache / Lösung | | ------------------------------------ | ----------------------------------------------- | | `zstd: command not found` | Installiere das Paket `zstd`. | | Entrypoint wird nicht ausgeführt | Prüfe Ausführungsrechte (`chmod +x`). | | „Marker __ARCHIVE_BEGIN__ not found“ | Stelle sicher, dass der Header unverändert ist. | --- ## Lizenz Veröffentlicht unter der MIT-Lizenz – siehe `LICENSE` für Details.