====== Процесс загрузки Frenzy ====== ===== Этап kernel ===== Загрузка начинается с того, что BIOS передает управление загрузчику cdboot, находящемуся в загрузочной области компакт-диска. Он в свою очередь запускает BTX loader (/boot/loader). BTX loader читает файлы конфигурации, загружает ядро и необходимые модули и отображает меню загрузки (с логотипом). Затем идет загрузка ядра и определение им устройств. В конфигурации loader-а указано, что корневую файловую систему следует монтировать из сжатого образа /boot/frenzyroot.gz. После того, как ядро было загружено, из этого образа монтируется корневая файловая система и управление передается процессу /sbin/init, запущенному оттуда. ===== Этап frenzyroot ===== Образ frenzyroot содержит несколько базовых утилит: ''cp sh test echo init mdconfig mount mount_cd9660 mount_msdosfs mount_ntfs mount_nullfs mount_unionfs umount sleep'' Также в каталоге /etc находятся некоторые необходимые файлы, в том числе специально созданные для frenzy rc-скрипты. Итак, /sbin/init запускает /etc/rc. Это нестандартный скрипт, который выполняет всю работу по начальной настройке и загрузке LiveCD. ==== 1. Поиск загрузочного устройства ==== Первым делом мы должны найти и смонтировать тот диск, с которого загружается система. Скрипт по очереди ищет файл frenzy.uzip на всех CD-ROM приводах и USB Flash дисках. Если такой файл был найден, диск с ним монтируется в каталог /Frenzy/boot. ==== 2. Монтирование сжатой файловой системы ==== Файл frenzy.uzip содержит сжатую файловую систему, которая будет использоваться в качестве корневой. Однако поскольку ее нельзя смонтировать поверх существующей корневой FS, мы поступаем следующим образом. Файловая система из frenzy.uzip монтируется в каталог /Frenzy/fs, после чего с помощью mount_nullfs поверх существующей корневой файловой системы мы монтируем из сжатого образа каталоги ''/bin, /etc, /root, /sbin, /usr, /var''. ==== 3. Установка локали ==== Подгружаем красивый шрифт и выставляем screenmap. Необходимо для того, чтобы загрузочное меню было на русском. ==== 4. Определение размера для RAM-диска ==== Определяем, какой объем памяти есть в системе. Исходя из этого, устанавливаем размер RAM-диска по умолчанию (5, 10, 25 мегабайт). ==== 5. Меню загрузчика ==== На экран выводится меню загрузчика. Устанавливаем параметры загрузки (подробное их описание смотрите [[doc:boot|здесь]]). ==== 6. Создание RAM-диска ==== Создаем RAM-диск указанного размера и монтируем его в /Frenzy/ramdisk. На RAM-диске будут храниться каталоги ''/etc, /root, /var, /mnt'' и записываемая часть ''/usr'', а также каталог для подключения модулей FEM. Создаем эти каталоги и с помощью mount_unionfs монтируем эти каталоги из RAM-диска поверх соотв. каталогов корневого каталога. Сохраняем в /etc/frenzy.boot настройки, выставленные в меню загрузчика. ==== 7. Загрузка патчей ==== Просматриваем каталог /Frenzy/boot/frenzy/conf. Если в нем содержатся скрипты с расширением .patch, выполняем их. Полезно в случае, если вы добавляете какие-то патчи для конфиг. файлов, но не хотите пересобирать сжатый образ. ==== 8. Режим загрузки toram (по выбору) ==== Если в загрузчике был выбран параметр ''toram'', то начинаем загрузку в память: * Создаем RAM-диск достаточного объема (определяется динамически в зависимости от размера файла frenzy.uzip) и монтируем его в /Frenzy/mfs * Копируем туда /Frenzy/boot/frenzy/frenzy.uzip, после чего перемонтируем /Frenzy/fs уже из этого файла. * Перемонтируем файловые системы из новой /Frenzy/fs, как описано в пункте 2. После загрузки в память CD-ROM освобождается и выдвигается лоток привода. ==== 9. Поиск разделов на жестком диске ==== Ищем разделы на жестком диске. По умолчанию все разделы монтируются в режиме "только для чтения". В меню загрузки также доступны такие опции: * **hdrw** - монтировать в режиме записи (только для FAT/UFS/EXT2FS) * **nohdmnt** - производится поиск разделов, создание точек монтирования и обновляется fstab, но сами разделы не монтируются * **nohdd** - поиск и монтирование разделов не производится. ==== 10. Режим загрузки fromhdd (по выбору) ==== Если в загрузчике был выбран параметр ''fromhdd'', то начинаем загрузку с uzip-файла или ISO-образа на жестком диске: * На каждом смонтированном разделе ищем файл ''frenzy/frenzy.uzip'' или ''frenzy/*frenzy*.iso'' * Если файл был найден, то производятся операции, описанные в пункте 8 (перемонтирование сжатого образа и каталогов) После загрузки образа с жесткого диска CD-ROM освобождается и выдвигается лоток привода. ==== 11. Модули расширения ==== * Производится поиск модулей расширения на компакт-диске и на жестких дисках в каталоге ''frenzy/fem''. Если указан параметр загрузки ''nofem'', будут загружены только модули с компакт-диска. * Каждый найденный модуль подключается к системе. После подключения файловых систем из модулей производится монтирование с помощью mount_unionfs из RAM-диска каталога ''/usr''. Затем для каждого из модулей выполняются послеустановочные операции. ==== 12. Разное ==== * Создается файл /tmp/.frenzy (наличие этого файла обрабатывается скриптами как признак загрузки с CD/Flash) * Устанавливается язык системы с помощью утилиты /usr/local/bin/frlang (язык выбирается при загрузке) * Производится восстановление резервных настроек с дискеты/жесткого диска/USB Flash/компакта (каталог frenzy/backup). Этот шаг можно отменить с помощью опции **nobackup**. И наконец, мы запускаем системный /etc/rc. ===== Этап base ===== Загрузка системных rc-скриптов почти ничем не отличается от стандартной FreeBSD. Различия следующие: 1. Часть rc-скриптов подправлена таким образом, чтобы они не запускались при наличии файла ''/tmp/.frenzy''. Это скрипты для монтирования разделов из fstab и проверки их fsck (они не нужны при загрузке с livecd, поскольку эту работу выполняют другие скрипты). 2. После загрузки всех rc-скриптов запускается скрипт ''/etc/rc.d/FRENZY'', который выполняет следующие операции: * Запуск утилиты автоопределения мыши (''/usr/local/bin/mouse-detect'') * Запуск утилиты сбора информации о системе (если при загрузке была выбрана опция **hwinfo**) * Включение автологина на первой консоли (всегда включено, если загружаться с CD/Flash) * Запуск графической оболочки (если при загрузке была выбрана опция **gui**)