L'autre jour, j'ai essayé d'installer à opencv-git
partir d' AUR avec makepkg
sur Arch Linux. Bien sûr, il tire du référentiel git comme son nom l'indique. Cela tire 1 Go. Je lis comment faire un clone peu profond avec git
. Quand je regarde le PKGBUILD
fichier, en utilisant grep git PKGBUILD
, je vois:
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"
Existe-t-il un moyen de modifier la recette ou la makepkg
commande pour extraire uniquement un clone peu profond (la dernière version de la source est ce que je veux) et pas le référentiel complet pour économiser de l'espace et de la bande passante? La lecture man 5 PKGBUILD
ne fournit pas les informations que je recherche. J'ai également consulté rapidement les pages de manuelmakepkg
et - pacman
je n'arrive pas à trouver comment le faire.
arch-linux
git
HalosGhost
la source
la source
git+http://github.com/Itseez/opencv.git
dans la recette AUR par un chemin d'accès local. As-tu essayé ça? Si ce système de build vous oblige à cloner un référentiel même si vous l'avez disponible localement, alors c'est assez fou.Réponses:
Cela peut être fait en utilisant un dlagent personnalisé . Je ne comprends pas vraiment l'emballage Arch ni le fonctionnement des dlagents, donc je n'ai qu'une réponse de piratage, mais cela fait le travail.
L'idée est de modifier le PKGBUILD pour utiliser un agent de téléchargement personnalisé. J'ai modifié la source
dans
puis défini un nouveau dlagent appelé
mygit
qui fait un clone peu profond. J'ai fait cela en ajoutant auDLAGENTS
tableau dans/etc/makepkg.conf
le dlagent suivant:Je suppose que vous pourriez probablement définir cet agent de téléchargement ailleurs, mais je ne sais pas comment. Notez également que le référentiel en cours de clonage est codé en dur dans la commande. Encore une fois, cela peut probablement être évité. Enfin, l'emplacement de téléchargement n'est pas ce que le PKGBUILD attend. Pour contourner ce problème, je déplace simplement le référentiel après l'avoir téléchargé. Je le fais en ajoutant
au début de la
pkgver
fonction.Je pense que la solution la plus propre serait de comprendre ce que fait le
git+http
dlagent et de le redéfinir temporairement. Cela devrait éviter tous les aspects de piratage de la solution.la source
Personnellement, j'ai modifié le script makepkg et cela fonctionne comme un charme:
Ajout de "--mirror --single-branch --depth 1" à la commande "git clone":
Voici une vue diff:
la source
branch
,tag
,commit
etc.)./usr/share/makepkg/source/git.sh
devrait être corrigé à la placeSelon https://bugs.archlinux.org/task/23065 (crédit à jasonwryan), l'ajout d'une fonctionnalité de clonage superficiel à AUR PKGBUILD était un élément de liste de souhaits qui a été fermé le samedi 05 mars 2011 avec le commentaire:
Cela suggère que cela ne se produira que si quelqu'un soumet un correctif.
Comme je l'ai suggéré à l'affiche dans ses commentaires, ce qu'il essaie de faire peut presque certainement être accompli en divisant le processus en deux étapes:
la source
makepkg
(pkgver se plaint légèrement mais quand même) et fonctionne aussi!Si vous créez un miroir superficiel du référentiel dans le même répertoire que le
PKGBUILD
, vous pouvez utilisermakepkg --holdver
pour empêchermakepkg
de mettre à jour le reste du référentiel. Cela supprime la nécessité de modifier lePKGBUILD
,makepkg.conf
oumakepkg
lui - même; cependant, le clonage / mise à jour du référentiel doit être effectué manuellement.Par exemple avec
cling-git
, qui clonerait normalement l'intégralité dellvm
etclang
:Depuis les pages de manuel makepkg:
Notez que makepkg clonera toujours les dépôts qui ne sont pas déjà présents, ce qui signifie que j'aurais pu omettre le clonage manuel du
cling
référentiel dans l'exemple ci-dessus car il n'est pas si grand.la source
Si vous ne souhaitez pas modifier les scripts makepkg.
comme indiqué ici , le point
DEVELSRCDIR
dans/etc/yaourtrc
ou~/.yaourtrc
fichier à un certain dossier persistant. Ensuite, toutes les extractions du référentiel (git / svn / ...) auront lieu dans ce dossier. Une fois le référentiel cloné, seule une extraction rapide avec les dernières révisions sera effectuée au lieu du clone complet à chaque fois.la source