Fix: i686-Build-Target entfernen (io-uring unterstützt keine 32-Bit-x86-Bindings)
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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SnWfGGqHJGh2AhZ6uhotaD
This commit is contained in:
@@ -10,6 +10,3 @@ git-fetch-with-cli = true
|
|||||||
|
|
||||||
[target.aarch64-unknown-linux-gnu]
|
[target.aarch64-unknown-linux-gnu]
|
||||||
linker = "aarch64-linux-gnu-gcc"
|
linker = "aarch64-linux-gnu-gcc"
|
||||||
|
|
||||||
[target.i686-unknown-linux-gnu]
|
|
||||||
linker = "i686-linux-gnu-gcc"
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
- name: Install Cross-Compilation Toolchains (apt)
|
- name: Install Cross-Compilation Toolchains (apt)
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
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
|
- name: Ermittle Rust-Version für Rustup-Target-Cache-Key
|
||||||
run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV"
|
run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV"
|
||||||
@@ -75,12 +75,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: |
|
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/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 }}
|
key: rustup-targets-${{ runner.os }}-${{ env.RUST_VERSION }}
|
||||||
|
|
||||||
- name: Add Rust Cross-Compilation Targets
|
- name: Add Rust Cross-Compilation Targets
|
||||||
if: steps.cache-rustup-targets.outputs.cache-hit != 'true'
|
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
|
- name: PATH um Cargo-bin-Verzeichnis ergänzen
|
||||||
run: |
|
run: |
|
||||||
@@ -111,7 +110,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cargo build --release --target x86_64-unknown-linux-gnu
|
cargo build --release --target x86_64-unknown-linux-gnu
|
||||||
cargo build --release --target aarch64-unknown-linux-gnu
|
cargo build --release --target aarch64-unknown-linux-gnu
|
||||||
cargo build --release --target i686-unknown-linux-gnu
|
|
||||||
|
|
||||||
- name: Determine Build Number
|
- name: Determine Build Number
|
||||||
id: build_num
|
id: build_num
|
||||||
@@ -130,20 +128,17 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cargo deb --target x86_64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build
|
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 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)
|
- name: Build Fedora / RPM Packages (.rpm)
|
||||||
run: |
|
run: |
|
||||||
mkdir -p target/generate-rpm
|
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 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 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)
|
- name: Build Arch Linux Packages (.pkg.tar.zst)
|
||||||
run: |
|
run: |
|
||||||
python3 scripts/package-arch.py --target x86_64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}"
|
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 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
|
- name: Publish Packages to Gitea Package Registry
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
- name: Install Cross-Compilation Toolchains (apt)
|
- name: Install Cross-Compilation Toolchains (apt)
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
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
|
- name: Ermittle Rust-Version für Rustup-Target-Cache-Key
|
||||||
run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV"
|
run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV"
|
||||||
@@ -75,12 +75,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: |
|
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/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 }}
|
key: rustup-targets-${{ runner.os }}-${{ env.RUST_VERSION }}
|
||||||
|
|
||||||
- name: Add Rust Cross-Compilation Targets
|
- name: Add Rust Cross-Compilation Targets
|
||||||
if: steps.cache-rustup-targets.outputs.cache-hit != 'true'
|
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
|
- name: PATH um Cargo-bin-Verzeichnis ergänzen
|
||||||
run: |
|
run: |
|
||||||
@@ -111,7 +110,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cargo build --release --target x86_64-unknown-linux-gnu
|
cargo build --release --target x86_64-unknown-linux-gnu
|
||||||
cargo build --release --target aarch64-unknown-linux-gnu
|
cargo build --release --target aarch64-unknown-linux-gnu
|
||||||
cargo build --release --target i686-unknown-linux-gnu
|
|
||||||
|
|
||||||
- name: Determine Build Number
|
- name: Determine Build Number
|
||||||
id: build_num
|
id: build_num
|
||||||
@@ -130,20 +128,17 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cargo deb --target x86_64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build
|
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 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)
|
- name: Build Fedora / RPM Packages (.rpm)
|
||||||
run: |
|
run: |
|
||||||
mkdir -p target/generate-rpm
|
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 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 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)
|
- name: Build Arch Linux Packages (.pkg.tar.zst)
|
||||||
run: |
|
run: |
|
||||||
python3 scripts/package-arch.py --target x86_64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}"
|
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 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
|
- name: Publish Packages to Gitea Package Registry
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -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.
|
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:
|
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`).
|
- 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).
|
- Vollständig automatisierte CI/CD-Pipelines via Gitea Actions (kompatibel mit Forgejo / GitHub Actions).
|
||||||
- Automatisierte Sicherheits-Scans (Schwachstellen, Secrets) und Dependency-Updates.
|
- 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
|
### Standards & Tech-Stack
|
||||||
- **Sprache**: Rust (Edition 2024), Python 3 (für Hilfsskripte in `scripts/`).
|
- **Sprache**: Rust (Edition 2024), Python 3 (für Hilfsskripte in `scripts/`).
|
||||||
- **Rust Toolchain**: Stable.
|
- **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).
|
- **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).
|
- **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. |
|
| [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`)
|
### 5.3 Renovate-Konfiguration (`renovate.json`)
|
||||||
- Basis-Branch für PRs: `dev`.
|
- Basis-Branch für PRs: `dev`.
|
||||||
- Gruppiert Updates nach `Gitea Actions`, `Cargo Dependencies` und `Docker-Images`.
|
- Gruppiert Updates nach `Gitea Actions`, `Cargo Dependencies` und `Docker-Images`.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Dazu wird ein 3-stufiger Algorithmus verwendet:
|
|||||||
- **Maschinenlesbare Ausgabe** über `--json` (unattended-Modus) — unterdrückt dabei alle sonstigen Log-Ausgaben.
|
- **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.
|
- **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.
|
- **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/`)
|
- **Python 3** (für Hilfsskripte in `scripts/`)
|
||||||
- Zur Laufzeit: `ip`, `ping`, `nmap`, `sudo` (siehe "Voraussetzungen" oben)
|
- Zur Laufzeit: `ip`, `ping`, `nmap`, `sudo` (siehe "Voraussetzungen" oben)
|
||||||
- Für Cross-Compilation (optional):
|
- Für Cross-Compilation (optional):
|
||||||
- `rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu i686-unknown-linux-gnu`
|
- `rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu`
|
||||||
- Cross-Toolchains: `gcc-aarch64-linux-gnu`, `gcc-i686-linux-gnu`
|
- Cross-Toolchains: `gcc-aarch64-linux-gnu`
|
||||||
- Für lokales Paketieren (optional):
|
- Für lokales Paketieren (optional):
|
||||||
- `cargo install cargo-deb cargo-generate-rpm`
|
- `cargo install cargo-deb cargo-generate-rpm`
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user