 |
Для FreeBSD 4.4 было создано более 4.1 гигабайт пакетов. Это привело к проблемам для
распространения на CDROM, так как нам нужно записать как можно больше пакетов без
необходимости заставлять пользователя вставлять другой диск для поиска зависимостей.
Решением является создание ''кластеров'' близких пакетов с похожими зависимостями и
группировать их на отдельные диски. В этом разделе описывается программное обеспечение и
методология, использованная при создании таких наборов пакетов для официальных дисков
FreeBSD с релизами.
Скрипты и остальные файлы, необходимые для выполнения разделения пакетов, можно найти
в дереве CVS в каталоге ports/Tools/scripts/release. Скопируйте
этот каталог на машину с свободным дисковым пространством, достаточным для хранения 2 или
3 копий набора пакетов, который вы хотите разделить.
В этом каталоге находятся следующие скрипты:
- config
-
В этом файле находится свободное пространство на каждом диске и то, разрешено ли на
этих дисках размещать пакеты, дистрибутивные файлы или оба типа файлов одновременно.
Первая колонка содержит название диска. Оно должно быть в виде disc[0-9a-z]. На данный момент настройка выполнена на 10 дисков (4
для релиза и 6 для инструментального набора). При этом подразумевается дополнительный
диск под названием ''scratch'', куда помещаются остальные дистрибутивные файлы и пакеты,
если они больше никуда не помещаются. Вторая колонка может быть 1 или 0, где 1 означает
возможность размещения на этом диске пакетов. Третья колонка работает так же, но
контролирует размещение на этом диске пакетов. Последняя колонка отмечает количество
байтов свободного пространства на диске.
- doit.sh
-
Это рабочая лошадка. Как только все файлы будут на своих местах и всё будет полностью
настроено, этот скрипт управляет процессом разделения пакетов. Имейте в виду, что он
интерактивный, так что вам нужно присматривать за его работой. Подробности о том, что
делает скрипт, будут даны позже.
- checkdeps.pl
-
Проверяет наличие всех зависимостей по файлу INDEX и
каталогу с пакетами.
- oneshot.pl
-
Здесь происходит основное волшебство (я использую это слово с некоторой натяжкой, так
как большей частью всё решается в лоб). Имея перечень требуемых пакетов для каждого диска
и набор пакетов/дистрибутивных файлов, этот скрипт размещает пакеты или дистрибутивные
файлы по дискам вместе со всеми их зависимостями.
- print-cdrom-packages.sh
-
Этот файл является копией src/release/scripts/print-cdrom-packages.sh из релиза, над которым
вы работаете.
- scrubindex.pl
-
Этот скрипт удаляет строки из файла INDEX для отсутствующих
пакетов. Он также удаляет зависимости XFree86™.
ЗАМЕЧАНИЕ: вам нужно изменить значение переменной xdep,
чтобы обеспечить правильность номера версии.
- setup.sh
-
Это вспомогательный скрипт, используемый мною в кластере сборки пакетов для получения
копии дерева портов и соответствующего набора пакетов/дистрибутивных файлов.
Вот контрольный список того, что вам нужно будет проверить или настроить перед тем,
как продолжить.
-
Отредактируйте config, отметив количество имеющихся у вас
дисков, их размеры и собираетесь ли вы размещать на них пакеты, дистрибутивные файлы, оба
типа файлов или ничего из них.
-
Проверьте, что вы удалили каталог gen, который мог
остаться от предыдущих работ. Этот каталог содержит рабочие файлы, которые будут
актуальны только для текущих действий.
-
При первом вашем прогоне лучше всего избежать копирования пакетов и дистрибутивных
файлов. Это сохранит как время, так и дисковое пространство, пока вы сможете проделать
пару пробных запусков, чтобы удостовериться в том, что всё помещается, и так далее. В
файле oneshot.pl задайте переменную fake в значение 1 и вместо реального копирования файлов он будет
только выполнять над ними команду touch(1). Обязательно
выключите эту возможность или установите переменную fake в
значение 0 перед тем, как передавать получающиеся диски тому, кто будет тиражировать
диски, в противном случае каталоги будут заполнены файлами с нулевыми размерами.
-
Убедитесь, что у вас есть последняя копия файла print-cdrom-packages.sh, и он взят из соответствующего релиза.
-
Проверьте, что зависимость XFree86 в файле scrubindex.pl имеет корректный номер версии. Вам также нужно будет
проверять, что это значение правильно задано в файле doit.sh.
Теперь вам нужно сделать копию дерева портов, пакетов и дистрибутивных файлов из
последнего построения кластера пакетов. Посмотрите файл setup.sh в качестве рабочего примера, но здесь описано всё
необходимое.
-
Возьмите копию ports.tar.gz и распакуйте её в каталог ports отдельно от файла doit.sh и
каталога scripts.
-
Удалите каталог packages/distfiles или символические ссылки на него. В bento имеются
эти символические ссылки и вы будете получать смешанные результаты, если не избавитесь от
них перед обработкой.
-
Создайте новый каталог ports/packages и скопируйте набор пакетов из кластера
построения пакетов.
-
Создайте новый каталог ports/distfiles и скопируйте дистрибутивные файлы из кластера
построения пакетов. ЗАМЕЧАНИЕ: если вы не хотите копировать дистрибутивные файлы, просто
создайте каталог и оставьте его пустым. Этот каталог должен существовать, даже если в нём
ничего нет.
Теперь мы окончательно готовы к весёлому занятию по реальному разделению пакетов.
Запускайте обработку командой ./doit.sh. Вот что она делает при
первом её запуске.
-
Создаёт список ограниченных к распространению (которые не могут находиться на главном
FTP-сервере) портов.
-
Запросит у вас, нужно ли удаление ограниченных к распространению портов. В большинстве
случаев здесь вам лучше ответить (y)es.
-
Создаёт перечень пакетов/дистрибутивных файлов, которые не могут быть размещены на
дисках.
-
Запросит у вас разрешение на удаление пакетов/дистрибутивных файлов, которые не
размещаются на компакт-диск. В большинстве случаев здесь лучше ответить (y)es.
-
Копирует файл INDEX из каталога ports в каталог gen. При этом она удаляет
строчки портов, для которых нет пакетов. Также проверяется наличие всех требуемых
зависимых пакетов.
-
Создаёт список пакетов, требуемых для размещения на каждом диске.
-
Делает запрос на создание дисков. После генерации каждого диска она проверяет
отсутствующие зависимости, вычищает файл INDEX и создаёт файл
CHECKSUM.MD5.
-
Выполняет проверку того, что на каждом диске размещены требуемые пакеты и выдаёт общую
статистику по размерам каждого диска.
Если вам повезёт с первого раза, то все требуемые пакеты будут построены и размещены
по дискам. Всё, что вам нужно сделать, это задать в качестве значения переменной fake в 0 в файле oneshot.pl и
перезапустить ./doit.sh. При втором и последующем запусках шаги
1-5 выше будут пропускаться. Если вы хотите выполнить любые из тех шагов повторно,
обратитесь к doit.sh, чтобы выяснить, какие файлы необходимо
удалить для того, чтобы не пропустить эти этапы. Если вы хотите повторить все эти шаги,
то проще всего выполнить rm -rf gen.
К моменту успешного завершения пакеты и дистрибутивные файлы будут располагаться в
каталогах disc*, а оставшиеся файлы будут находиться в каталоге
scratch.
Что делать, если что-то происходит не так? Вот некоторые распространённые проблем и их
решения.
- Отсутствие требуемых пакетов
-
Такое часто случается. Вам нужно подождать появления нового набора пакетов, где будут
построены отсутствующие пакеты, либо попросить кого-нибудь перезапустить построение
пакетов для вас. Не пытайтесь
строить отсутствующие пакеты на собственной машине и добавлять их. Хотя вам может удастся
обойтись этим, если вы очень осторожны, все же в большинстве случаев вы, скорее всего,
пропустите какую-то маленькую деталь и простой процесс добавления одного пакета может
привести к неожиданной неработоспособности сотен остальных.
- Требуемые пакеты не помещаются
-
Такое тоже случается, и это относительно легко исправить. Просто отредактируйте файл
print-cdrom-packages.sh, перенося пакеты, пока они не станут
помещаться. Да, это итерационный процесс, и это одна из причин, по которой вы должны
включать fake в oneshot.pl, пока
не получите то, что хотите. Перезапустите ./doit.sh после того,
как внесли свои изменения.
- Требуемые пакеты располагаются не на том (или ни на каком) диске
-
Обычно это означает, что вы не добавили их в файл print-cdrom-packages.sh или разместили их не на том диске. Этот
скрипт является святым источником, по которому в целом определяется, где должен
находиться пакет. Если вы хотите обеспечить расположение пакета на определённом диске, то
это единственное место, гарантирующее требуемое вам расположение.
Если вы окончательно запутались, и не можете понять, почему всё работает неправильно и
как это исправить, то пошлите письмо в адрес Steve Price <steve@FreeBSD.org> с просьбой о
помощи.
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.
|
 |
|