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:
@@ -96,7 +96,7 @@ Alle drei Blöcke listen bei mac2ip zusätzlich `sudo`, `iproute2`/`iproute`, `i
|
|||||||
|
|
||||||
### 3.3 Skripte in `scripts/`
|
### 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.
|
- **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.).
|
- **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:
|
- **`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),
|
1. Gitea Releases API (Tag-/Asset-Namen),
|
||||||
|
|||||||
@@ -103,11 +103,11 @@ def build_package(target_triple=None, target_arch=None, pkgrel=None):
|
|||||||
if os.path.exists("README.md"):
|
if os.path.exists("README.md"):
|
||||||
subprocess.run(["install", "-m", "644", "README.md", f"{doc_dir}/README.md"], check=True)
|
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):
|
if install_rel_path and os.path.exists(install_rel_path):
|
||||||
install_scriptlet_name = f"{name}.install"
|
has_install_scriptlet = True
|
||||||
subprocess.run(
|
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,
|
check=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -126,8 +126,6 @@ def build_package(target_triple=None, target_arch=None, pkgrel=None):
|
|||||||
f"arch = {arch}",
|
f"arch = {arch}",
|
||||||
f"license = {license_name}",
|
f"license = {license_name}",
|
||||||
]
|
]
|
||||||
if install_scriptlet_name:
|
|
||||||
pkginfo_lines.append(f"install = {install_scriptlet_name}")
|
|
||||||
for dep in depends:
|
for dep in depends:
|
||||||
pkginfo_lines.append(f"depend = {dep}")
|
pkginfo_lines.append(f"depend = {dep}")
|
||||||
for optdep in optdepends:
|
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)
|
os.makedirs("target/arch", exist_ok=True)
|
||||||
output_file = os.path.abspath(f"target/arch/{name}-{version}-{pkgrel}-{arch}.pkg.tar.zst")
|
output_file = os.path.abspath(f"target/arch/{name}-{version}-{pkgrel}-{arch}.pkg.tar.zst")
|
||||||
tar_members = [".PKGINFO"]
|
tar_members = [".PKGINFO"]
|
||||||
if install_scriptlet_name:
|
if has_install_scriptlet:
|
||||||
tar_members.append(install_scriptlet_name)
|
tar_members.append(".INSTALL")
|
||||||
tar_members.append("usr")
|
tar_members.append("usr")
|
||||||
subprocess.run(["tar", "--zstd", "-cf", output_file, *tar_members], cwd=build_dir, check=True)
|
subprocess.run(["tar", "--zstd", "-cf", output_file, *tar_members], cwd=build_dir, check=True)
|
||||||
print(f"Arch-Paket erfolgreich erstellt: {output_file}")
|
print(f"Arch-Paket erfolgreich erstellt: {output_file}")
|
||||||
|
|||||||
Reference in New Issue
Block a user