Дистрибутивный диск с FreeBSD собственной сборки
Общеизвестно, что сервер под FreeBSD крайне неприхотлив в аппаратных требованиях. Вот только хорошая слава может сыграть и дурную роль, когда при попытке установить FreeBSD на компьютер, не умеющий грузиться с USB Flash, под рукой не окажется загрузочного диска с последней версией. И тут либо ставить систему с образа стартера (bootonly.iso) и FTP, либо качать полный CD-образ disk1. Возможно ли сэкономить на трафике и создать загрузочный CD, скачав только образ стартера и дистрибутив? Да. И эта статья вам поможет.
Что дают скачать
Поведение FreeBSD Team в этом вопросе мне кажется несколько странным – можно скачать либо образ диска стартера (28 Мб), который представляет собой три загрузочные дискеты в одном образе, либо полные образы CD-дисков размером 700 Мб. Возможности скачать образ только со стартером и дистрибутивом нет. То есть для тех, у кого дорогой трафик, – качайте стартер и держите под рукой FTP-сервер для выкладки дистрибутива, для тех же, у кого безлимитное подключение, – полный образ. А как быть, если возможности скачать полный CD нет, 300 Мб трафика не оправдать, а загрузочный CD очень нужен?
Сначала смотрим, что мы можем загрузить из Интернета, например, с [1].
> cd ISO-IMAGES-i386/6.3/
> ls -la
-rw-r--r-- 1 ftpuser ftpusers 27643904 Jan 16 14:21 6.3-RELEASE-i386-bootonly.iso
-rw-r--r-- 1 ftpuser ftpusers 655071232 Jan 16 14:23 6.3-RELEASE-i386-disc1.iso
-rw-r--r-- 1 ftpuser ftpusers 724086784 Jan 16 14:25 6.3-RELEASE-i386-disc2.iso
-rw-r--r-- 1 ftpuser ftpusers 362381312 Jan 16 14:27 6.3-RELEASE-i386-disc3.iso
-rw-r--r-- 1 ftpuser ftpusers 248350720 Jan 16 14:28 6.3-RELEASE-i386-docs.iso
-rw-r--r-- 1 ftpuser ftpusers 342 Jan 16 14:29 CHECKSUM.MD5
-rw-r--r-- 1 ftpuser ftpusers 517 Jan 16 14:31CHECKSUM.SHA256
|
Полные образы СD рассматривать не будем: есть образ – нет проблем. Рассматривать будем только образ стартера – что это есть и нельзя ли на его основе создать CD полного объема с теми данными, что нам необходимы – дистрибутив, самые необходимые пакеты...
Загруженный из Интернета файл 6.3-RELEASE-i386-bootonly.iso имеет размер 27 643 904 байт и содержит внутри только каталог /boot (ну и загрузчик – файл boot.catalog). В каталоге /boot мы обнаружим ядро GENERIC со всеми модулями, loader со всеми необходимыми файлами и файл mfsroot.gz, который содержит корневую файловую систему для запуска инсталлятора – программы sysinstall. При загрузке с диска, созданного на основе этого образа, необходимо иметь внешний FTP-сервер, откуда будет закачиваться дистрибутив. Значит ли это, что для создания диска достаточно создать образ на основе стартера, к которому присоединен дистрибутив?
Вообще говоря, да. Но раз уж мы взялись создавать собственный диск, то следовало бы сделать его как можно более универсальным – пусть он заодно играет роль и Fixit-диска. Структура диска, которая должна быть создана в таком случае, будет описана дальше.
И разумеется, нам понадобится дистрибутив. Размер дистрибутива последней версии из ветки 6.х составляет 320 Мб. Дистрибутив рекомендую скачивать полностью, не экономить на отдельных пакетах. Внимательный читатель сразу же задастся вопросом: «А что содержится на втором и третьем дисках?». Для того чтобы это узнать, не обязательно закачивать весь образ – файл стандартного формата ISO9660, у которого оглавление диска находится в начале iso-файла, таким образом, чтобы узнать его содержимое, достаточно скачать первые несколько мегабайт. Но для нас там нет ничего интересного – disc2 и disc3 содержат готовые пакеты, в то время как disc1 и представляет в первом приближении то, что мы хотим получить, – комбинацию стартера, дистрибутива и Fixit-диска.
Что ж, загружаем образ стартера. Еще нам понадобится программа для работы с ISO-образами для того, чтобы сохранить и впоследствии использовать загрузчик. Я использую isomaster (sysutils/isomaster). Это программа, построенная на GTK, а не на KDE, но, к сожалению, в настоящий момент ничего рабочего для редактирования ISO-образов в KDE нет (Kiso не в счет, он присутствует номинально, потому что пользоваться им невозможно).
Структура диска
Для того чтобы создать диск, необходимо сначала сформировать в системе каталог, с которого будет создаваться образ нашего диска. Допустим, берем каталог /var/tmp/image и начинаем заполнять его нужными файлами.
Первым делом помещаем туда распакованный образ стартера. Для этого запускаем isomaster, выбираем образ стартера, открываем его, выделяем все файлы и извлекаем их. Файлы всегда извлекаются в текущий каталог, так что позаботьтесь о том, чтобы на него были необходимые права.
После этого копируем в этот же каталог дистрибутив, прямо в корень. Каталог с дистрибутивом должен иметь фиксированное имя, соответствующее версии FreeBSD, например, каталог с дистрибутивом 6.3-RELEASE должен так и называться – 6.3-RELEASE.
Помещаем в корень выбранного каталога подкаталог tools. Поскольку он не распространяется с дистрибутивом, его необходимо отдельно загрузить, можно тоже с [1] или с какого-либо его зеркала. Каталог с подкаталогами удобно загружать с помощью программы ncftp (ftp/ncftp3):
# ncftp ftp.freebsd.org
Connecting to ftp.freebsd.org...
ftp.FreeBSD.org NcFTPd Server (licensed copy) ready.
Logging in...
You are user #210 of 800 simultaneous users allowed.
Logged in anonymously.
Logged in to ftp.freebsd.org.
Current remote directory is /.
ncftp / > cd pub/FreeBSD/
ncftp /pub/FreeBSD > get -RT tools
tools/00_index.txt: 828,00 B 2,01 kB/s
tools/README.TXT: 737,00/714,00 B 1,87 kB/s
...
|
Размер его небольшой – 2 Мб. Копируем в корень выбранного каталога подкаталог floppies из дистрибутива и все текстовые и HTM-файлы, находящиеся в корне. Собственно, после этого формирование образа для инсталляционного диска можно считать законченным и переходить к его записи, дальнейшие файлы необходимы только для Fixit.
Для Fixit же потребуется полная копия всей структуры каталогов. Некоторые каталоги достаточно переписать с установленной системы – /bin, /lib, /libexec, /root, /sbin. Только необходимо проследить, чтобы в каталоге /root не осталось информации о паролях, логинах, адресах и т. д. – созданный диск может передаваться другим людям, копироваться и т. д., и нужно быть очень внимательным, чтобы вместе с ним не ушла какая-нибудь закрытая информация. Для создания необходимой минимальной структуры каталога /var можно воспользоваться mtree-файлом, который используется в бездисковых роутерах для создания /var в памяти:
# /usr/sbin/mtree -deU -f /etc/mtree/BSD.var.dist -p /var/tmp/image/var
Также в корне диска следует создать символическую ссылку sys на /usr/src/sys. Какие каталоги нам осталось здесь разместить? Конечно же, /etc. Каталог /etc можно целиком переписать из /usr/src/etc, правда с некоторыми доработками – нам не понадобятся все каталоги с именем вида etc.<архитекутра>, где <архитектура> не совпадает с архитектурой вашего компьютера. Каталог же etc.<ваша_архитектура> тоже не понадобится сам по себе, но из него нужно переписать в etc файл ttys. Кроме этого, не понадобится каталог sendmail – все его содержимое необходимо переписать в mail.
Понадобится также создать несколько пустых каталогов, которые, тем не менее, должны присутствовать в корневой системе образа – /dev, /mnt, /proc, /tmp.
Каталог rescue заслуживает отдельного замечания. Если зайти в него через mc и выделить все файлы, то можно увидеть совершенно невообразимую цифру в 420 Мб, между тем как обычная команда du убеждает нас в том, что mc считает неправильно:
# du -s rescue
6432 rescue
|
В чем же дело? А дело в том, что все файлы в каталоге – это жесткие ссылки (hardlinks) на один-два файла (более подробную информацию о том, что такое жесткие ссылки и чем они отличаются от обычных, символических, можно получить в man ln). Можно подсчитать и точное число. Для этого используется команда:
# cd /resque && ls -il | awk '{print $1}' | sort | uniq
10
6
7
90
|
Выведенные числа – это номера i-nodes-файлов. Как видно, на самом деле в каталоге всего 4 файла, а остальные ссылаются на эти же файлы. Поэтому обычно в инсталляционный CD этот каталог не помещают, только в DVD, в котором достаточно места, чтобы разместить все файлы отдельно (в этом случае он займет как раз 420 Мб).
Ну и последнее, что нам остается сделать, – разместить в образе диска каталог /usr. В нем должны присутствовать каталоги bin, include, lib, libdata, libexec, sbin и share, которые можно переписать непосредственно с установленной системы, а также пустые каталоги local, obj и src. Также необходимо переписать в корень образа (который потом станет корнем диска) файлы *.HTM и *.TXT, COPYRIGHT и docbook.css из дистрибутива.
А вот теперь можно и доработкой под свои нужды заняться. Созданный нами образ не занимает полных 700 Мб, жалко будет просто так переводить пустое место, поэтому на свободное место можно положить заранее собранные самые необходимые пакеты. Можно это сделать стандартным путем – создать в корне образа каталог packages, в нем – каталог All, куда, собственно, и положить все пакеты, а также каталоги с именами категорий, в которые входили порты, по которым эти пакеты были собраны. В этих каталогах можно разместить символические ссылки на пакеты. Но если хочется использовать стандартный пункт меню Install pre-packaged software, то в корне каталога packages необходимо создать файл INDEX, по формату совпадающий с файлом INDEX в /usr/ports. Как создать этот файл? Простейшим способом является перенос нужных строк из /usr/ports/INDEX или (если пакетов много) скачать INDEX с FTP и удалить ненужные. Можно воспользоваться программой portindex (ports-mgmt/p5-FreeBSD-PortIndex), которая позволяет проиндексировать часть каталога портов и заранее подготовить индексный файл. Можно, конечно, ничем таким не заниматься, а создать любой каталог в любом месте файловой системы образа и переписать туда все пакеты, которые вы считаете необходимыми. Я обычно укладываю туда только пакеты, необходимые для установки mc, а также любимый текстовый редактор. Ну и, разумеется, кроме пакетов можно здесь же разместить архив конфигурационных файлов, скриптов, данных и т. д, – всего, что может понадобиться для установки новой системы.
Создание и запись образа
Дело за малым – создать загружаемый образ и записать его на диск. Для этого нам сначала понадобится файл загрузчика. Получить его можно из образа стартера той же программой isomaster, которой мы ранее воспользовались для распаковки образа стартера.
Запускаем isomaster, открываем образ стартера. В меню, в пункте «Tools», выбираем «Boot record > Save as» и сохраняем как файл, например, с именем cdboot.bin. Ну и приступаем непосредственно к формированию образа. Для этого понадобится программа для записи CD, умеющая самостоятельно формировать загрузочные диски. Я использую для этой цели k3b.
Запускаем k3b, выбираем «New data CD project» и нажимаем кнопочку для модификации настроек загрузчика образа (см. рис. 1).
Рисунок 1. Вызов диалога настроек загрузчика образа
Появляется окно с настройками загрузчика. Изначально в нем пусто – мы же не сделали еще никаких настроек. Нажимаем «New», выбираем файл cdboot.bin, который только что сохранили. Окно с длинным предупреждением о том, что «этот файл не является допустимым образом для эмуляции загрузки с флоппи-диска...» пропускаем, выбираем внизу кнопку «Use no emulation». Впрочем, тип эмуляции всегда можно сменить. Окно настроек загрузчика теперь имеет вид, как показано на рис. 2.
Рисунок 2. Вид окна настроек загрузчика образа после выбора
После этого в образе автоматически появляется каталог boot. Удалить его оттуда нельзя – он нужен для загрузки. Ну и теперь открываем каталог с подготовленным образом, берем файлы и папки и с помощью мышки перетаскиваем их в проект. Следите за индикатором в нижней части – он показывает, сколько еще свободного места осталось в образе. После того как образ сформирован, нажимаем кнопку «Burn» и ждем окончания записи диска.
Вот и все.
Заключение
Мы не только сэкономили 300 Мб трафика работодателю. Мы собрали загрузочный дистрибутивный диск с теми пакетами, программами, данными и т.д, которые необходимы нам. Особенно это ценно тогда, когда выезжаешь с этим диском в командировку – на одном диске уместятся все необходимые материалы.
Приложение
Текущaя версия FreeBSD
В настоящий момент активная разработка ветки 6.x прекращена и она переведена в состояние legacy (устаревшая). В нее вносятся только исправления ошибок, относящиеся к безопасности. Текущей версией сейчас является 7.0-RELEASE. Но я всегда с недоверием относился к релизам «дот-зеро» (так называются релизы, оканчивающиеся на «0»), поэтому использую 6.3. В ветке 7.x множество нововведений, но нас касается сейчас только то, что там появился еще один образ – livefs.iso размером 215 Мб, который представляет из себя именно то, что в названии – Live CD.
- Основной FTP-сервер для загрузки дистрибутивов FreeBSD – ftp://ftp.freebsd.org/pub/FreeBSD.