Организация локального репозитория

Теоретический минимум

Допустим, есть машина (назовём ее сервер), которая содержит DVD-привод, есть один или несколько DVD-дисков, на которых комплект ПСПО, или дистрибутив Мастер или Терминал, или школьный branch так называемый, или ветка 4.0, вобщем, какой-то набор пакетов, адекватных данному дистрибутиву (если они не адекватны ему, то вряд ли стоит организовывать из них репозиторий). На этот сервер мы переписали содержимое всех привезённых DVD-дисков, и дальше хотим пользоваться всем этим как хранилищем.

Копирование пакетов

Итак, попробуем переписанные на жесткий диск пакеты предоставить всем местным компьютерам как хранилище. Кстати, можно смонтировать даже не устройство, а файл с образом. Например, нет DVD-привода, а есть переносной USB-винчестер с образом интересующего нас DVD-диска. Кстати, каталог /media предназначен для автоматического размещения точек монтирования, а /mnt — для ручного их размещения. Смонтируем:

$mount -o loop disk_image.iso /mnt/iso

Эффект тот же, если бы мы смонтировали этот диск из DVD-привода. Команда mount сама определила тип файловой системы (iso9660), а можно было указать ключик -t iso9660, получилось бы точно также.

Что есть на диске?..

$ls -lh /mnt/iso
 total 132M
-r--r--r--  1 root root  56M 2008-06-28 18:29 altinst
dr-xr-xr-x  5 root root 2,0K 2008-06-28 18:31 ALTLinux
dr-xr-xr-x 14 root root 4,0K 2008-06-28 18:31 Documentation
dr-xr-xr-x  3 root root 6,0K 2008-06-28 18:31 isolinux
-r--r--r--  1 root root 8,3K 2008-06-18 15:24 license.ru.txt
-r--r--r--  1 root root 3,7K 2008-06-18 15:24 license.txt
dr-xr-xr-x  2 root root 2,0K 2008-06-28 18:31 Metadata
-r--r--r--  1 root root  25M 2008-06-28 18:28 netinst
-r--r--r--  1 root root  52M 2008-06-28 18:27 rescue
-r--r--r--  1 root root 205K 2008-06-18 15:24 RPM-GPG-KEY

Там не так уж много. Каталог ALTLinux/ — хранилище пакетов, каталог с документацией — текстовые файлы с лицензией, на тот случае, если диск вставлен в компьютер с Windows, кое-что можно почитать. isolinux/ содержит загружаемые файлы, чтобы организовать загрузку с CD/DVD, это часть пакета syslinux, который умеет загружаться со всего, что шевелится. Самый большой файл — это altinst. Он тоже является файловой системой, его тоже можно подмонтировать, внутри него находится файловая система с установщиком. Зачем так сделано?.. Во-первых, она упакована и занимает меньше места, во-вторых, файловая система iso9660 обладает рядом ограничений на имена файлов, которых в linux нет (кстати, в именах файлов в linux могут быть любые символы, кроме /, который является разделителем каталогов, и символа с кодом 0), не сохраняет в нужной мере права доступа к файлам (в том числе setuid и т.п.)

Придумаем, каким способом будем раздавать этот диск? По ftp. (допустим, подняли ftp-сервер,

а также немножко докрутить сам репозиторий (после создания копии репозитория полезно на ней сделать genbasedir)

Использование репозитория

В системе есть условно говоря, два места, где указаны хранилища, которые вы используете, это — каталог sources.list.d, где лежат уже готовые файлы, которые туда подкладываются (и тогда используются в настройках), откладываются (и тогда не используются), а другое — просто файл sources.list, куда можно писать что угодно. В Debian'е такая policy: при установке пакет не может редактировать чужие конфиг-файлы, это закон. Что делать, если нужно модифицировать sources.list?.. Ответ: давить на мейнтейнера apt, чтобы тот предусмотрел, чтобы apt читала, во-первых sources.list, а во-вторых, все файлы из каталога sources.list.d, и каждый пакет может спокойно положить туда свой файл, ничего более не модифицируя.

Что угодно можно писать и в первое место, но сюда — лучше. Туда пишем:

#тип_пакетов [электронная_подпись] адрес название_хранилища разделы_хранилища
rpm ftp://10.30.5.1/pub ALTLinux disk base

ALTLinux — имя репозитория. Дальше два раздела disk, base. Почему disk и base? Это ведь настройка установщика, а у него есть две стадии работы — где ставится базовая система (base) и дополнительные пакеты, которые вы выбираете при установке (disk).

Сохраним конфиг, сделаем

$apt-get update

Видно, что он пытается его прочитать, но не находит подписи (signatures).

Перегенерация структуры

Мы сейчас по-тупому скопировали репозиторий как набор файлов с диска, а, вообще говоря, мы могли нарушить его структуру. Давайте его пересоберём, этот репозиторий. Для этого надо установить пакет apt-utils, и сказать

# genbasedir --verbose --progress --create --topdir=/var/ftp/pub ALTLinux base disk
Components: base disk
Processing pkglists... base  1628/1628 1628/1628disk  0488/0488 0488/0488done
Processing srclists... done
Creating component releases... done
Updating global release file... done
Appending MD5Sum... base disk done
Creating legacy hashfile... base disk done
All your base are belong to us!!!

Указаны три параметра: расположение дерева каталогов (URL), затем название хранилища (ALTLinux), затем названия разделов disk, base.

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

(Как-то раз мы попробовали скопировать репозиторий с жесткого диска, с помощью команды cp -l, и вот что получилось. Дело в том, что cp -l создаёт дерево каталогов, населяя их преимущественно жесткими ссылками на файлы-источники, а фактическое копирование она производит только если жесткую ссылку создать нельзя, например если это разные файловые системы или если происходит копирование директорий. Такое копирование может делаться очень быстро в пределах одной файловой системы.

Однако, впоследствии умный genbasedir выругался на то,что количество хардлинков больше одного (т.е., он-то сейчас файл включит в индекс, а вдруг его потом кто-то изменит, пользуясь другим именем с другими правами?.. Лучше так не делать.)

Итак, вы ставите FTP-сервер, подкладываете ему содержимое нашего DVD-диска, и даже любые другие пакеты, все это можно сложить в кучу, на неё натравить genbasedir, которые генерирует правильный каталог с индексами base, и на клиентской машине это хранилище стало доступно. Значит, на всех клиентских машинах этот сервер можно объявить в качестве хранилища и вуаля: каким бы способом вы ни ставили ПО на клиентские машины, обновляться и делать многое другое можно не из интернета, а с этого самого сервера.

Названия репозиториев --- просто имена каталогов. Название репозитория (ALTLinux) — это просто название каталога, в котором формируется соответствующее дерево, а имена разделов упоминаются в нескольких местах структуры хранилища.

В большинстве случаев, дистрибутив на сервере устроен в виде набора репозиториев с одной веткой в каждом.

Дополнение к теормину

Так вот, есть не пользоваться специальной утилитой sisyphus-mirror, то можно просто взять DVD с ALTLinux Master (как самый большой дистрибутив), или диски с школьным бранчем целиком и выложить всю эту структуру на FTP в некотором определённом виде: лишь бы эти файлы были доступны в своих каталогах, а мы потом сформируем собственно репозиторий с помощью genbasedir. Хранилище (ALTLinux/ с DVD-диска перепишем в /var/ftp/pub.

Дополнение про автомонтирование

Кстати, когда мы вставили диск в CD-ROM, он смонтировался сам и открылось окно:

../cdrom_automount.png

В ПСПО при запущенной графической оболочке все монтируется автоматом и нам не нужно ничего больше делать. Это соответствует некоторой автоматически выполняемой команде mount. Через HAL достаётся имя тома, по DBUS кидается наверх сообщение "тут что-то смонтировали", если на DBUS'е сверху сидит программа, которая это слушает, она открывает ассоциированный с этим делом файловый браузер, который показывает содержимое. Да, это робот, но, по крайней мере, он сборно-разборный, известно, что внутри. Посмотрим, как смонтировалось:

$ mount
  (...)
/dev/hdc on /media/cdrom type iso9660 (ro,noexec,nosuid,nodev,utf8,user=saj)

Точка монтирования может оказаться другая, например /media/hdc, но это не суть важно.

Из-под root'а копируем пакеты с диска:

# cp -a /media/cdrom/ALTLinux/ /var/ftp/pub/

После этого необходимо сказать genbasedir. Тут три параметра: месторасположение. хранилища, название и его разделы.

Теперь на клиентских машинах надо настрить, чтобы испльзовалось новосозданное локальное хранилище: отредактировать /etc/apt/sources.list, после чего можно делать $apt-get update.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

21

1

1

1

1

PavelSutyrin, DmitryChistikov, VsevolodKrishchenko