From 4ebbbc93f7943fa754990a6c1637ad3c771e3926 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Sun, 13 Sep 2026 19:21:34 +0200 Subject: [PATCH] Fix: Arch-Install-Skriptlet als .INSTALL statt .install einbetten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pacman/libalpm erwartet im Paket-Archiv ein Member mit dem literalen Namen .INSTALL, nicht einen per install=-Feld in .PKGINFO referenzierten Dateinamen. package-arch.py bettete das Skriptlet bisher unter .install ein und trug zusätzlich eine install=-Zeile in .PKGINFO ein - beides entspricht nicht dem tatsächlich von pacman genutzten Format. AGENTS.md entsprechend aktualisiert. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SnWfGGqHJGh2AhZ6uhotaD --- AGENTS.md | 2 +- scripts/package-arch.py | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 686989a..cfe1368 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -96,7 +96,7 @@ Alle drei Blöcke listen bei mac2ip zusätzlich `sudo`, `iproute2`/`iproute`, `i ### 3.3 Skripte in `scripts/` - **Generizität**: Die Skripte dürfen keine hardcodierten Anwendungsnamen, spezifischen Abhängigkeiten oder projektspezifischen URLs enthalten. Alle Werte müssen dynamisch aus `Cargo.toml` (via `cargo metadata` oder Dateiparsing) oder Umgebungsvariablen (`BUILD_NUMBER`, `GITEA_URL`, `REPO`, `TOKEN`) ermittelt werden. -- **`package-arch.py`-Install-Skriptlet**: Liest optional `[package.metadata.arch].install_script` aus `cargo metadata` und bettet die referenzierte Datei pacman-konform als `.install` (mit `install = .install` in `.PKGINFO`) in das erzeugte `.pkg.tar.zst` ein — weiterhin vollständig metadatengetrieben, kein hartkodierter Anwendungsname im Skript selbst. +- **`package-arch.py`-Install-Skriptlet**: Liest optional `[package.metadata.arch].install_script` aus `cargo metadata` und bettet die referenzierte Datei pacman-konform als `.INSTALL` in das erzeugte `.pkg.tar.zst` ein — weiterhin vollständig metadatengetrieben, kein hartkodierter Anwendungsname im Skript selbst. - **Python-Kompatibilität**: Verwende Standard-Python 3 ohne externe PyPI-Abhängigkeiten (nur Standardbibliothek: `json`, `subprocess`, `urllib`, `argparse`, `os`, `re`, `tempfile`, `tarfile` etc.). - **`get-build-number.py`**: Ermittelt die nächste Build-/Revisions-Nummer nicht mehr rein lokal, sondern dynamisch über: 1. Gitea Releases API (Tag-/Asset-Namen), diff --git a/scripts/package-arch.py b/scripts/package-arch.py index 2dc3387..13cf639 100755 --- a/scripts/package-arch.py +++ b/scripts/package-arch.py @@ -103,11 +103,11 @@ def build_package(target_triple=None, target_arch=None, pkgrel=None): if os.path.exists("README.md"): subprocess.run(["install", "-m", "644", "README.md", f"{doc_dir}/README.md"], check=True) - install_scriptlet_name = None + has_install_scriptlet = False if install_rel_path and os.path.exists(install_rel_path): - install_scriptlet_name = f"{name}.install" + has_install_scriptlet = True subprocess.run( - ["install", "-m", "644", install_rel_path, os.path.join(build_dir, install_scriptlet_name)], + ["install", "-m", "644", install_rel_path, os.path.join(build_dir, ".INSTALL")], check=True, ) @@ -126,8 +126,6 @@ def build_package(target_triple=None, target_arch=None, pkgrel=None): f"arch = {arch}", f"license = {license_name}", ] - if install_scriptlet_name: - pkginfo_lines.append(f"install = {install_scriptlet_name}") for dep in depends: pkginfo_lines.append(f"depend = {dep}") for optdep in optdepends: @@ -140,8 +138,8 @@ def build_package(target_triple=None, target_arch=None, pkgrel=None): os.makedirs("target/arch", exist_ok=True) output_file = os.path.abspath(f"target/arch/{name}-{version}-{pkgrel}-{arch}.pkg.tar.zst") tar_members = [".PKGINFO"] - if install_scriptlet_name: - tar_members.append(install_scriptlet_name) + if has_install_scriptlet: + tar_members.append(".INSTALL") tar_members.append("usr") subprocess.run(["tar", "--zstd", "-cf", output_file, *tar_members], cwd=build_dir, check=True) print(f"Arch-Paket erfolgreich erstellt: {output_file}")