На другой день я попытался установить opencv-git
из AUR с makepkg
на Arch Linux. Конечно, он извлекает из репозитория git, как видно из названия. Это тянет 1Gb. Я читаю о создании мелкого клона с git
. Когда я смотрю на PKGBUILD
файл, используя grep git PKGBUILD
, я вижу:
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"
Есть ли способ изменить рецепт или makepkg
команду, чтобы вытянуть только мелкий клон (последняя версия исходного кода - то, что я хочу), а не полный репозиторий для экономии места и пропускной способности? Чтение man 5 PKGBUILD
не дает понимания, которое я ищу. Также быстро просмотрел makepkg
и pacman
справочные страницы - не могу найти, как это сделать.
arch-linux
git
HalosGhost
источник
источник
git+http://github.com/Itseez/opencv.git
в рецепте AUR на локальный путь. Вы пробовали это? Если эта система сборки вынуждает вас клонировать репозитории, даже если она у вас есть в наличии локально, то это чертовски круто.Ответы:
Это можно сделать с помощью пользовательского dlagent . Я не очень разбираюсь в упаковке Arch или в том, как работают дагенты, поэтому у меня есть только хакерский ответ, но он выполняет свою работу.
Идея состоит в том, чтобы изменить PKGBUILD для использования пользовательского агента загрузки. Я изменил источник
в
а затем определили новый агент под названием,
mygit
который делает мелкий клон. Я сделал это, добавив вDLAGENTS
массив/etc/makepkg.conf
следующий dlagent:Я думаю, вы могли бы определить этот агент загрузки где-то еще, но я не знаю, как. Также обратите внимание, что клонируемое хранилище жестко запрограммировано в команде. Опять же, этого, вероятно, можно избежать. Наконец, местоположение загрузки не то, что ожидает PKGBUILD. Чтобы обойти это, я просто перемещаю хранилище после его загрузки. Я делаю это, добавляя
в начале
pkgver
функции.Я думаю, что более чистым решением было бы выяснить, что
git+http
делает драгент, и временно его переработать. Это должно избежать всех аспектов взлома решения.источник
Лично я изменил скрипт makepkg, и он работает как шарм:
Присоединение "--mirror --single-branch --depth 1" к команде "git clone":
Вот разный вид:
источник
branch
,tag
, иcommit
т.д.)./usr/share/makepkg/source/git.sh
вместо этого нужно установитьСогласно https://bugs.archlinux.org/task/23065 (кредит jasonwryan), добавление мелкой функции клонирования в AUR PKGBUILD было элементом списка желаний, который был закрыт в субботу, 5 марта 2011 года, с комментарием:
Это говорит о том, что этого не произойдет, если кто-то не представит патч.
Как я предложил автору в комментариях, то, что он пытается сделать, почти наверняка можно сделать, разбив процесс на два этапа:
источник
makepkg
(pkgver жалуется немного, но все же) и работает тоже!Если вы делаете мелкое зеркало репозитория в том же каталоге, что и
PKGBUILD
, вы можете использовать егоmakepkg --holdver
для предотвращенияmakepkg
обновления остальной части репозитория. Это устраняет необходимость в изменении размераPKGBUILD
,makepkg.conf
илиmakepkg
сам по себе; тем не менее, клонирование / обновление хранилища должно быть сделано вручную.Как пример с
cling-git
, который обычно клонировал бы всеllvm
иclang
:Из справочных страниц makepkg:
Обратите внимание, что makepkg по-прежнему будет клонировать репозитории, которых еще нет, что означает, что я мог бы опустить ручное клонирование
cling
репозитория в приведенном выше примере, поскольку он не так велик.источник
Если вы не хотите изменять скрипты makepkg.
как описано здесь , точка
DEVELSRCDIR
в/etc/yaourtrc
или~/.yaourtrc
файл в какой - то постоянной папке. Тогда все проверки хранилища (git / svn / ...) произойдут в этой папке. После того, как репозиторий клонирован, каждый раз будет выполняться только быстрая выборка с новейшими ревизиями вместо полного клонирования.источник