Различия между версиями 1 и 18 (по 17 версиям)
Версия 1 от 2008-07-23 12:25:21
Размер: 8293
Редактор: eSyr
Комментарий:
Версия 18 от 2008-08-21 00:26:24
Размер: 23753
Редактор: VsevolodKrishchenko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 3: Строка 3:
Первая тема связана вот с чем. Дпустим, у нас есть машина (сервер), которая содержит дивидюк, есть ПСП, в котором на целом дивидюке мастер или терминал, или вы привезли полностью школьный бранч, или ветку 4.0, кроче говоря, какй-то набор пакетов, адекватных данному дистрибутиву. Есть такой сервер, на который вы всё свалили, если дивидюк, то переписали, или ,если бран, то несклько дивидюкв повставляли. И вы хотите польхзваться этим набором как хранилищем. Первый способ --- зарегистрировать этот дивидюк как дивидюк с хзранилищем, во время инст. Этт путь плох одним --- а если на машине нет дивидюка? Путь втрой --- раскомментировать соотв. настройки в /etc/apt/sources.list.d/ и ходить в интернет за пакетами. Ходить в интернет стоит денег, иногда его нет, и интернет бывает медленный. Как правило, либо эт медленно, либо это денег стоит. Есть исключение в виде города Мсквы, но, в общем, так. Что касается школ, то в них этт интернет бывает либ не всегда, либо так... Есть третий путь: предлп., есть жти дивидюки, предп., свалил я их на диск большой машины, которую назвал сервером. Ещё вариант --- привезли бранч, и потом по тощему каналу его обновляете. Есть ещё такой вариант, когда ... . Начнём с ситуации такой: пришёл псп, есть компы без дивидюка, и хотите отдавать дивидюк с мастером. === Централизованный доступ к репозиториям ===
Строка 5: Строка 5:
Маленькая хитрость про маунт: можно смонтировать образ (если дивидюка нет, а есть хард с образм): mount -o loop . братите внимание, что команда маунт сама определила тип файловй системы в образе. На самом диске не так и много: есть каталог ALTLinux, есть каталог с документацие, есть директрия isolinux для загрузки с дивидюка. братите внимание, что в корне лежит самый большой файл altinst, эт опять же образ, в ктором установщик со своими файлами. Почему так? Потому что во-первых, она упакована, в-вторых, iso9660 имеет очень мнго ограничений, в тм числе на имена файлв и их длину. Поэтму намнго проще закатать туда браз с нрмальной ФС. Мы к этму вернёмся при установке по сети. Допустим, у нас есть несколько компьютеров с установленным дистрибутивом из числа ПСПО ALT Linux. Пусть у нас также имеется один или несколько DVD-дисков с ПСПО. Рассмотрим, какие устанавливать дополнительное программного обеспечения из состава ПСПО или из дополнительных репозиториев с минимальными усилиями.
Строка 7: Строка 7:
Придумаем, каким способом будем раздавать этт диск? По ftp. Чтобы в альте эт организовать, над поставить два пакета: ftp-сервер (vsftpd) и анонимный доступ. Дел в том, что в альте, традиционн уделяющему мнго внимания безопасеости, есть мног защиты от дурака, чтобы если человек поставил ftp-сервер, то не начало оно сразу раздавать всё с анонимусом, да и на запись. Поэтму надо поставить anonftpd, который дбавляет один файл, /var/ftp, после чего оно начинает нормально работать. Нужн проделать ещё три упражнения:
 * Нужно включить сам метадемон inetd: chkconfig xinetd on
 * Нужно включить сам vsftpd: chkconfig vsftpd on
 * В этом же файле (/etc/xinetd.conf) надо проверить, чтобы оно было не только для 127.0.0.1 (можно и нужно закомментировать эту строчку)
После чего можно зайти на ftp: lftp localhost
Очевидный вариант --- зарегистрировать все имеющиеся диски как носители, содержащие хранилища пакетов (для этого служит команда apt-cdrom add), а так же использовать настройки в каталоге /etc/apt/sources.list.d/ и ходить за дополнительными пакетами в Интернет. Это позволит использовать наши пакеты на каждом компьютере, в котором есть DVD-привод и подключение к интернет. Недостатки очевидны --- пакеты скачиваются из интернета столько раз, на сколько компьютеров они устанавливаются, кроме того нужно иметь на каждом копьбтере DVD-привод и не ленится вставлять и вынимать диски с ПСПО в каждый компьютер, что является достаточно непродуктивной тратой времени.
Строка 13: Строка 9:
При работе с ftp исп. следующая дисц.: в каталоге ftp должен пдкаталог pub, где нахдятся публичные файлы. В дкументации по серверу ftp мжно прчитать много про настройку доступа пользователей. Если интернет безлимитный и достаточно быстрый, а компьютеров с ПСПО не очень много, то можно заставить ПСПО ходить за любыми пакетами в интернет, не используя установочные диски. Однако, безлимитного и быстрого доступа в интернет может и не быть, и с административной точки зрения это выглядит скорее обходом проблемы, чем ее решением. Еще одной полумерой является использование кеширующего HTTP-прокси и для доступа к репозиториям через HTTP. Можно использовать как обычный HTTP-прокси, так и специальные программы, предназначенные для кеширования репозиториев. Однако и этот подход трубует наличия подключения к интернету и не поможет, если мы хотим взять репозиторий с диска.
Строка 15: Строка 11:
Вообще говоря, уже сейчас можно этт каталог делать доступным в качестве хранилища нашего класса. Дступ по ftp сейчас разрешён... Самым правильным способом решения стоящей задачи будет организация на одной из машин локального хранилища пакетов. Этот вариант позволяет переписать все нужные пакеты на эту машину и в дальнейшем, при наличии, например, небыстрого, но бесплатного Интернета, обновлять их до актуальных версий. Отметим, что если про некоторые пакеты и группы пакетов заранее известно, что использоваться они не будут, то при обновлении их можно исключить. В любом случае после организации хранилища все машины могут обращаться за пакетами именно к этому хранилищу после настройки их /etc/apt/sources.list.d/.
Строка 17: Строка 13:
В системе есть условно два места --- sources.list.d, где лежат уже готовые файлы, а другое --- sources.list, который является блее правильным местм для вписывания чего угодно. Туда пишем: Итак, будем рассматривать последний вариант. Его реализация разбивается на три этапа.

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

## 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 было отправлено сообщение о произведенном монтировании. Слушающая эту шину программа-робот произвела анализ полученной информации и дала команду открыть ассоциированный файловый браузер, который и показал нам содержимое диска. Обратим внимание на то, как была смонтирована размещенная на носителе файловая система:

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

Заметим, что точка монтирования могла оказаться другой (к примеру, /media/hdc). Впрочем, для нас это принципиальной важности не имеет. Скопируем, получив права суперпользователя, находящееся в подкаталоге 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, потому что последний предназначен для файловых систем, монтируемых автоматически, а первый --- для монтируемых вручную. Посмотрим на содержимое диска:

{{{
# 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) --- оно копируется в нужный нам каталог так же, как и раньше.

 ''Я не уверен насчет корректности сочетания '''содержит файловую систему'''. Может быть, лучше '''содержит образ файловой системы'''?'' -- DmitryChistikov <<DateTime(2008-08-20T00:23:52+0400)>>

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

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

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

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

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

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

А теперь воспользуемся утилитой 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). Отметим, что если хранилище входит в состав рассчитанного на несколько архитектур дистрибутива, то его название обычно соответствует имени одной из этих архитектур: i586, x86_64 и пр. Создается в таком случае также хранилище noarch для не зависящих от архитектуры пакетов. Названия разделов внутри каждого из таких хранилищ обычно отражают принадлежность его к той или иной ветке (типичными названиями являются main, classic, backports). Заметим, что иногда хранилищем называют объединение всех каталогов, предназначенных для разных архитектур, а не каждый каталог в отдельности.

 ''А про ветку я правильно вписал?'' -- DmitryChistikov <<DateTime(2008-08-20T00:29:27+0400)>>

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

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

 ''Я совсем не специалист по Debian и мог где-то ошибиться в формулировке --- надо проверить.'' -- DmitryChistikov <<DateTime(2008-08-20T00:23:52+0400)>>

Итак, впишем наше хранилище в sources.list, добавив туда строку вида:
Строка 22: Строка 124:
Почему disk и base? Это дже устанвщик, у нег есть две стадия --- базовая система (base) и всякие дополнительные пакеты (disk). rpm --- это тип пакетов, за ним следует адрес хранилища (мы пропустили разделяющее их необязательное поле --- идентификатор ключа цифровой подписи в прямых скобках), а после идет имя репозитория (ALTLinux) со списком разделов (disk и base). Кстати говоря, мы так и не объяснили смысл разделения хранилища (в данном случае) на base- и disk-составляющие. Дело в том, что скопированное нами хранилище предназначено, среди прочего, для установщика, чья работа по установке пакетов разделена на две стадии: установка базовой системы (base) и дополнительного ПО (disk). Каждая из этих стадий использует свой раздел хранилища.
Строка 24: Строка 126:
Мы сейчас по-тупому скопирвали реп. с диска, а, вобще говоря. мы могли нарушить его структуру. Давайте его пересодерём. Для этого надо установить пакет apt-utils, и сказать genbasedir --topdir=/var/ftp/pub/ ALTLinux base disk --progress Сохранив конфигурационный файл, обновим локальные индексы:
Строка 26: Строка 128:
После этой небыстрой операции поробуем ещё раз: failed to open file. Это было из-за того, что мы делали хардлинки, и genbasedir ругался на то, чт количеств хардлинков больше одного. {{{
# apt-get update
}}}
Строка 28: Строка 132:
В итоге, можно свалить кучу пакетв, genbasedir генерирует ктаалог base, и всё рабтает.  ''Сюда бы вписать вывод apt-get update (именно после update из локального хранилища).'' -- DmitryChistikov <<DateTime(2008-08-20T00:23:52+0400)>>
Строка 30: Строка 134:
Названия репозитриев --- прсто имена каталогов, а названия разделов в неск. местах используются: ... . В больш. случаев репоз. на сервере устроен так, что там тлько одна ветка.

Между прчим, тема закрыта.
Как видим, обновление прошло успешно, что свидетельствует о корректном функционировании нашего хранилища.
Строка 39: Строка 141:
|| Готовность (%) || Продолжительность (ак. ч.) || Подготовка (календ. ч.) || Полный текст (раб. д.) || Предварительные знания || Level || Maintainer                                       || Start date || End date ||
|| 0 || 1 || 1 || 1 || || 1 || PavelSutyrin, ОльгаТочилкина, MaximByshevskiKonopko || || ||
|| Готовность (%) || Продолжительность (ак. ч.) || Подготовка (календ. ч.) || Полный текст (раб. д.) || Предварительные знания || Level || Maintainer || Start date || End date ||
|| 55 || 1 || 1 || 1 || || 1 || PavelSutyrin, DmitryChistikov, VsevolodKrishchenko || || ||

Строка 42: Строка 146:
CategoryLectures CategoryPspo CategoryMpgu CategoryUneex  CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

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

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

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

Очевидный вариант --- зарегистрировать все имеющиеся диски как носители, содержащие хранилища пакетов (для этого служит команда 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-диск с дистрибутивом. Вставим его в привод и задвинем лоток --- при запущенной "по умолчанию" графической оболочке он смонтируется и откроется обычно откроется окно с его содержимым:

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

Заметим, что точка монтирования могла оказаться другой (к примеру, /media/hdc). Впрочем, для нас это принципиальной важности не имеет. Скопируем, получив права суперпользователя, находящееся в подкаталоге 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, потому что последний предназначен для файловых систем, монтируемых автоматически, а первый --- для монтируемых вручную. Посмотрим на содержимое диска:

# 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) --- оно копируется в нужный нам каталог так же, как и раньше.

  • Я не уверен насчет корректности сочетания содержит файловую систему. Может быть, лучше содержит образ файловой системы? -- DmitryChistikov 2008-08-19 23:23:52

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

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

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

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

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

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

А теперь воспользуемся утилитой 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). Отметим, что если хранилище входит в состав рассчитанного на несколько архитектур дистрибутива, то его название обычно соответствует имени одной из этих архитектур: i586, x86_64 и пр. Создается в таком случае также хранилище noarch для не зависящих от архитектуры пакетов. Названия разделов внутри каждого из таких хранилищ обычно отражают принадлежность его к той или иной ветке (типичными названиями являются main, classic, backports). Заметим, что иногда хранилищем называют объединение всех каталогов, предназначенных для разных архитектур, а не каждый каталог в отдельности.

  • А про ветку я правильно вписал? -- DmitryChistikov 2008-08-19 23:29:27

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

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

  • Я совсем не специалист по Debian и мог где-то ошибиться в формулировке --- надо проверить. -- DmitryChistikov 2008-08-19 23:23:52

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

rpm ftp://10.30.5.1/pub ALTLinux disk base

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

Сохранив конфигурационный файл, обновим локальные индексы:

# apt-get update
  • Сюда бы вписать вывод apt-get update (именно после update из локального хранилища). -- DmitryChistikov 2008-08-19 23:23:52

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


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

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

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

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

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

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

Level

Maintainer

Start date

End date

55

1

1

1

1

PavelSutyrin, DmitryChistikov, VsevolodKrishchenko


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