Neulich habe ich versucht, opencv-git
von der AUR mit makepkg
auf Arch Linux zu installieren . Natürlich wird es aus dem Git- Repository gezogen, wie der Name schon sagt. Dies zieht 1 GB. Ich lese über eine Herstellung flache Klon mit git
. Wenn ich die PKGBUILD
Datei mit anschaue grep git PKGBUILD
, sehe ich:
pkgname="opencv-git"
makedepends=('git' 'cmake' 'python2-numpy' 'mesa' 'eigen2')
provides=("${pkgname%-git}")
conflicts=("${pkgname%-git}")
source=("${pkgname%-git}::git+http://github.com/Itseez/opencv.git"
cd "${srcdir}/${pkgname%-git}"
git describe --long | sed -r 's/([^-]*-g)/r\1/;s/-/./g'
cd "${srcdir}/${pkgname%-git}"
cd "${srcdir}/${pkgname%-git}"
cd "${srcdir}/${pkgname%-git}"
install -Dm644 "LICENSE" "${pkgdir}/usr/share/licenses/${pkgname%-git}/LICENSE"
Gibt es eine Möglichkeit, das Rezept oder den makepkg
Befehl so zu ändern , dass nur ein flacher Klon abgerufen wird (die neueste Version der Quelle ist das, was ich möchte), und nicht das vollständige Repository, um Speicherplatz und Bandbreite zu sparen? Das Lesen man 5 PKGBUILD
liefert nicht die Einsicht, nach der ich suche. Schaute auch schnell durch die Hilfeseitenmakepkg
und - kann anscheinend nicht herausfinden, wie das geht.pacman
arch-linux
git
HalosGhost
quelle
quelle
git+http://github.com/Itseez/opencv.git
im AUR-Rezept durch einen lokalen Pfadnamen ersetzen . Hast du das versucht? Wenn dieses Build-System Sie zwingt, ein Repo zu klonen, auch wenn es lokal verfügbar ist, dann ist es verdammt verrückt.Antworten:
Dies kann mit einem benutzerdefinierten Dlagent erfolgen . Ich verstehe die Arch-Verpackung oder die Funktionsweise der Dlagents nicht wirklich, daher habe ich nur eine Hack-Antwort, aber sie erledigt den Job.
Die Idee ist, PKGBUILD so zu ändern, dass ein benutzerdefinierter Download-Agent verwendet wird. Ich habe die Quelle geändert
in
und definierte dann einen neuen Dlagent,
mygit
der einen flachen Klon ausführt . Ich tat dies, indem ich demDLAGENTS
Array im/etc/makepkg.conf
folgenden Dlagent hinzufügte:Vermutlich könnten Sie diesen Download-Agenten an einer anderen Stelle definieren, aber ich weiß nicht, wie. Beachten Sie auch, dass das Repository, das geklont wird, im Befehl fest codiert ist. Auch dies kann wahrscheinlich vermieden werden. Schließlich entspricht der Download-Speicherort nicht den Erwartungen von PKGBUILD. Um dies zu umgehen, verschiebe ich einfach das Repository, nachdem ich es heruntergeladen habe. Ich mache das durch Hinzufügen
am Anfang der
pkgver
Funktion.Ich denke, die sauberere Lösung wäre, herauszufinden, was der
git+http
Dlagent tut, und dies vorübergehend neu zu definieren. Dies sollte alle Hack-Aspekte der Lösung vermeiden.quelle
Persönlich habe ich das makepkg-Skript modifiziert und es funktioniert wie ein Zauber:
Fügen Sie "--mirror --single-branch --depth 1" an den Befehl "git clone" an:
Hier ist eine Diff-Ansicht:
quelle
branch
,tag
,commit
etc.)./usr/share/makepkg/source/git.sh
sollte stattdessen einLaut https://bugs.archlinux.org/task/23065 (Dank an jasonwryan) war das Hinzufügen von Funktionen für das flache Klonen zu AUR PKGBUILD ein Wunschzettel, der am Samstag, dem 5. März 2011, mit dem folgenden Kommentar geschlossen wurde:
Dies deutet darauf hin, dass dies nur dann geschehen wird, wenn jemand einen Patch einreicht.
Wie ich in Kommentaren zum Poster angedeutet habe, kann das, was er versucht, mit ziemlicher Sicherheit erreicht werden, indem der Prozess in zwei Schritte unterteilt wird:
quelle
makepkg
erstellen, der am Ende 1 GB + war, aber der wurde von (pkgver beschwert sich leicht, aber immer noch) aufgenommen und funktioniert auch!Wenn Sie eine flache Spiegelung des Repositorys in demselben Verzeichnis wie das
PKGBUILD
erstellen, können Siemakepkg --holdver
verhindern, dassmakepkg
der Rest des Repositorys aktualisiert wird. Dadurch entfällt die Notwendigkeit zu ändern , diePKGBUILD
,makepkg.conf
odermakepkg
selbst; Das Klonen / Aktualisieren des Repositorys muss jedoch manuell erfolgen.Als Beispiel mit
cling-git
, das normalerweise die Gesamtheit vonllvm
und klonen würdeclang
:Aus den makepkg-Manpages:
Beachten Sie, dass makepkg immer noch Repos klont, die noch nicht vorhanden sind. Das bedeutet, dass ich
cling
im obigen Beispiel auf das manuelle Klonen des Repositorys hätte verzichten können, da es nicht so groß ist.quelle
Wenn Sie makepkg-Skripte nicht ändern möchten.
Zeigen Sie , wie hier beschrieben ,
DEVELSRCDIR
in einen dauerhaften Ordner/etc/yaourtrc
oder~/.yaourtrc
legen Sie ihn ab. Dann werden alle Auscheckvorgänge im Repository (git / svn / ...) in diesem Ordner ausgeführt. Sobald das Repository geklont ist, wird anstelle des vollständigen Klons jedes Mal nur der Schnellabruf mit den neuesten Revisionen durchgeführt.quelle