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

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

## 1. Зарегистрировать все имеющиеся диски как носители, содержащие хранилища пакетов (для этого служит команда apt-cdrom add). Это позволит использовать наши пакеты на каждом компьютере, в котором есть DVD-привод.

## 1. Использовать настройки в каталоге /etc/apt/sources.list.d и ходить за пакетами в Интернет. Этот вариант не слишком хорош, так как Интернета может не быть вообще, он может быть медленным и стоить денег. Кроме того, поставленную задачу этот вариант не решает, а "обходит".

Итак, будем рассматривать последний вариант. Его реализация разбивается на три этапа:
 * добавление пакетов в хранилище;
 * обновление метаинформации хранилища;
 * настройку компьютеров на использование хранилища.

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

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

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

## Убрал картинку. По-моему, она ни к чему.
## {{attachment:../cdrom_automount.png}}

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

Скопируем, получив права суперпользователя, находящееся в подкаталоге ALTLinux содержимое хранилища пакетов. Ключ {{{-a}}} (от ''archive'') утилиты {{{cp}}} указывает на рекурсивное копирование с сохранением атрибутов файлов.
Строка 24: Строка 48:
$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
# cp -a /media/cdrom/ALTLinux/ /var/ftp/pub/
Строка 37: Строка 50:
Там не так уж много. Каталог {{{ALTLinux/}}} — хранилище пакетов, каталог с документацией — текстовые файлы с лицензией, на тот случае, если диск вставлен в компьютер с Windows, кое-что можно почитать. {{{isolinux/}}} содержит загружаемые файлы, чтобы организовать загрузку с CD/DVD, это часть пакета {{{syslinux}}}, который умеет загружаться со всего, что шевелится. Самый большой файл — это {{{altinst}}}. Он тоже является файловой системой, его тоже можно подмонтировать, внутри него находится файловая система с установщиком. Зачем так сделано?.. Во-первых, она упакована и занимает меньше места, во-вторых, файловая система {{{iso9660}}} обладает рядом ограничений на имена файлов, которых в linux нет (кстати, в именах файлов в linux могут быть любые символы, кроме {{{/}}}, который является разделителем каталогов, и символа с кодом 0), не сохраняет в нужной мере права доступа к файлам (в том числе setuid и т.п.)
Строка 39: Строка 51:
Придумаем, каким способом будем раздавать этот диск? По ftp. (допустим, подняли ftp-сервер,

 . скопировали на него все с диска). Теперь предстоит настроить клиентские места на обновление с этого сервера,

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

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

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

Что угодно можно писать и в первое место, но сюда — лучше. Туда пишем:
Первый этап на этом завершается. Вернемся, однако, назад и опишем вкратце другие способы получения пакетов. Может оказаться, что на машине-сервере вообще нет DVD-привода, а есть, к примеру, лишь переносной USB-винчестер с образом интересующего нас диска (возможно, мы скачали его по сети или получили каким-либо иным способом). Разберемся, что делать с содержащим этот образ файлом (в нем хранится записанная "как есть" файловая система). Создадим каталог `/mnt/iso`, смонтируем образ при помощи команды `mount` и скопируем его содержимое:
Строка 52: Строка 54:
#тип_пакетов [электронная_подпись] адрес название_хранилища разделы_хранилища
rpm ftp://10.30.5.1/pub ALTLinux disk base
# mkdir /mnt/iso
# mount -o loop disk_image.iso /mnt/iso
# cp -a /mnt/iso/ALTLinux/ /var/ftp/pub/
Строка 55: Строка 58:
{{{ALTLinux}}} — имя репозитория. Дальше два раздела {{{disk}}}, {{{base}}}. Почему {{{disk}}} и {{{base}}}? Это ведь настройка установщика, а у него есть две стадии работы — где ставится базовая система (base) и дополнительные пакеты, которые вы выбираете при установке (disk).
Строка 57: Строка 59:
Сохраним конфиг, сделаем В принципе, такое монтирование практически неотличимо (по результату) от монтирования файловой системы с диска из привода. Обратим внимание, что команда mount сама определила тип файловой системы (`iso9660`), который мы могли бы указать и явно, с помощью специального ключа (`-t iso9660`). Для монтирования мы использовали каталог `/mnt` вместо `/media`, потому что последний предназначен для файловых систем, монтируемых автоматически, а первый --- для монтируемых вручную. Теперь в в каталоге `/mnt/iso` видно все содержимое диска:
Строка 60: Строка 62:
$apt-get update $ ls -lh /mnt/iso
total 107M
-r--r--r-- 1 root root 56M 2008-06-11 14:08 altinst
dr-xr-xr-x 5 root root 2.0K 2008-06-11 14:11 ALTLinux
dr-xr-xr-x 14 root root 4.0K 2008-06-11 14:11 Documentation
dr-xr-xr-x 3 root root 6.0K 2008-06-11 14:11 isolinux
-r--r--r-- 1 root root 8.3K 2008-06-07 13:54 license.ru.txt
-r--r--r-- 1 root root 3.7K 2008-06-07 13:54 license.txt
dr-xr-xr-x 2 root root 2.0K 2008-06-11 14:10 Metadata
-r--r--r-- 1 root root 52M 2008-06-11 14:07 rescue
-r--r--r-- 1 root root 205K 2008-06-07 13:54 RPM-GPG-KEY
Строка 62: Строка 74:
Видно, что он пытается его прочитать, но не находит подписи (signatures).
Строка 64: Строка 75:
==== Перегенерация структуры ==== ## Мы использовали образ другого диска, так что список файлов отличается от виденного нами ранее.
Каталог `ALTLinux`, как и ранее, содержит хранилище пакетов, а вот документация на этом диске находится в каталоге `Documentation`. Каталог `isolinux` отвечает за загрузку с CD/DVD --- это часть пакета `syslinux`, поддерживающего множество самых разнообразных источников начальной загрузки. Файл `altinst` содержит образ файловой системы, но не iso9660, а squashfs. В этой файловой системе размещен установщик нашего дистрибутива. Основных причин, по которым он помещен в squashfs, две. Данная файловая система, во-первых, "упаковывает" свое содержимое, чтобы оно занимало меньше места, и, во-вторых, не обладает ограничениями iso9660 на имена файлов и права доступа к ним. (Заметим в скобках, что имена файлов в ОС Linux могут содержать любые символы, кроме косой черты `/`, которая является разделителем имен каталогов, и символа с кодом 0.) Для выполнения нашей задачи из содержимого диска требуется лишь хранилище пакетов в каталоге `ALTLinux` --- он копируется в нужный нам каталог так же, как и раньше.
Строка 66: Строка 78:
Мы сейчас по-тупому скопировали репозиторий как набор файлов с диска, а, вообще говоря, мы могли нарушить его структуру. Давайте его пересоберём, этот репозиторий. Для этого надо установить пакет {{{apt-utils}}}, и сказать Сделаем еще одно замечание, касающееся получения нужных нам пакетов. Есть специальная утилита `sisyphus-mirror`, предназначенная для скачивания хранилищ пакетов из сети. В случае хорошей ширины канала и невысокой цены трафика (а лучше --- безлимитного доступа в Интернет), разумно для создания и обновления локального хранилища использовать именно ее. Рассматривать применение этой утилиты мы, однако, не будем, ограничившись отсылкой к документации.
Строка 68: Строка 80:
=== Генерация метаинформации хранилища ===

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

{{{
# ls /var/ftp/pub/ALTLinux
base RPMS.base RPMS.disk
}}}

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

{{{
# rm -rf /var/ftp/pub/ALTLinux/base
}}}

Установим пакет apt-utils:
{{{
# apt-get install apt-utils
}}}

А теперь воспользуемся утилитой {{{genbasedir}}} из пакета `apt-utils` для перегенерации метаинформации:
Строка 80: Строка 113:
Указаны три параметра: расположение дерева каталогов (URL), затем название хранилища ({{{ALTLinux}}}), затем названия разделов {{{disk}}}, {{{base}}}. Обратим внимание на заключительную четверку параметров: `topdir` задает расположение дерева каталогов (`/var/ftp/pub`), за ним следует название нашего хранилища (`ALTLinux`, совпадает с именем каталога), а после --- список его разделов, или компонент (`base` и `disk`).
Строка 82: Строка 115:
Если репозиторий входит в состав дистрибутива, рассчитанного на несколько архитектур, то ветки его будут соответствовать архитектурам (x86_64, i586, и т.п.),
а также будет ветка noarch, где лежат пакеты, не зависящие от архитектуры. Поэтому двухуровневое именование: имя репозитория, а внутри названия разделов его.
Объясним смысл разделения хранилища (в данном случае) на составляющие `base` и `disk`. Дело в том, что скопированное нами хранилище предназначено, среди прочего, для установщика, чья работа по установке пакетов разделена на две стадии: установка базовой системы (`base`) и дополнительного ПО (`disk`). Каждая из этих стадий использует свой раздел хранилища.
Строка 85: Строка 117:
(Как-то раз мы попробовали скопировать репозиторий с жесткого диска, с помощью команды {{{cp -l}}}, и вот что получилось. Дело в том, что {{{cp -l}}} создаёт дерево каталогов, населяя их преимущественно
жесткими ссылками на файлы-источники, а фактическое копирование она производит
только если жесткую ссылку создать нельзя, например если это разные файловые
системы или если происходит копирование директорий. Такое копирование может делаться очень быстро в пределах одной файловой системы.
Отметим, что если хранилище входит в состав рассчитанного на несколько архитектур дистрибутива, то его название обычно соответствует имени одной из этих архитектур: `i586`, `x86_64` и пр. Создается в таком случае также хранилище noarch для не зависящих от архитектуры пакетов. Названия разделов внутри каждого из таких хранилищ обычно отражают принадлежность его к той или иной группе пакетов в пределах одной ветки (по назначению). Типичными названиями разделов являются:
 * `classic` --- основное хранилище;
 * `updates` --- обновления пакетов;
 * `backports` --- новые версии программ для старого дистрибутива.
Строка 90: Строка 122:
Однако, впоследствии умный {{{genbasedir}}} выругался на то,что количество хардлинков больше одного (т.е., он-то сейчас файл включит в индекс, а вдруг его потом кто-то изменит, пользуясь другим именем с другими правами?.. Лучше так не делать.) Заметим, что иногда хранилищем называют объединение всех каталогов, предназначенных для разных архитектур, а не каждый каталог в отдельности.
Строка 92: Строка 124:
Итак, вы ставите FTP-сервер, подкладываете ему содержимое нашего DVD-диска, и даже любые другие пакеты, все это можно сложить в кучу, на неё натравить {{{genbasedir}}}, которые генерирует правильный каталог с индексами {{{base}}}, и на клиентской машине это хранилище стало доступно. Значит, на всех клиентских машинах этот сервер можно объявить в качестве хранилища и вуаля: каким бы способом вы ни ставили ПО на клиентские машины, обновляться и делать многое другое можно не из интернета, а с этого самого сервера. === Использование хранилища ===
Строка 94: Строка 126:
Названия репозиториев --- просто имена каталогов. Название репозитория ({{{ALTLinux}}}) — это просто название каталога, в котором формируется соответствующее дерево, а имена разделов упоминаются в нескольких местах структуры хранилища. Третий этап нашей работы заключается в настройке клиентских машин. Сконфигурируем на них APT для использования созданного нами хранилища. Обратим внимание, что в системе есть целых два места, в каждом из которых используемые хранилища можно указывать. Первое --- это файл {{{/etc/apt/sources.list}}}, а второе --- все файлы каталога {{{/etc/apt/sources.list.d}}}. Поясним, для чего такое разделение предназначено. Большая часть содержимого файлов в каталоге `sources.list.d` обычно закомментирована --- здесь удобно "включать" и "выключать" использование того или иного хранилища. Файл же `sources.list` чаще всего содержит настройки, специфичные для локальной машины. Редактировать этот файл автоматически не всегда удобно, а потому еще в дистрибутивах Debian (из которых система APT и была заимствована) был введен каталог {{{sources.list.d}}}. Изменяющие список используемых хранилищ программы могли добавлять или изменять файлы в нем и только таким образом менять список репозиториев, поскольку в Debian Policy есть пункт, запрещающий пакетам при установке модифицировать чужие конфигурационные файлы.
Строка 96: Строка 128:
В большинстве случаев, дистрибутив на сервере устроен в виде набора репозиториев с одной веткой в каждом.

## 00:57:16 (дальше в 080722 -- сетевая загрузка, развертывание класса). (pause)

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

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

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

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

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

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

В ПСПО при запущенной графической оболочке все монтируется автоматом и нам не
нужно ничего больше делать. Это соответствует некоторой автоматически
выполняемой команде {{{mount}}}. Через HAL достаётся имя тома, по DBUS
кидается
наверх сообщение "тут что-то смонтировали", если на DBUS'е сверху сидит
программа, которая это слушает, она открывает ассоциированный с этим делом
файловый браузер, который показывает содержимое. Да, это робот, но, по крайней
мере, он сборно-разборный, известно, что внутри. Посмотрим, как
смонтировалось:
Итак, впишем наше хранилище в {{{/etc/apt/sources.list}}}, добавив туда новую строку (в силу простоты задачи воспользуемся командой echo):
Строка 131: Строка 130:
$ mount
  (...)
/dev/hdc on /media/cdrom type iso9660 (ro,noexec,nosuid,nodev,utf8,user=saj)
# echo 'rpm ftp://172.16.0.1/pub ALTLinux disk base' >> /etc/apt/sources.list
Строка 136: Строка 133:
Точка монтирования может оказаться другая, например {{{/media/hdc}}}, но это не суть важно. Рассмотрим подробнее строку {{{rpm ftp://172.16.0.1/pub ALTLinux disk base}}}.
 * `rpm` --- это тип пакетов (в ПСПО используются только rpm-пакеты)
 * `172.16.0.1` --- адрес машины с хранилищем, у вас он модет быть другой;
 * `ALTLinux` --- имя репозитория, `disk` и `base` --- спискок разделов.
После типа пакетов может идти необязательное поле идентификатора ключа цифровой подписи в прямых скобках, здесь это поле не используется.
Строка 138: Строка 139:
Из-под {{{root}}}'а копируем пакеты с диска:
Теперь обновим локальные индексы:
Строка 141: Строка 141:
# cp -a /media/cdrom/ALTLinux/ /var/ftp/pub/ # apt-get update
Get:1 ftp://172.16.0.1 ALTLinux release [541B]
Fetched 2217B in 0s (3932B/s)
Get:2 ftp://172.16.0.1 ALTLinux/disk pkglist [144kB]
Get:3 ftp://172.16.0.1 ALTLinux/disk release [123B]
Get:4 ftp://172.16.0.1 ALTLinux/base pkglist [487kB]
Get:4 ftp://172.16.0.1 ALTLinux/base release [123B]
Fetched 631kB in 1s (340kB/s)
Reading Package Lists... Done
Building Dependency Tree... Done
Строка 144: Строка 153:
После этого необходимо сказать genbasedir. Тут три параметра: месторасположение. хранилища, название и его разделы.

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

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

Централизованный доступ к репозиториям

Допустим, у нас есть несколько компьютеров с установленным дистрибутивом из числа ПСПО ALT Linux. Пусть у нас также имеется один или несколько DVD-дисков с ПСПО. Рассмотрим, как устанавливать дополнительное программное обеспечение из состава ПСПО или из дополнительных репозиториев (из "школьной ветки", она же "school branch") с минимальными усилиями.

Очевидный вариант --- зарегистрировать все имеющиеся диски как носители, содержащие хранилища пакетов (для этого служит команда apt-cdrom add), а так же использовать настройки в каталоге /etc/apt/sources.list.d/ и ходить за дополнительными пакетами в Интернет. Это позволит использовать наши пакеты на каждом компьютере, в котором есть DVD-привод и подключение к интернет. Недостатки очевидны --- пакеты скачиваются из интернета столько раз, на сколько компьютеров они устанавливаются, кроме того нужно иметь на каждом компьютере DVD-привод и не лениться вставлять и вынимать диски с ПСПО в каждый компьютер, что является достаточно непродуктивной тратой времени.

Если интернет безлимитный и достаточно быстрый, а компьютеров с ПСПО не очень много, то можно заставить ПСПО ходить за любыми пакетами в интернет, не используя установочные диски. Однако, безлимитного и быстрого доступа в интернет может и не быть, и с административной точки зрения это выглядит скорее обходом проблемы, чем ее решением. Еще одной полумерой является использование кеширующего HTTP-прокси для доступа к репозиториям через HTTP. Можно использовать как обычный HTTP-прокси, так и специальные программы, предназначенные для кеширования репозиториев. Однако и этот подход требует наличия подключения к интернету и не поможет, если мы хотим взять репозиторий с диска.

Самым правильным способом решения стоящей задачи будет организация на одной из машин локального хранилища пакетов. Этот вариант позволяет переписать все нужные пакеты на эту машину и в дальнейшем, при наличии бесплатного доступа в интернет, обновлять их до актуальных версий. Отметим, что если про некоторые пакеты и группы пакетов заранее известно, что использоваться они не будут, то при обновлении их можно исключить. В любом случае после организации хранилища все машины могут обращаться за пакетами именно к этому хранилищу после настройки их /etc/apt/sources.list.d/.

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

  • добавление пакетов в хранилище;
  • обновление метаинформации хранилища;
  • настройку компьютеров на использование хранилища.

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

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

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

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

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

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

# mount /media/cdrom

Скопируем, получив права суперпользователя, находящееся в подкаталоге ALTLinux содержимое хранилища пакетов. Ключ -a (от archive) утилиты cp указывает на рекурсивное копирование с сохранением атрибутов файлов.

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

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

# mkdir /mnt/iso
# mount -o loop disk_image.iso /mnt/iso
# cp -a /mnt/iso/ALTLinux/ /var/ftp/pub/

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

$ ls -lh /mnt/iso
total 107M
-r--r--r--  1 root root  56M 2008-06-11 14:08 altinst
dr-xr-xr-x  5 root root 2.0K 2008-06-11 14:11 ALTLinux
dr-xr-xr-x 14 root root 4.0K 2008-06-11 14:11 Documentation
dr-xr-xr-x  3 root root 6.0K 2008-06-11 14:11 isolinux
-r--r--r--  1 root root 8.3K 2008-06-07 13:54 license.ru.txt
-r--r--r--  1 root root 3.7K 2008-06-07 13:54 license.txt
dr-xr-xr-x  2 root root 2.0K 2008-06-11 14:10 Metadata
-r--r--r--  1 root root  52M 2008-06-11 14:07 rescue
-r--r--r--  1 root root 205K 2008-06-07 13:54 RPM-GPG-KEY

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

Сделаем еще одно замечание, касающееся получения нужных нам пакетов. Есть специальная утилита sisyphus-mirror, предназначенная для скачивания хранилищ пакетов из сети. В случае хорошей ширины канала и невысокой цены трафика (а лучше --- безлимитного доступа в Интернет), разумно для создания и обновления локального хранилища использовать именно ее. Рассматривать применение этой утилиты мы, однако, не будем, ограничившись отсылкой к документации.

Генерация метаинформации хранилища

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

# ls /var/ftp/pub/ALTLinux
base  RPMS.base  RPMS.disk

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

# rm -rf /var/ftp/pub/ALTLinux/base

Установим пакет apt-utils:

# apt-get install apt-utils

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

Обратим внимание на заключительную четверку параметров: topdir задает расположение дерева каталогов (/var/ftp/pub), за ним следует название нашего хранилища (ALTLinux, совпадает с именем каталога), а после --- список его разделов, или компонент (base и disk).

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

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

  • classic --- основное хранилище;

  • updates --- обновления пакетов;

  • backports --- новые версии программ для старого дистрибутива.

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

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

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

Итак, впишем наше хранилище в /etc/apt/sources.list, добавив туда новую строку (в силу простоты задачи воспользуемся командой echo):

# echo 'rpm ftp://172.16.0.1/pub ALTLinux disk base' >> /etc/apt/sources.list

Рассмотрим подробнее строку rpm ftp://172.16.0.1/pub ALTLinux disk base.

  • rpm --- это тип пакетов (в ПСПО используются только rpm-пакеты)

  • 172.16.0.1 --- адрес машины с хранилищем, у вас он модет быть другой;

  • ALTLinux --- имя репозитория, disk и base --- спискок разделов.

После типа пакетов может идти необязательное поле идентификатора ключа цифровой подписи в прямых скобках, здесь это поле не используется.

Теперь обновим локальные индексы:

# apt-get update
Get:1 ftp://172.16.0.1 ALTLinux release [541B]
Fetched 2217B in 0s (3932B/s)
Get:2 ftp://172.16.0.1 ALTLinux/disk pkglist [144kB]
Get:3 ftp://172.16.0.1 ALTLinux/disk release [123B]
Get:4 ftp://172.16.0.1 ALTLinux/base pkglist [487kB]
Get:4 ftp://172.16.0.1 ALTLinux/base release [123B]
Fetched 631kB in 1s (340kB/s)
Reading Package Lists... Done
Building Dependency Tree... Done

Обновление прошло успешно, это свидетельствует о корректном функционировании нашего хранилища.


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

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

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

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

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

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

Level

Maintainer

Start date

End date

90

1

1

1

1

PavelSutyrin, DmitryChistikov, VsevolodKrishchenko


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