From 01dbbba22745ccca932e12b95e90406e9836cd8f Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Sun, 13 Sep 2026 21:50:19 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20i686-Build-Target=20entfernen=20(io-urin?= =?UTF-8?q?g=20unterst=C3=BCtzt=20keine=2032-Bit-x86-Bindings)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit testing.yaml scheiterte beim i686-Cross-Build mit "The prebuilt sys.rs may not be compatible with your target" aus der io-uring-Crate. Ursache: turso_sdk_kit (Abhängigkeit von turso) fordert von turso_core unconditional das Feature "io_uring" an - anders als "fts" ist das nicht abschaltbar. io-uring 0.7.15 (aktuellste Version) liefert vorgefertigte FFI-Bindings nur für x86_64/aarch64/riscv64/powerpc64/ loongarch64, nicht für i686. --cfg=io_uring_skip_arch_check wurde bewusst NICHT verwendet: auf i686 würde das stillschweigend die x86_64-Bindings nutzen, deren Struct-Layouts (u. a. Pointer-Breite) nicht zum 32-Bit-ABI passen - echtes Risiko für Speicherkorruption bei den rohen io_uring-Syscalls, kein reiner Lint. i686 daher komplett aus den Build-Targets entfernt: Linker-Eintrag (.cargo/config.toml), Toolchain-Install/rustup-Target/Build-/Paketier- Schritte (main.yaml, testing.yaml), sowie die Zielarchitektur-Angaben in README.md/AGENTS.md. Revert-Bedingung in AGENTS.md §5.2.2 dokumentiert (sobald io-uring i686-Bindings mitbringt oder turso io_uring optional macht). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SnWfGGqHJGh2AhZ6uhotaD --- .cargo/config.toml | 3 --- .gitea/workflows/main.yaml | 9 ++------- .gitea/workflows/testing.yaml | 9 ++------- AGENTS.md | 10 ++++++++-- README.md | 6 +++--- 5 files changed, 15 insertions(+), 22 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index c7356c5..bb28fe0 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -10,6 +10,3 @@ git-fetch-with-cli = true [target.aarch64-unknown-linux-gnu] linker = "aarch64-linux-gnu-gcc" - -[target.i686-unknown-linux-gnu] -linker = "i686-linux-gnu-gcc" diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml index f201502..b9fac9e 100644 --- a/.gitea/workflows/main.yaml +++ b/.gitea/workflows/main.yaml @@ -64,7 +64,7 @@ jobs: - name: Install Cross-Compilation Toolchains (apt) run: | sudo apt-get update - sudo apt-get install -y gcc-aarch64-linux-gnu gcc-i686-linux-gnu + sudo apt-get install -y gcc-aarch64-linux-gnu - name: Ermittle Rust-Version für Rustup-Target-Cache-Key run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV" @@ -75,12 +75,11 @@ jobs: with: path: | ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu - ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/i686-unknown-linux-gnu key: rustup-targets-${{ runner.os }}-${{ env.RUST_VERSION }} - name: Add Rust Cross-Compilation Targets if: steps.cache-rustup-targets.outputs.cache-hit != 'true' - run: rustup target add aarch64-unknown-linux-gnu i686-unknown-linux-gnu + run: rustup target add aarch64-unknown-linux-gnu - name: PATH um Cargo-bin-Verzeichnis ergänzen run: | @@ -111,7 +110,6 @@ jobs: run: | cargo build --release --target x86_64-unknown-linux-gnu cargo build --release --target aarch64-unknown-linux-gnu - cargo build --release --target i686-unknown-linux-gnu - name: Determine Build Number id: build_num @@ -130,20 +128,17 @@ jobs: run: | cargo deb --target x86_64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build cargo deb --target aarch64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build - cargo deb --target i686-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build - name: Build Fedora / RPM Packages (.rpm) run: | mkdir -p target/generate-rpm cargo generate-rpm --target x86_64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm cargo generate-rpm --target aarch64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm - cargo generate-rpm --target i686-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm - name: Build Arch Linux Packages (.pkg.tar.zst) run: | python3 scripts/package-arch.py --target x86_64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" python3 scripts/package-arch.py --target aarch64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" - python3 scripts/package-arch.py --target i686-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" - name: Publish Packages to Gitea Package Registry env: diff --git a/.gitea/workflows/testing.yaml b/.gitea/workflows/testing.yaml index 6bf6d29..42cf728 100644 --- a/.gitea/workflows/testing.yaml +++ b/.gitea/workflows/testing.yaml @@ -64,7 +64,7 @@ jobs: - name: Install Cross-Compilation Toolchains (apt) run: | sudo apt-get update - sudo apt-get install -y gcc-aarch64-linux-gnu gcc-i686-linux-gnu + sudo apt-get install -y gcc-aarch64-linux-gnu - name: Ermittle Rust-Version für Rustup-Target-Cache-Key run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV" @@ -75,12 +75,11 @@ jobs: with: path: | ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu - ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/i686-unknown-linux-gnu key: rustup-targets-${{ runner.os }}-${{ env.RUST_VERSION }} - name: Add Rust Cross-Compilation Targets if: steps.cache-rustup-targets.outputs.cache-hit != 'true' - run: rustup target add aarch64-unknown-linux-gnu i686-unknown-linux-gnu + run: rustup target add aarch64-unknown-linux-gnu - name: PATH um Cargo-bin-Verzeichnis ergänzen run: | @@ -111,7 +110,6 @@ jobs: run: | cargo build --release --target x86_64-unknown-linux-gnu cargo build --release --target aarch64-unknown-linux-gnu - cargo build --release --target i686-unknown-linux-gnu - name: Determine Build Number id: build_num @@ -130,20 +128,17 @@ jobs: run: | cargo deb --target x86_64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build cargo deb --target aarch64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build - cargo deb --target i686-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build - name: Build Fedora / RPM Packages (.rpm) run: | mkdir -p target/generate-rpm cargo generate-rpm --target x86_64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm cargo generate-rpm --target aarch64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm - cargo generate-rpm --target i686-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm - name: Build Arch Linux Packages (.pkg.tar.zst) run: | python3 scripts/package-arch.py --target x86_64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" python3 scripts/package-arch.py --target aarch64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" - python3 scripts/package-arch.py --target i686-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" - name: Publish Packages to Gitea Package Registry env: diff --git a/AGENTS.md b/AGENTS.md index 5c09c77..111b50e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -19,7 +19,7 @@ Die Orchestrierung dieser drei Schritte liegt in `src/resolver.rs`; `src/main.rs Zur Laufzeit werden folgende System-Tools benötigt: `ip` (iproute2), `ping` (iputils), `nmap`, `sudo` (nur für Schritt 3, falls nicht schon root). Diese sind in den Paketierungs-Metadaten (`Cargo.toml`, siehe §3.2) als Abhängigkeiten hinterlegt. Das Projekt basiert auf einem generischen **Rust-Projekt-Template** für Linux-Anwendungen/CLI-Tools mit Fokus auf: -- Automatisierte Multi-Architektur-Kompilierung (`x86_64`, `aarch64`, `i686`). +- Automatisierte Multi-Architektur-Kompilierung (`x86_64`, `aarch64`; `i686` derzeit ausgesetzt, siehe §5.2.1). - Native Paketierung für Debian (`.deb`), Fedora/RHEL (`.rpm`) und Arch Linux (`.pkg.tar.zst`). - Vollständig automatisierte CI/CD-Pipelines via Gitea Actions (kompatibel mit Forgejo / GitHub Actions). - Automatisierte Sicherheits-Scans (Schwachstellen, Secrets) und Dependency-Updates. @@ -27,7 +27,7 @@ Das Projekt basiert auf einem generischen **Rust-Projekt-Template** für Linux-A ### Standards & Tech-Stack - **Sprache**: Rust (Edition 2024), Python 3 (für Hilfsskripte in `scripts/`). - **Rust Toolchain**: Stable. -- **Zielplattform**: Linux (GLIBC-basiert, Cross-Kompilierung für `x86_64-unknown-linux-gnu`, `aarch64-unknown-linux-gnu`, `i686-unknown-linux-gnu`). +- **Zielplattform**: Linux (GLIBC-basiert, Cross-Kompilierung für `x86_64-unknown-linux-gnu`, `aarch64-unknown-linux-gnu`; `i686-unknown-linux-gnu` derzeit ausgesetzt, siehe §5.2.1). - **Sicherheits-Tooling**: Trivy, OSV-Scanner, TruffleHog (Secret-Scanning), Renovate (Dependency-Updates), Qodana (statische Codeanalyse). - **Lizenz**: GPL-3.0-or-later (sofern nicht im abgeleiteten Projekt anders definiert). @@ -163,6 +163,12 @@ prüfen, ob die Revert-Bedingung inzwischen erfüllt ist. | :--- | :--- | :--- | :--- | :--- | | [RUSTSEC-2026-0253](https://rustsec.org/advisories/RUSTSEC-2026-0253.html) (Use-after-free in `LruCache::pop()`) | `lru` < 0.18.2, transitiv über `turso -> turso_core -> tantivy` | `fts`-Default-Feature von `turso` deaktiviert (`Cargo.toml`) — mac2ip nutzt keine Volltextsuche, dadurch entfällt `tantivy`/`lru` komplett aus dem Dependency-Baum | Kommentar direkt über der `turso`-Zeile in `Cargo.toml` | Sobald `cargo update -p lru --precise 0.18.2` erfolgreich ist (d. h. eine stabile `turso`-Version eine `tantivy`-Version mit `lru >= 0.18.2` zulässt): `turso`-Zeile zurück auf `turso = "0.7"` (oder aktueller) ändern, `cargo update -p turso`, und `cargo tree -i lru` zur Kontrolle. | +### 5.2.2 Bekannte Build-Einschränkungen (temporär, mit Revert-Bedingung) + +| Einschränkung | Ursache | Workaround | Wo dokumentiert | Revert-Bedingung | +| :--- | :--- | :--- | :--- | :--- | +| Kein `i686-unknown-linux-gnu`-Build/-Paket mehr | `turso_sdk_kit` (Abhängigkeit von `turso`) fordert von `turso_core` unconditional das Feature `io_uring` an (nicht abschaltbar wie `fts`). Die `io-uring`-Crate (aktuell 0.7.15, neueste Version) liefert vorgefertigte FFI-Bindings nur für `x86_64`, `aarch64`, `riscv64`, `powerpc64`, `loongarch64` - **nicht** für `i686`. `--cfg=io_uring_skip_arch_check` würde auf i686 stillschweigend die x86_64-Bindings verwenden (falsche Struct-Layouts/Pointer-Breite -> potenzielle Speicherkorruption bei io_uring-Syscalls) und wurde deshalb bewusst NICHT verwendet. | `i686-unknown-linux-gnu` komplett aus den Build-Targets entfernt: `.cargo/config.toml` (Linker-Eintrag), `.gitea/workflows/main.yaml` + `testing.yaml` (Toolchain-Install, `rustup target add`, `cargo build`/`cargo deb`/`cargo generate-rpm`/`package-arch.py`-Aufrufe), `README.md`/`AGENTS.md` (Zielarchitektur-Angaben) | Diese Tabelle; `git log` nach "i686" für die genauen Commits | Sobald eine neue `io-uring`-Version vorgefertigte `i686`-Bindings mitbringt (`cargo info io-uring` prüfen) ODER eine neue `turso`-Version `io_uring` optional/abschaltbar macht: i686 wieder in allen oben genannten Dateien ergänzen und mit einem echten i686-Cross-Build verifizieren, bevor gemergt wird. | + ### 5.3 Renovate-Konfiguration (`renovate.json`) - Basis-Branch für PRs: `dev`. - Gruppiert Updates nach `Gitea Actions`, `Cargo Dependencies` und `Docker-Images`. diff --git a/README.md b/README.md index d3e9f0a..1c263f4 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Dazu wird ein 3-stufiger Algorithmus verwendet: - **Maschinenlesbare Ausgabe** über `--json` (unattended-Modus) — unterdrückt dabei alle sonstigen Log-Ausgaben. - **Vollständig über die Kommandozeile konfigurierbar**, mit Overlay-Kette CLI > Umgebungsvariable > Konfigurationsdatei > Standardwert. - **Funktioniert mit und ohne `sudo`** — Root-Rechte werden nur für den nmap-Schritt benötigt. -- **Rust Edition 2024**, Multi-Architektur-Kompilierung (`x86_64`, `aarch64`, `i686`), native Linux-Paketierung (`.deb`, `.rpm`, `.pkg.tar.zst`) und automatisierte CI/CD-Pipelines via Gitea Actions. +- **Rust Edition 2024**, Multi-Architektur-Kompilierung (`x86_64`, `aarch64`), native Linux-Paketierung (`.deb`, `.rpm`, `.pkg.tar.zst`) und automatisierte CI/CD-Pipelines via Gitea Actions. --- @@ -175,8 +175,8 @@ Im `--json`-Modus wird für Schritt 3 ausschließlich `sudo -n` (nicht-interakti - **Python 3** (für Hilfsskripte in `scripts/`) - Zur Laufzeit: `ip`, `ping`, `nmap`, `sudo` (siehe "Voraussetzungen" oben) - Für Cross-Compilation (optional): - - `rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu i686-unknown-linux-gnu` - - Cross-Toolchains: `gcc-aarch64-linux-gnu`, `gcc-i686-linux-gnu` + - `rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu` + - Cross-Toolchains: `gcc-aarch64-linux-gnu` - Für lokales Paketieren (optional): - `cargo install cargo-deb cargo-generate-rpm`