Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe
allgemeine Kategorie => Installation & Einrichtung => Thema von: Andreas am 03. August 2019, 12:30:51

Titel: Ein Paket in einer chroot - Umgebung bauen
Beitrag von: Andreas am 03. August 2019, 12:30:51

"Möge die Macht mit Dir sein" - trifft für Arch Linux zu 100% zu...

Ich habe aktuell ein Paket aus den AURs, das auf dem "normalen Wege" nicht bauen will - es findet irgendwelche Deklarationen nicht und das ist natürlich ein fataler Fehler der zum Abbruch führt.

Das ist im Moment das Paket "qt4" - einige, die eine Installation von mir haben haben dieses Paket. Das Update hakt bei diesem Paket.

Eine Recherche im Internet ergab, dass es manchmal hilft, das Paket in einer "chroot-Umgebung" zu bauen. OK: Versuch macht kluch ::)

Was habe ich getan? (alles als normaler User!!)

1) Als erstes die devtools installieren mit dem Befehl: sudo pacman -S devtools
2) Einen geeigneten Ordner erstellen mit: mkdir ~/chroot
3) Diesen Ordner in eine Environment-Variable packen mit: CHROOT=~/chroot/
4) Das chroot vorbereiten mit: mkarchroot $CHROOT/root base-devel
5) Dafür sorgen dass auch im chroot alles up2date ist mit: arch-nspawn $CHROOT/root pacman -Syu
6) In das Verzeichnis des Paketes wechseln da nicht baut (in diesem Fall qt4) mit: cd ~/.cache/yay/qt4/
7) Das Paket nun in der chroot-Umgebung bauen mit: makechrootpkg -c -r $CHROOT
...und siehe da: nach etlichen Minuten ein Abschluss OHNE FEHLERMELDUNG!!
8) ...Also nur noch das fertige Paket installieren mit: sudo pacman -U qt4-4.8.7-31-x86_64.pkg.tar.xz

EDIT:
Beim letzten Befehl ist es sinnvoll nur die ersten Buchstaben des Paketnamens einzugeben und dann mit <TAB> ergänzen zu lassen - niemand kennt die volle Bezeichnung incl. aller Nummern und Bide-/Unterstriche...

Das wars - "ich habe fertig" ::)

Braucht man das nochmal wieder, müssen nicht alle Schritte wiederholt werden, weil die Ordner ja jetzt schon da sind. Es müssen dann nur noch:
CHROOT=~/chroot/
arch-nspawn $CHROOT/root pacman -Syu
cd ~/.cache/yay/paketname/
makechrootpkg -c -r $CHROOT
sudo pacman -U paketname.pkg.tar.xz


EDIT:
Heute (4.09.2019) kam das Problem beim Bau des "gcc6" bei mir. Der gcc6 besteht aus mehreren verschiedenen Einzelpaketen, die alle gemeinsam installiert werden müssen - sonst schlägt die Installation wegen fehlender Abhängigkeiten fehl. Man kann den gcc6 nach den Anweisungen von oben bauen - beim Installieren muss man alle gcc6-* - Pakete aus dem Ordner IN EINE ZEILE zum Installieren schreiben. Also z.B. sudo pacman -U gcc6-blablabla.pkg.tar.xz gg6-blublu.pkg.tar.xz gcc6-bufbuf.pkg.tar.xz

EDIT:
(15.06.2022) Das Bauen in einer chroot-Umgebung geht mit Hilfe eines kleinen Helper-Programmes noch einfacher. Installier paru. Dann könnt ihr jedes AUR-Paket mit dieser Syntax in einer chroot-Umgebung bauen und installieren:
Code:
paru --chroot -S <Name_des_Paketes>
Die oben beschriebenen Schritte sind damit allesamt überflüssig geworden.

LG
Andreas

Titel: Re:Ein Paket in einer chroot - Umgebung bauen
Beitrag von: Sebastian am 11. August 2022, 19:51:42

Vielen dank Andreas, die Tools mkarchroot, arch-nspawn und makechrootpkg kannte ich noch nicht.

Ich war erst am Rätseln warum du in deinem /chroot/ Ordner einen weiteren Ordner /chroot/root erstellt hast, und nicht einfach im /choot/ Verzeichnis die Sachen baust. Nach kurzer Recherche über die drei Tools, was die so können habe ich schnell die Antwort (https://man.archlinux.org/man/makechrootpkg.1) dazu gefunden.
Zitat:
The chroot dir consists of the following directories: <chrootdir>/{root, copy} but only "root" is required by default. The working copy will be created as needed

The chroot "root" directory must be created via the following command: mkarchroot <chrootdir>/root base-devel


An den Spruch ist also wirklich was dran: "Read the Manual" ;D


Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.