14 Март 2008

Локальный репозиторий пакетов. Часть 1.

Ситуация довольно распространенная, и для многих - актуальная. В моем случае, имеется комп, подключенный к Интернету, с которого регулярно берутся обновления пакетов (а как мы знаем, то что скачивается с И-Нета зависает в нашей системе по адресу: /var/cache/apt/archives). И есть тачка, которая ну не имеет никакого Интернет конекта. Имеются репозитории системы на DVD, и это здорово, но только как вот быть с апдейтами?

Ответ получается следующим:

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

Варианты.
Я бы выделил 3 способа создания локального репозитория:
  • apt-move
  • debmirror
  • AptOnCD
Первые два способа - "взрослое" создание репозитория, и больше подходит даже для несколько иных целей, например, есть сетка Debian/Ubuntu компов, кто-то получает обновления, и остальные уже тянут их исключительно с локально сети (ну а смысл качать каждый пакет по несколько раз с И-Нета?). Для этого нужен репозиторий, который подключен на всех требуемых хостах.

Третий способ несколько проще, как по сути, так и по реализации. Он даже называется как "Инструмент для резервного копирования пакетов", т.е. не о репозитории речь-то. И для моего случая он подходит наиболее оптимально! Итак...

Apt-move.
Так называется утилита для создания локального зеркала пакетов. Это настоящий такой, "джедаевский" метод создания репозитория со всеми существующими атрибутами, типа консоль, правка конфиг-файлов и всего-такого. :) Настоящие Дебианщики (и не только) очень ценят такой подход. Еще бы, он максимально функционален - настроить можно Бог знает чего и сколько! Кароче, все что смогли придумать разработчики программ здесь можно настроить! И, не смотря на это он прост! Но только для этого как всегда нужно сначала качественно сделать RTFM, а это для многих реальный "ахтунг!" :) Но бояться не нужно - вперед!

Шаг 0.
Если эта программа у нас в системе еще не установлена, то тогда делаем это:
# apt-get install apt-move

Шаг 1.
Определяем, куда положим наш локальный репозиторий. Например, /home/vasya/repo.

Шаг 2.
Создаем директорию (она же папка, она же фолдер...). Пакеты из нашего места хранения /var/cache/apt/archives будут перенесены в эту нашу директорию локального зеркала /home/vasya/repo.
$ mkdir /home/vasya/repo

Шаг 3.
Прописываем наш путь (/home/vasya/repo) как переменную в файл /etc/apt-move.conf
В нем находим строку:
LOCALDIR=path_to
и вместо path_to вписываем наш путь. Причем, здесь очень важно следующее: прописать нужно абсолютный путь (т.е. весь путь, начиная с корневой директории). Да, и не забываем, что конфиг-файл редактируем с привилегиями root-a):
LOCALDIR=/home/vasya/repo

Шаг 3.
Называем наш дистриб для репозитория. Ну, например, stable! Прописываем в строке:
# The default distribution (see the apt-move(8) manpage for details)
DIST=stable

Шаг 4.
Если нам не нужны больше наши бинарные пакеты из /var/cache/apt/archives после создания нашего локального репозитория (пакеты будут удалены), то тогда в строке должно быть:
# Set this to yes if you wish to keep the originals for move/movefile.
COPYONLY=no
Но если мы хотим оставить копии установленных/скачанных бинарников в нашей директории /var/cache/apt/archives, то тогда это строка будет как в моем случае:
# Set this to yes if you wish to keep the originals for move/movefile.
COPYONLY=yes

Шаг 5.
Несколько схож по смыслу с предыдущим шагом, однако тут мы указываем о сохранении, или же не сохранении бинарников пакетов вышедших из употребления в нашей системе (как я понял, это те пакеты, которые уже удалены из нашего Линукса), но имеющих бинарник в /var/cache/apt/archives. Я их не удалял:
# Do you want apt-move to delete obsolete files from your mirror? (yes/no)
DELETE=no

Шаг 6.
Наверное желательно будет установить имя ключа для подписи, но честно, я этим никогда не занимался. И строку ниже я оставляю без изменения.
# Set this to key name to be used for signing Release files.
GPGKEY=

Шаг 7.
Создаем локальный репозиторий!
$ apt-move update
Только я уже точно не уверен: можно ли это делать от простого юзера, или нет. В общем, тут просто нужно попробовать.
:-)
Выполнение этой команды может занять довольно длительное время, все зависит от того, сколько пакетов у вас находится в директории /var/cache/apt/archives.
Все!

Заметки.
Все довольно просто! Если что, то нужно запомнить, лишь, дислокацию основного конфиг-файла в системе /etc/apt-move.conf, и внимательно читать его подсказки.

Говорят, что команда apt-move update является выполнением последовательности команд:
  • apt-move get - формирует мастер-файл;
  • apt-move move - переносит пакеты из кэша apt в локальное зеркало;
  • apt-move delete - удаляет устаревшие пакеты;
  • apt-move packages - создает Packages.gz и Sources.gz дерева локального зеркала.
.. ну это так, для справки.

Debmirror.
Тут у меня нет никакого опыта, зато есть замечательная ссылка на ресурс, в котором это подробно описано на английском языке, а вот здесь этот же howto уже на русском.


Ну а подключить полученный репозиторий, наверное, сможем!?

... продолжение следует.

9 коммент.:

Dadgo комментирует...

полезная статья!
чувствую, скоро буду делать себе такое же.
а то дома на двух машинках поставил системы и каждой из них отдельно тащу из сетки. Конечно, трафик всё равно бесплатный, но скорость иногда оставлят желать лучшего.

Анонимный комментирует...

Несколько усложненно, есть более простой путь, утилита apt-cacher. Одна машина назначается сервером (на которой собственно установлен apt-cacher, на всех машинах редактируется sources.list. Строки типа "deb http://ru.archive.ubuntu.com/ubuntu/ gutsy main restricted " приводятся к виду "deb http:// IP_Вашего_сервера:3142/ ru.archive.ubuntu.com/ubuntu/ gutsy main restricted". Все, первая мшина ташит нужные пакеты из репа, остальные с кеша сервера.
Более подробный мануал на русском: http://whylinux.ru/2008/01/11/tt-keshiruem-pakety-s-apt-cacher/

SIR комментирует...

Спасибо анонимный за комментарий. Думаю многим будет полезна информация.

Это действительно интересно, в случае если хосты находятся в сети.
А если они не в сети, то тогда уже как варианты выше..

Cucumber комментирует...

Когда я начинал делать локальный репозиторий для городской сети, то воспользовался debmirror. Все бы ничего, но эта утилита не подчищала за собой репозиторий от старых версий пакетов и через месяц локальной зеркало распухло в два раза. Потом я попробовал apt-mirror. Эта штука подчистила мне старые версии и скачала новые. Настройки просты. Вообщем рекомендую.

timyr-lan комментирует...

есть еще apt-zip , позволяющий создать список необходимых к загрузке файлов. чтобы скачать их на другом компе с толстым каналом.

sivka-burka комментирует...

Я перевел статью с howtoforge.com о использовании debmirror по указанной ссылке. Надеюсь, она будет хорошим дополнением к этой статье.
http://sivkaburka.blogspot.com/2008/03/dvd.html

SIR комментирует...

2 sivka-burka:
Спасибо, ссылку добавил в пост.
Уверен, будет многим полезен.

comrade-dimge комментирует...

У меня не работает и вот что пишет:

# apt-move update

Updating from local Packages files...
APTSITES: [!_]* does not exist
Error: getfiles: Cannot find index files for APTSITES.
Make sure that apt-get update has been run.

DimOn комментирует...

Сделал все как написано.

На локальной машине в sources.list добавляю строку

deb http://IP_машины c нужно взять пакеты/debian/ stable main contrib non-free

НЕ работает, не может скачать!

Если в папку созданную для apt-move ложи test.php, он с локальной машины открывается нормально.

Что делаю НЕ так, где ошибка?