Чтобы собирать пакеты без интернета, пропиши в /etc/makepkg.conf две переменные. SRCDEST задаёт каталог для скачанных исходников, а PKGDEST задаёт каталог для собранных пакетов. После этого исходники не выбрасываются после сборки, повторная сборка того же пакета проходит без скачивания, а готовые пакеты можно ставить через pacman -U даже при полностью отключённой сети.
По умолчанию makepkg работает как одноразовый конвейер: скачал исходники во временный каталог, собрал, пакет оставил в каталоге сборки, а исходники удалил. Пока интернет под рукой, это не мешает. Но есть сценарии, где такой подход ломается.
Сборка в поездке. Ноутбук, поезд, мобильный интернет с лимитом. AUR-пакет тянет сотни мегабайт исходников, и каждая пересборка после правки PKGBUILD качает их заново. С кэшем исходники скачиваются один раз.
Пример из жизни. Крупный AUR-пакет тянет десятки и сотни мегабайт исходников. Без кэша каждая пересборка после изменения флагов в PKGBUILD начинается с нуля: снова скачивание, снова ожидание. С SRCDEST первый запуск тратит трафик, а все следующие обходятся без него.
Воспроизводимость. Разработчик мог удалить или перезаписать tarball на своём сервере. Через полгода ты пересобираешь пакет, а makepkg качает уже другую версию или получает ошибку 404. Локальная копия исходников гарантирует, что сборка повторится ровно из того же кода.
Офлайн-установка. Собранные пакеты копятся в одном месте и ставятся на машины без сети. Это удобно, когда нужно развернуть одинаковый набор софта на нескольких компьютерах. Для этого не нужен ни AUR, ни интернет: пакеты уже собраны, осталось только поставить их через pacman -U.
SRCDEST задаёт каталог, куда makepkg сохраняет скачанные исходники: tarball’ы, zip-архивы, клоны git-репозиториев. Если переменная пустая, исходники живут только внутри каталога сборки и удаляются вместе с ним. Если задана, makepkg кладёт файлы туда и при следующей сборке проверяет: файл уже есть, качать не нужно.
PKGDEST задаёт каталог для готовых пакетов. По умолчанию собранный .pkg.tar.zst остаётся в каталоге сборки и при следующей сборке перезаписывается. С PKGDEST каждый собранный пакет копируется в отдельное место и не теряется.
Общий кэш. Отдельной переменной под общий кэш в makepkg.conf нет. Роль общего хранилища играет каталог кэша pacman, /var/cache/pacman/pkg. Если PKGDEST указывает на него, собранные пакеты попадают в тот же кэш, что и скачанные pacman’ом, и установка идёт через pacman -U без сети.
Имена файлов в SRCDEST совпадают с именами исходных URL из PKGBUILD. Tarball’ы лежат как есть, а git-репозитории makepkg клонирует в отдельные подкаталоги. По именам легко понять, что откуда взялось, и при желании удалить лишнее.
Создай каталоги и пропиши пути. Например, отдельные каталоги под исходники и пакеты:
sudo mkdir -p /var/cache/makepkg/src /var/cache/makepkg/pkg
Открой конфиг:
sudo nano /etc/makepkg.conf
Найди блок с переменными путей и пропиши:
SRCDEST=/var/cache/makepkg/src
PKGDEST=/var/cache/makepkg/pkg
Если хочешь, чтобы собранные пакеты попадали прямо в кэш pacman:
PKGDEST=/var/cache/pacman/pkg
Кэш можно вынести на отдельный диск или раздел. Смонтируй его в /var/cache/makepkg и добавь запись в /etc/fstab, чтобы он подключался при загрузке. Так исходники и пакеты не займут место на системном разделе. Запись в fstab для отдельного раздела выглядит так:
/dev/sdb1 /var/cache/makepkg ext4 defaults 0 2
Подставь свой раздел и файловую систему. После настройки проверь, что переменные подхватились:
grep -E '^(SRCDEST|PKGDEST)' /etc/makepkg.conf
Если строки с путями на месте, кэш активен.
Каталоги кэша должны быть доступны на запись пользователю, который собирает пакеты. Если собираешь не от root, выдай права:
sudo chown -R $USER /var/cache/makepkg
Иначе makepkg упадёт с ошибкой прав доступа при попытке сохранить исходники.
При каждой сборке makepkg проверяет SRCDEST. Если файл исходников уже лежит там, скачивание пропускается, а контрольная сумма сверяется с той, что указана в PKGBUILD. Совпала, сборка идёт дальше.
Для git-исходников логика похожая. makepkg клонирует репозиторий в SRCDEST, а при повторной сборке не клонирует заново, а обновляет существующую копию. Если сеть недоступна, сборка использует то, что уже есть в клоне.
Если контрольная сумма не совпала, makepkg останавливается с ошибкой и не начинает сборку. Это защита от битых и подменённых файлов. В таком случае удали файл из SRCDEST и запусти сборку заново.
Проверить, что кэш работает, просто. Собери пакет, удали каталог сборки и запусти makepkg снова. Второй запуск не покажет строк скачивания, makepkg возьмёт исходники из кэша.
Флаг -c (или --clean) удаляет каталог сборки после завершения, но не трогает SRCDEST и PKGDEST. Это удобно: рабочее место очищается, а кэш остаётся нетронутым. Комбинируй -c с настроенными путями, и каталог сборки никогда не будет засорять диск.
Кэш состоит из обычных файлов, поэтому переносится простым копированием. Скопируй каталоги SRCDEST и PKGDEST на флешку или внешний диск:
rsync -av /var/cache/makepkg/ /mnt/usb/makepkg-cache/
На другой машине пропиши те же пути в /etc/makepkg.conf и скопируй содержимое обратно. Контрольные суммы в PKGBUILD совпадут, makepkg не станет качать то, что уже есть.
Перед переносом убедись, что кэш полный: собери пакет на исходной машине, проверь, что в SRCDEST лежат все исходники, а в PKGDEST лежит готовый пакет. После копирования запусти makepkg в каталоге с PKGBUILD. Если всё совпало, сборка начнётся сразу с распаковки, без единой строки скачивания.
Готовые пакеты из PKGDEST можно ставить без сети напрямую:
sudo pacman -U /var/cache/makepkg/pkg/*.pkg.tar.zst
Такой перенос особенно полезен, когда нужно собрать пакет один раз, а поставить на несколько машин без интернета.
Если makepkg упал посреди скачивания, в SRCDEST остаётся битый файл. При следующем запуске makepkg увидит его, проверит контрольную сумму и остановится с ошибкой. Лечится удалением файла:
rm /var/cache/makepkg/src/имя-файла.tar.gz
makepkg
После этого makepkg скачает исходник заново. Если сеть так и не появилась, а исходники уже распакованы в каталоге сборки, поможет флаг -e:
makepkg -e
-e (или --noextract) запрещает makepkg распаковывать исходники заново. Вместе с уже готовым каталогом сборки это позволяет собрать пакет без сети и без скачивания. Полный набор для офлайн-режима выглядит так:
makepkg -e --nodeps --nocheck
--nodeps отключает проверку зависимостей через pacman, --nocheck пропускает тесты. С --nodeps будь осторожен: если зависимость реально отсутствует, сборка упадёт на этапе компиляции. Флаг --skipinteg пропускает проверку контрольных сумм, но используй его только когда уверен в исходниках.
Кэш растёт с каждой сборкой, и это нормально. Исходники в SRCDEST занимают место, собранные пакеты в PKGDEST тоже. Раз в пару месяцев стоит проводить ревизию.
Для пакетов в общем кэше pacman есть paccache. Он удаляет старые версии и оставляет последние:
paccache -r
По умолчанию paccache сохраняет три последние версии каждого пакета. Количество настраивается флагом -k:
paccache -rk1
Исходники в SRCDEST paccache не трогает, это каталог makepkg. Чисти его вручную: удали старые tarball’ы и git-клоны, которые больше не нужны. Если пакет перестал собираться, makepkg просто скачает исходники заново.
Сами. makepkg просто складывает файлы в указанные каталоги, а удаление старых версий остаётся твоей заботой. Для пакетов используй paccache -r, для исходников используй ручную чистку.
Нет. Первая сборка требует сети, исходники нужно откуда-то взять. Кэш решает задачу повторных сборок и установки на другие машины. Если сети нет вообще, а пакет не собран, поможет только перенос готового пакета или кэша с другой машины.
Каталог сборки ($BUILDDIR, по умолчанию временный) это рабочее место: там распакованы исходники, идёт компиляция. После сборки он удаляется. SRCDEST это постоянное хранилище скачанных архивов. Одно другого не заменяет: makepkg сначала берёт исходник из SRCDEST, потом распаковывает его в каталог сборки.
Если PKGDEST указывает на /var/cache/pacman/pkg, то да, пакеты попадают в общий кэш. Если пути разные, это два отдельных хранилища: pacman складывает скачанные пакеты в свой кэш, makepkg складывает собранные в свой.
Значит, файл в SRCDEST повреждён или не совпадает с тем, что указано в PKGBUILD. Удали его и запусти makepkg заново: он скачает исходник и проверит сумму ещё раз. Если ошибка повторяется, проверь PKGBUILD, возможно, автор обновил контрольную сумму.
SRCDEST, PKGDEST и остальным опциям.paccache и управление кэшем пакетов.SRCDEST и PKGDEST превращают makepkg из одноразового конвейера в инструмент с памятью. Исходники скачиваются один раз, собранные пакеты копятся в одном месте, а пересборка и установка на другие машины работают без сети. Настройка занимает две строки в /etc/makepkg.conf и один mkdir. Сделай это сейчас, и в следующий раз, когда интернет пропадёт, сборка не остановится.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии