LINUX.ORG.RU

Свой локальный репозиторий-кеш

 


0

1

Поскольку в ближайшее время у меня в моей домашней локалке будет уже аж 3 машины под управлением ArchLinux, а канал в интернет не отличается высокой скоростью, подумываю о создании локального репозитория-прокси. Этим делом заставлю заниматься самодельный роутер (тоже на Arch Linux).

Требуется такая схема: если пакет уже есть в кеше и эта версия самая актуальная, то он отдаётся из кеша. Если пакета нет в кеше, то он берётся из внешнего репозитория. При этом одновременно с отдачей его клиенту происходит и сохранение в кеш (то есть не так, что клиент ждёт полной загрузки в кеш и только потом получает сам). Если клиент запросил пакет, который есть в кеше, но устарел, то происходит так же как и с несуществующим в кеше пакетом (он качается из интернета), но при этом удаляется старая версия (то есть в кеше не может быть одновременно больше одной версии одного пакета).

При этом клиенты бывают как i686, так и x86_64 и это должно нормально обрабатываться (независимые от архитектуры пакеты не должны дублироваться, потому что место ограниченно).

Что делать?

★★★★★

Поставь в squid правильное ограничение кеша и не парся, старые пакеты и так удалятся, потому что к ним обращаться не будут.

yurikoles ★★★
()
Ответ на: комментарий от gatsu

/var/cache/pacman/pkg/ это, конечно, кажется хорошей идеей, но волнует несколько аспектов:

1) На основе какой технологии лучше это сделать? sshfs? samba? что?

2) А как чистить кэш? pacman -Sc выполняет хорошо эту функцию локально, но он удалит все «ненужные» пакеты от других машин (например, от другой архитектуры).

KivApple ★★★★★
() автор топика
Ответ на: комментарий от yurikoles

старые пакеты и так удалятся, потому что к ним обращаться не будут.

Частота обращений - не тот показатель, по которому следует решать чему остаться в кэше. В кэше должно остаться ВСЁ актуальной версии, даже если к этому больше ни разу не обратятся.

Зачем это нужно? Приведу пример. Допустим, я поставлю на один компьютер OpenArena. Пакет openarena-data весит почти 400 МБ и скачивать его ещё хоть раз заново не очень-то хочется, в то же время обновляется OpenArena относительно редко, поэтому скорее всего за несколько месяцев я больше ни разу не обращусь к этому файлу. И тут я хочу на другой компьютер поставить тоже OpenArena. За это время файл уже давно будет удалён из кэша (к нему не обращались очень долго), хотя он по-прежнему актуальной версии.

KivApple ★★★★★
() автор топика

Использовани кэширующего прокси выглядит наиболее красивым вариантом и соответсвует всем запросам.

Главное - правильно настроить размер кэша и время его жизни.

anonymous
()

Посмотри apt-cacher-ng, там вроде была экспериментальная поддержка arch'а.

Deleted
()
Ответ на: комментарий от KivApple

Да, вариант с общим каталогом не удобен ещё по одной причине - мне придётся производить настройки более специфичные, чем просто указание своего адреса сервера в качестве репозитория. В итоге, если я окажусь в другой сети (для нетбука вполне реально), то всё обновление сломается. В случае с прокси и с тем, что у моего роутера есть внешний IP, всё всё равно будет работать, хотя, конечно, скорость будет не такой приятной и весь выигрыш пропадёт, но главное то, что оно будет работать, а не отвалится.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

На основе какой технологии лучше это сделать?

Я с сетями не дружу :)

А как чистить кэш?

IMHO -Scc после обновления и перезагрузки всех компов достаточно, смысла хранить старые пакеты нет. Проблемы с нехваткой места в таком случае тоже нет.

gatsu
()
Ответ на: комментарий от gatsu

IMHO -Scc после обновления и перезагрузки всех компов достаточно, смысла хранить старые пакеты нет. Проблемы с нехваткой места в таком случае тоже нет.

А что мне делать, когда я соберусь ставить новую систему? Или просто обновить систему, которая до этого была вне сети?

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

Ну, если времени много… то можно написать утилиту, которая будет заниматься удалением устаревших и неиспользуемых пакетов. Для этого непосредственно перед очисткой кэша должен формироваться список всех используемых пакетов (а иначе есть возможность оставить ненужные или удалить лишние пакеты).

Таким образом, задача сводится к двум скриптам. Первый сканирует каталог кэша и удаляет файлы с устаревшими и неиспользуемыми пакетами, используя список используемых пакетов. Второй, принимает вывод pacman -Q (например) и дополняет список используемых пакетов.

мне придётся производить настройки более специфичные

Не сложней, чем правка конфига pacman.

mount -t nfs router:/pacman-packages/ /var/cache/pacman/pkg/

gatsu
()
Ответ на: комментарий от gatsu

Не сложней, чем правка конфига pacman.

Я про то, что если я куда-нибудь уйду, то все сломается и чтобы получилось обновиться придётся изменять настройки.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

Тогда делим кэш на /var/cache/pacman/pkg/i686/ и /var/cache/pacman/pkg/amd64/, на клиентах монтируем нужные папки. Для удалённых клиентов организуем сервер с помощью repo-add.

gatsu
()
Ответ на: комментарий от KivApple

Пользовался для шаринга пакетов из /var/cache/pacman/pkg/ между ноутом и десктопом. Работало прекрасно.

За подробностями можешь сходить в AUR и на сайт проекта.

baverman ★★★
()

1) Устанавливаешь ftp-сервер 2) Создаещь /srv/ftp/pub/archlinux/ 3) rsync`ешь c нормальным репозитарием (~40Gb для 32-бит архитектуры)

int13h ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.