Fix: Arch-Install-Skriptlet als .INSTALL statt <name>.install einbetten

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
<name>.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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SnWfGGqHJGh2AhZ6uhotaD
This commit is contained in:
2026-09-13 19:21:34 +02:00
co-authored by Claude Sonnet 5
parent 7a033fa19d
commit 4ebbbc93f7
2 changed files with 6 additions and 8 deletions
+1 -1
View File
@@ -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 `<name>.install` (mit `install = <name>.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),
+5 -7
View File
@@ -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}")