Различия между версиями 9 и 11 (по 2 версиям)
Версия 9 от 2008-08-15 22:05:34
Размер: 16827
Редактор: DmitryChistikov
Комментарий: Пометки: структурирование
Версия 11 от 2008-08-16 18:02:06
Размер: 21659
Редактор: DmitryChistikov
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 3: Строка 3:
==== Теоретический минимум ==== Допустим, у нас есть один или несколько компьютеров с установленным дистрибутивом из числа ПСПО ALT Linux. Пусть у нас также имеется один или несколько DVD-дисков с ПСПО (к примеру, дистрибутив "Линукс Мастер" или "Линукс Терминал"). Возможно, это даже не DVD-диски, а просто набор пакетов, адекватных нашему дистрибутиву (к примеру, так называемый "школьный branch" или вообще ветка 4.0). Если мы хотим централизованно пользоваться этими пакетами, у нас есть несколько вариантов:
Строка 5: Строка 5:
## ~00:10:00 of 080722.ogg
Допустим, есть машина (назовём ее сервер), которая содержит DVD-привод, есть один или несколько DVD-дисков, на которых комплект ПСПО, или дистрибутив Мастер или Терминал, или школьный branch так называемый, или ветка 4.0, вобщем, какой-то набор пакетов, адекватных данному дистрибутиву (если они не адекватны ему, то вряд ли стоит организовывать из них репозиторий). На этот сервер мы переписали содержимое всех привезённых DVD-дисков, и дальше хотим пользоваться всем этим как хранилищем.
 1. Зарегистрировать все имеющиеся диски как носители с хранилищами (для этого служит команда apt-cdrom add). Это позволит использовать наши пакеты на каждом компьютере, в котором есть DVD-привод.
Строка 8: Строка 7:
 * Зарегистрировать DVD-диск как таковой как носитель с хранилищем. Если на машине нет DVD-привода — не годится.
 * Раскомментировать настройки {{{/etc/apt/sources.list.d/}}} и ходить за пакетами только в Интернет. Интернета может не быть, он может быть медленный и стоить денег.
 * Если все диски переписаны на сервер и есть небыстрый, но, скажем, бесплатный интернет, по нему можно их потом обновлять, это немного (если не обновляется OpenOffice). Можно то или иное исключить из обновления, чтобы не качать лишнего.
 1. Использовать настройки в каталоге /etc/apt/sources.list.d и ходить за пакетами в Интернет. Этот вариант не слишком хорош, так как Интернета может не быть вообще, он может быть медленным и стоить денег. Кроме того, поставленную задачу этот вариант не решает, а "обходит".
Строка 12: Строка 9:
==== Копирование пакетов ====  1. Организовать на одной из машин локальное хранилище. Этот вариант позволяет переписать все пакеты на эту машину и в дальнейшем, при наличии, например, небыстрого, но бесплатного Интернета, обновлять их до актуальных версий. Отметим, что при обновлении некоторые пакеты и группы пакетов можно исключить, если использоваться они не будут. В любом случае после организации хранилища все машины могут ходить за пакетами именно к этому хранилищу.
Строка 14: Строка 11:
Итак, попробуем переписанные на жесткий диск пакеты предоставить всем местным компьютерам как хранилище. Кстати, можно смонтировать даже не устройство, а файл с образом. Например, нет DVD-привода, а есть переносной USB-винчестер с образом интересующего нас DVD-диска. Кстати, каталог {{{/media}}} предназначен для автоматического размещения точек монтирования, а {{{/mnt}}} — для ручного их размещения. Смонтируем: Итак, будем рассматривать последний вариант. Его реализация разбивается на три этапа.

=== Получение пакетов ===

Первый этап заключается в копировании пакетов на выбранную нами машину (в дальнейшем будем называть ее сервером). Определимся, где наше хранилище будет располагаться. Наш выбор будет связан с способом дальнейшего функционирования хранилища, иными словами --- с тем, как именно пакеты будут раздаваться по сети. Мы выберем, пожалуй, самый простой из всех доступных вариантов и предоставим доступ хранилищу по протоколу FTP. Будем считать, что на выбранной нами машине-сервере уже запущена программа --- FTP-сервер, сконфигурированная для использования каталога /var/ftp как корневого, причем в этом каталоге уже создан доступный для чтения любому желающему подкаталог pub. Будем размещать наше хранилище в подкаталоге каталога pub.

Рассмотрим несколько вариантов того, откуда в нашем хранилище возьмутся пакеты. Предположим для начала, что у нас есть DVD-диск с дистрибутивом. Вставим его в привод и задвинем лоток --- при запущенной "по умолчанию" графической оболочке он смонтируется "сам" и откроется примерно такое окно:

{{attachment:../cdrom_automount.png}}

Скажем несколько слов по поводу того, как происходит такое "автоматическое" монтирование. При задвигании лотка система сама произвела монтирование находящейся на диске файловой системы и извлекла с помощью HAL (Hardware Abstraction Layer) имя тома. После этого по программно организованной системной шине DBUS было отправлено сообщение о произведенном монтировании (подключении?). "Слушающая" эту шину программа-робот произвела анализ полученной информации и дала команду открыть ассоциированный файловый браузер, который и показал нам содержимое диска. Обратим внимание на то, как была смонтирована размещенная на носителе файловая система:
Строка 17: Строка 24:
$mount -o loop disk_image.iso /mnt/iso $ mount | grep iso9660
/dev/hdc on /media/cdrom type iso9660 (ro,noexec,nosuid,nodev,utf8,user=saj)
Строка 19: Строка 27:
Эффект тот же, если бы мы смонтировали этот диск из DVD-привода. Команда {{{mount}}} сама определила тип файловой системы ({{{iso9660}}}), а можно было указать ключик {{{-t iso9660}}}, получилось бы точно также.
Строка 21: Строка 28:
Что есть на диске?.. Заметим, что точка монтирования могла оказаться другой (к примеру, /media/hdc). Впрочем, для нас это принципиальной важности не имеет. Скопируем, получив права суперпользователя, пакеты с нашего диска (они находятся в подкаталоге ALTLinux):

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

На этом первый этап завершается. Вернемся, однако, назад и опишем вкратце другие способы получения пакетов. Может оказаться, что на машине-сервере вообще нет DVD-привода, а есть лишь переносной USB-винчестер с образом интересующего нас диска. Альтернативный вариант --- скачанный из сети или полученный каким-либо иным способом тот же самый iso-файл. Разберемся, что с этим файлом делать. Заметим, что в нем хранится образ записанной "как есть" файловой системы. Создадим каталог /mnt/iso и смонтируем этот образ при помощи команды mount:

{{{
# mkdir /mnt/iso
# mount -o loop disk_image.iso /mnt/iso
}}}

Эффект от монтирования точно такой же, как от монтирования файловой системы с диска из привода. Обратим внимание, что команда mount сама определила тип файловой системы (iso9660), который мы могли бы указать и явно с помощью специального ключа (-t iso9660). Для монтирования мы использовали каталог /mnt вместо /media, потому что последний предназначен для файловых систем, монтируемых автоматически, а первый --- для монтируемых вручную. Посмотрим на содержимое диска:
Строка 37: Строка 57:
Там не так уж много. Каталог {{{ALTLinux/}}} — хранилище пакетов, каталог с документацией — текстовые файлы с лицензией, на тот случае, если диск вставлен в компьютер с Windows, кое-что можно почитать. {{{isolinux/}}} содержит загружаемые файлы, чтобы организовать загрузку с CD/DVD, это часть пакета {{{syslinux}}}, который умеет загружаться со всего, что шевелится. Самый большой файл — это {{{altinst}}}. Он тоже является файловой системой, его тоже можно подмонтировать, внутри него находится файловая система с установщиком. Зачем так сделано?.. Во-первых, она упакована и занимает меньше места, во-вторых, файловая система {{{iso9660}}} обладает рядом ограничений на имена файлов, которых в linux нет (кстати, в именах файлов в linux могут быть любые символы, кроме {{{/}}}, который является разделителем каталогов, и символа с кодом 0), не сохраняет в нужной мере права доступа к файлам (в том числе setuid и т.п.)
Строка 39: Строка 58:
Придумаем, каким способом будем раздавать этот диск? По ftp. (допустим, подняли ftp-сервер, Мы использовали образ другого диска, так что список файлов отличается от виденного нами ранее. Каталог ALTLinux по-прежнему содержит хранилище пакетов, а документация на этот раз попала в Documentation. Каталог isolinux отвечает за загрузку с CD/DVD --- это часть пакета syslinux, который может обеспечить загрузку с самых разнообразных "источников". Обратим внимание и на файл altinst --- он тоже содержит файловую систему, но не iso9660, а squashfs. В этой файловой системе размещен установщик располагающегося в подмонтированном файле-образе дистрибутива. Основные причины, по которым установщик помещен в squashfs, таковы. Эта файловая система, во-первых, "упаковывает" свое содержимое, чтобы оно занимало меньше места, и, во-вторых, не обладает ограничениями iso9660 на имена файлов и права доступа к ним. (Заметим в скобках, что имена файлов в ОС Linux могут содержать любые символы, кроме /, который является разделителем каталогов, и символа с кодом 0.) Нам из содержимого диска сейчас по-прежнему требуется лишь хранилище пакетов (ALTLinux), которое копируется в нужный нам каталог так же, как и раньше.
Строка 41: Строка 60:
 . скопировали на него все с диска). Теперь предстоит настроить клиентские места на обновление с этого сервера, Сделаем еще одно замечание, касающееся получения нужных нам пакетов. Есть утилита, которая качает актуальные версии пакетов из сети --- именно для создания локального хранилища. Ее применение, однако, рассматривать мы не будем, ограничившись указанием имени: sisyphus-mirror.
Строка 43: Строка 62:
а также немножко докрутить сам репозиторий (после создания копии репозитория полезно на ней сделать {{{genbasedir}}}) === Перегенерация метаинформации ===
Строка 45: Строка 64:
==== Использование репозитория ====

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

Что угодно можно писать и в первое место, но сюда — лучше. Туда пишем:
Если мы сейчас попробуем использовать наше хранилище, то у нас ничего не получится. Дело в том, что простое копирование пакетов не сохраняет внутренних связей. Посмотрим, какие каталоги попали в хранилище:
Строка 52: Строка 67:
#тип_пакетов [электронная_подпись] адрес название_хранилища разделы_хранилища
rpm ftp://10.30.5.1/pub ALTLinux disk base
missing typescript
Строка 55: Строка 69:
{{{ALTLinux}}} — имя репозитория. Дальше два раздела {{{disk}}}, {{{base}}}. Почему {{{disk}}} и {{{base}}}? Это ведь настройка установщика, а у него есть две стадии работы — где ставится базовая система (base) и дополнительные пакеты, которые вы выбираете при установке (disk).
Строка 57: Строка 70:
Сохраним конфиг, сделаем base и disk --- это названия разделов с RPM-пакетами (имена соответствующих каталогов начинаются с префикса "RPMS."). Каталог же base содержит метаинформацию (индексы) --- именно ее и следует перегенерировать. Удалим base вместе со всем содержимым:
Строка 60: Строка 73:
$apt-get update missing typescript
Строка 62: Строка 75:
Видно, что он пытается его прочитать, но не находит подписи (signatures).
Строка 64: Строка 76:
==== Перегенерация структуры ====

Мы сейчас по-тупому скопировали репозиторий как набор файлов с диска, а, вообще говоря, мы могли нарушить его структуру. Давайте его пересоберём, этот репозиторий. Для этого надо установить пакет {{{apt-utils}}}, и сказать
А теперь воспользуемся утилитой genbasedir из пакета apt-utils для перегенерации метаинформации:
Строка 82: Строка 92:
Если репозиторий входит в состав дистрибутива, рассчитанного на несколько архитектур, то ветки его будут соответствовать архитектурам (x86_64, i586, и т.п.),
а также будет ветка noarch, где лежат пакеты, не зависящие от архитектуры. Поэтому двухуровневое именование: имя репозитория, а внутри названия разделов его.
Обратим внимание на заключительную четверку параметров: topdir задает расположение дерева каталогов (/var/ftp/pub), за ним следует название нашего хранилища (ALTLinux), а после --- список его разделов, или компонент (base и disk). Отметим, что если хранилище входит в состав рассчитанного на несколько архитектур дистрибутива, то его название должно соответствовать имени одной из этих архитектур: i586, x86_64 и пр. Создается также хранилище noarch для не зависящих от архитектуры пакетов. Названия же разделов внутри каждого из таких хранилищ обычно отражают предназначение или "уровень стабильности" пакета, точнее говоря --- принадлежность его к той или иной ветке (типичными названиями хранилищ являются main, classic, backports). Заметим, что иногда хранилищем называют объединение каталогов, предназначенных для разных архитектур, а не каждый каталог в отдельности.

=== Использование хранилища ===

Сконфигурируем APT на "клиентских" машинах для использования созданного нами хранилища. Обратим внимание на то, что в системе есть целых два места, в каждом из которых используемые хранилища можно указывать. Первое --- это файл /etc/apt/sources.list, а второе --- все файлы каталога /etc/apt/sources.list.d. Почему так получилось? Содержимое файлов из /etc/apt/sources.list.d обычно большей частью закомментировано --- здесь удобно "включать" и "выключать" использование того или иного хранилища. Файл же /etc/apt/sources.list содержит чаще всего настройки, специфичные для локальной машины. Редактировать этот файл автоматически не всегда удобно, а потому еще в дистрибутивах Debian (из которых система APT и была заимствована) был введен каталог sources.list.d, в котором изменяющие список используемых хранилищ программы могли чувствовать себя более уверенно (в Debian Policy есть пункт, запрещающий пакетам при установке модифицировать чужие конфигурационные файлы).

Итак, впишем наше хранилище в sources.list:

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

rpm --- это тип пакетов хранилища, за ним следует адрес хранилища, а после идет имя репозитория (ALTLinux) со списком разделов (disk и base). Кстати говоря, мы так и не объяснили смысл разделения на base- и disk-составляющие. Дело в том, что скопированное нами хранилище предназначено, среди прочего, для установщика, работа по установке пакетов которым разделена на две стадии: установка базовой системы (base) и дополнительного ПО (disk). Сохранив конфигурационный файл, обновим локальные индексы:

{{{
$apt-get update
}}}

=== Осколки ===

==== Про жесткие ссылки ====
Строка 91: Строка 121:

==== Прочие ====
Строка 100: Строка 132:
==== Дополнение к теормину ====

##Кусок от 080730
##TODO: Здесь все расшифровано, но есть небольшие повторы, нужно слить общее и нужное.

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

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

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

{{attachment:../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/
}}}
Строка 145: Строка 133:

Теперь на клиентских машинах надо настрить, чтобы испльзовалось новосозданное локальное хранилище: отредактировать /{{{etc/apt/sources.list}}}, после чего можно делать {{{$apt-get update}}}.
Строка 154: Строка 140:
|| 21 || 1 || 1 || 1 || || 1 || PavelSutyrin, DmitryChistikov, VsevolodKrishchenko || || || || 35 || 1 || 1 || 1 || || 1 || PavelSutyrin, DmitryChistikov, VsevolodKrishchenko || || ||

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

Допустим, у нас есть один или несколько компьютеров с установленным дистрибутивом из числа ПСПО ALT Linux. Пусть у нас также имеется один или несколько DVD-дисков с ПСПО (к примеру, дистрибутив "Линукс Мастер" или "Линукс Терминал"). Возможно, это даже не DVD-диски, а просто набор пакетов, адекватных нашему дистрибутиву (к примеру, так называемый "школьный branch" или вообще ветка 4.0). Если мы хотим централизованно пользоваться этими пакетами, у нас есть несколько вариантов:

  1. Зарегистрировать все имеющиеся диски как носители с хранилищами (для этого служит команда apt-cdrom add). Это позволит использовать наши пакеты на каждом компьютере, в котором есть DVD-привод.
  2. Использовать настройки в каталоге /etc/apt/sources.list.d и ходить за пакетами в Интернет. Этот вариант не слишком хорош, так как Интернета может не быть вообще, он может быть медленным и стоить денег. Кроме того, поставленную задачу этот вариант не решает, а "обходит".
  3. Организовать на одной из машин локальное хранилище. Этот вариант позволяет переписать все пакеты на эту машину и в дальнейшем, при наличии, например, небыстрого, но бесплатного Интернета, обновлять их до актуальных версий. Отметим, что при обновлении некоторые пакеты и группы пакетов можно исключить, если использоваться они не будут. В любом случае после организации хранилища все машины могут ходить за пакетами именно к этому хранилищу.

Итак, будем рассматривать последний вариант. Его реализация разбивается на три этапа.

Получение пакетов

Первый этап заключается в копировании пакетов на выбранную нами машину (в дальнейшем будем называть ее сервером). Определимся, где наше хранилище будет располагаться. Наш выбор будет связан с способом дальнейшего функционирования хранилища, иными словами --- с тем, как именно пакеты будут раздаваться по сети. Мы выберем, пожалуй, самый простой из всех доступных вариантов и предоставим доступ хранилищу по протоколу FTP. Будем считать, что на выбранной нами машине-сервере уже запущена программа --- FTP-сервер, сконфигурированная для использования каталога /var/ftp как корневого, причем в этом каталоге уже создан доступный для чтения любому желающему подкаталог pub. Будем размещать наше хранилище в подкаталоге каталога pub.

Рассмотрим несколько вариантов того, откуда в нашем хранилище возьмутся пакеты. Предположим для начала, что у нас есть DVD-диск с дистрибутивом. Вставим его в привод и задвинем лоток --- при запущенной "по умолчанию" графической оболочке он смонтируется "сам" и откроется примерно такое окно:

../cdrom_automount.png

Скажем несколько слов по поводу того, как происходит такое "автоматическое" монтирование. При задвигании лотка система сама произвела монтирование находящейся на диске файловой системы и извлекла с помощью HAL (Hardware Abstraction Layer) имя тома. После этого по программно организованной системной шине DBUS было отправлено сообщение о произведенном монтировании (подключении?). "Слушающая" эту шину программа-робот произвела анализ полученной информации и дала команду открыть ассоциированный файловый браузер, который и показал нам содержимое диска. Обратим внимание на то, как была смонтирована размещенная на носителе файловая система:

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

Заметим, что точка монтирования могла оказаться другой (к примеру, /media/hdc). Впрочем, для нас это принципиальной важности не имеет. Скопируем, получив права суперпользователя, пакеты с нашего диска (они находятся в подкаталоге ALTLinux):

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

На этом первый этап завершается. Вернемся, однако, назад и опишем вкратце другие способы получения пакетов. Может оказаться, что на машине-сервере вообще нет DVD-привода, а есть лишь переносной USB-винчестер с образом интересующего нас диска. Альтернативный вариант --- скачанный из сети или полученный каким-либо иным способом тот же самый iso-файл. Разберемся, что с этим файлом делать. Заметим, что в нем хранится образ записанной "как есть" файловой системы. Создадим каталог /mnt/iso и смонтируем этот образ при помощи команды mount:

# mkdir /mnt/iso
# mount -o loop disk_image.iso /mnt/iso

Эффект от монтирования точно такой же, как от монтирования файловой системы с диска из привода. Обратим внимание, что команда mount сама определила тип файловой системы (iso9660), который мы могли бы указать и явно с помощью специального ключа (-t iso9660). Для монтирования мы использовали каталог /mnt вместо /media, потому что последний предназначен для файловых систем, монтируемых автоматически, а первый --- для монтируемых вручную. Посмотрим на содержимое диска:

$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 по-прежнему содержит хранилище пакетов, а документация на этот раз попала в Documentation. Каталог isolinux отвечает за загрузку с CD/DVD --- это часть пакета syslinux, который может обеспечить загрузку с самых разнообразных "источников". Обратим внимание и на файл altinst --- он тоже содержит файловую систему, но не iso9660, а squashfs. В этой файловой системе размещен установщик располагающегося в подмонтированном файле-образе дистрибутива. Основные причины, по которым установщик помещен в squashfs, таковы. Эта файловая система, во-первых, "упаковывает" свое содержимое, чтобы оно занимало меньше места, и, во-вторых, не обладает ограничениями iso9660 на имена файлов и права доступа к ним. (Заметим в скобках, что имена файлов в ОС Linux могут содержать любые символы, кроме /, который является разделителем каталогов, и символа с кодом 0.) Нам из содержимого диска сейчас по-прежнему требуется лишь хранилище пакетов (ALTLinux), которое копируется в нужный нам каталог так же, как и раньше.

Сделаем еще одно замечание, касающееся получения нужных нам пакетов. Есть утилита, которая качает актуальные версии пакетов из сети --- именно для создания локального хранилища. Ее применение, однако, рассматривать мы не будем, ограничившись указанием имени: sisyphus-mirror.

Перегенерация метаинформации

Если мы сейчас попробуем использовать наше хранилище, то у нас ничего не получится. Дело в том, что простое копирование пакетов не сохраняет внутренних связей. Посмотрим, какие каталоги попали в хранилище:

missing typescript

base и disk --- это названия разделов с RPM-пакетами (имена соответствующих каталогов начинаются с префикса "RPMS."). Каталог же base содержит метаинформацию (индексы) --- именно ее и следует перегенерировать. Удалим base вместе со всем содержимым:

missing typescript

А теперь воспользуемся утилитой genbasedir из пакета 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.

Обратим внимание на заключительную четверку параметров: topdir задает расположение дерева каталогов (/var/ftp/pub), за ним следует название нашего хранилища (ALTLinux), а после --- список его разделов, или компонент (base и disk). Отметим, что если хранилище входит в состав рассчитанного на несколько архитектур дистрибутива, то его название должно соответствовать имени одной из этих архитектур: i586, x86_64 и пр. Создается также хранилище noarch для не зависящих от архитектуры пакетов. Названия же разделов внутри каждого из таких хранилищ обычно отражают предназначение или "уровень стабильности" пакета, точнее говоря --- принадлежность его к той или иной ветке (типичными названиями хранилищ являются main, classic, backports). Заметим, что иногда хранилищем называют объединение каталогов, предназначенных для разных архитектур, а не каждый каталог в отдельности.

Использование хранилища

Сконфигурируем APT на "клиентских" машинах для использования созданного нами хранилища. Обратим внимание на то, что в системе есть целых два места, в каждом из которых используемые хранилища можно указывать. Первое --- это файл /etc/apt/sources.list, а второе --- все файлы каталога /etc/apt/sources.list.d. Почему так получилось? Содержимое файлов из /etc/apt/sources.list.d обычно большей частью закомментировано --- здесь удобно "включать" и "выключать" использование того или иного хранилища. Файл же /etc/apt/sources.list содержит чаще всего настройки, специфичные для локальной машины. Редактировать этот файл автоматически не всегда удобно, а потому еще в дистрибутивах Debian (из которых система APT и была заимствована) был введен каталог sources.list.d, в котором изменяющие список используемых хранилищ программы могли чувствовать себя более уверенно (в Debian Policy есть пункт, запрещающий пакетам при установке модифицировать чужие конфигурационные файлы).

Итак, впишем наше хранилище в sources.list:

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

rpm --- это тип пакетов хранилища, за ним следует адрес хранилища, а после идет имя репозитория (ALTLinux) со списком разделов (disk и base). Кстати говоря, мы так и не объяснили смысл разделения на base- и disk-составляющие. Дело в том, что скопированное нами хранилище предназначено, среди прочего, для установщика, работа по установке пакетов которым разделена на две стадии: установка базовой системы (base) и дополнительного ПО (disk). Сохранив конфигурационный файл, обновим локальные индексы:

$apt-get update

Осколки

Про жесткие ссылки

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

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

Прочие

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

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

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

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


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

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

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

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

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

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

Level

Maintainer

Start date

End date

35

1

1

1

1

PavelSutyrin, DmitryChistikov, VsevolodKrishchenko


PspoClasses/080722/01LocalRepository (последним исправлял пользователь DmitryChistikov 2008-10-18 14:04:56)