The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Руководства по FreeBSD на русском" / Оглавление документа

2 Разделение пакаджей

Для 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

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

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

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

  2. Проверьте, что вы удалили каталог gen, который мог остаться от предыдужих работ. Этот каталог содержит рабочие файлы, которые будут актуальны только для текущих действий.

  3. При первом вашем прогоне лучше всего избежать копирования пакаджей и дистрибутивных файлов. Это сохранит как время, так и дисковое пространство, пока вы сможете проделать пару пробных запусков, чтобы удостовериться в том, что всё помещается, и так далее. В файле oneshot.pl задайте переменную fake в значение 1 и вместо реального копирования файлов он будет только выполнять над ними команду touch(1). Обязательно выключите эту возможность или установите переменную fake в значение 0 перед тем, как передавать получающиеся диски тому, кто будет тиражировать диски, в противном случае каталоги будут заполнены файлами с нулевыми размерами.

  4. Убедитесь, что у вас есть последняя копия файла print-cdrom-packages.sh, и он взят из соответствующего релиза.

  5. Проверьте, что зависимость XFree86 в файле scrubindex.pl имеет корректный номер версии. Вам также нужно будет проверять, что это значение правильно задано в файле doit.sh.

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

  1. Возьмите копию ports.tar.gz и распакуйте её в каталог ports отдельно от файла doit.sh и каталога scripts.

  2. Удалите каталог packages/distfiles или символические ссылки на него. В bento имеются эти символические ссылки и вы будете получать смешанные результаты, если не избавитесь от них перед обработкой.

  3. Создайте новый каталог ports/packages и скопируйте набор пакаджей из кластера построения пакаджей.

  4. Создайте новый каталог ports/distfiles и скопируйте дистрибутивные файлы из кластера построения пакаджей. ЗАМЕЧАНИЕ: если вы не хотите копировать дистрибутивные файлы, просто создайте каталог и оставьте его пустым. Этот каталог должен существовать, даже если в нём ничего нет.

Теперь мы окончательно готовы к весёлому занятию по реальному разделению пакаджей. Запускайте обработку командой ./doit.sh. Вот что она делает при первом её запуске.

  1. Создаёт список ограниченных к распространению (которые не могут находиться на главном FTP-сервере) портов.

  2. Запросит у вас, нужно ли удаление ограниченных к распространению портов. В большинстве случаев здесь вам лучше ответить (y)es.

  3. Создаёт перечень пакаджей/дистрибутивных файлов, которые не могут быть размещены на дисках.

  4. Запросит у вас разрешение на удаление пакаджей/дистрибутивных файлов, которые не размещаются на компакт-диск. В большинстве случаев здесь лучше ответить (y)es.

  5. Копирует файл INDEX из каталога ports в каталог gen. При этом она удаляет строчки портов, для которых нет пакаджей. Также проверяется наличие всех требуемых зависимых пакаджей.

  6. Создаёт список пакаджей, требуемых для размещения на каждом диске.

  7. Делает запрос на создание дисков. После генерации каждого диска она проверяет отсутствующие зависсимости, вычищает файл INDEX и создаёт файл CHECKSUM.MD5.

  8. Выполняет проверку того, что на каждом диске размещены требуемые пакаджи и выдаёт общую статистику по размерам каждого диска.

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

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в <[email protected]>.
По вопросам связанным с этой документацией, пишите <[email protected]>.
По вопросам связанным с русским переводом документации, пишите <[email protected]>.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру