главная пошаговое создание livecd что такое linux ISO образы |
Операционная система с графическим интерфейсом |
Полезное
|
ДОБРО ПОЖАЛОВАТЬ
Gentoo LiveCD изнутриВступление В этой статье описывается внутреннее устройство инсталляционного диска Gentoo Linux, позволяющего не только выполнить не только первичную установку этого дистрибутива, но и использовать его для аварийно-восстановительных работ. А также просто для начального знакомства с системой - то есть в качестве LiveCD-дистрибутива. Несмотря на привязку к конкретному дистрибутиву, и даже к определенному диапазону его версий - 1.4 (RC2-RC4), описанные здесь приемы применимы к LiveCD, построенному на базе почти любой иной Linux-системы. Часть 1. От BIOS до загрузки
Не вдаваясь в подробности устройства весьма (и - заслуженно) популярного пакета syslinux Питера Анвина (Peter Anvin), включающего isolinux, отвечающий за обеспечение загрузки с компакта, отметим только: возможности загрузки CD, выполненного с использованием isolinux, определяются содержимым одноименного каталога, который имеется на каждом LiveCD, изготовленном по этой методике. Во всех пре-релизах версии 1.4 содержание его следующее.
Опустим специальные файлы boot.cat, gentoo.lss и isolinux.bin. Посмотрим оставшиеся:
В версии 1.4-rc4 в этом каталоге дополнительном можно обнаружить файл add.msg, содержащий описание дополнительных режимов загрузки, вызываемое нажатием клавиши F3. Режимы эти - загрузка графической консоли с различными разрешениями (от 800x600 до 1280x1024), реализуемой через frame buffer, чисто текстовый режим загрузки, загрузка для SMP-конфигураций, и т.д. Соответственно, и файлов образом загрузочного RAM-диска здесь оказывается несколько
Рассматривать все разновидности initrd мы не будем. Посмотрим только на содержимое initrd. Выполнив:
получаем образ виртуального диска, который уже можно монтировать:
Смотрим, что получилось:
в /modules находим очень интересный cloop.o (но о нём - позднее) и подкаталог storage с 29 модулями scsi-контроллеров. Этот набор, кстати, определяет вероятность определения scsi в вашей конфигурации;
и, наконец, linuxrc - главный конфигурационный скрипт LiveCD-системы, который, собственно, и будет запущен на выполнение.
Именно linuxrc, как нетрудно догадаться, и становится предметом дальнейшего анализа. Назначение его - получить из LiveCD полноценную систему, поскольку при всех достоинствах busybox для полноценной работы его "маловато будет". Итак (нумерация строк дана для версии 1.4-rc2 и в более новых версиях может незначительно отличаться):
Это очень важный момент - он делает возможным в дальнейшем размонтирование инсталляционного CD, его извлечение из привода и замену; на этот момент tmpfs занимает всю свободную память, кроме занятой ядром и "иже с ним" (даже в 64-мегабайтной системе половина ОЗУ обычно попадает в tmpfs); отсюда: практически никогда не возникают трудности при копировании в память 70-мегабайтного livecd.cloop от Gentoo (и они весьма вероятны при попытке копирования, например, 700-мегабайтного KNOPPIX[.cloop] от knoppix); другое дело, что занимать всю tmpfs - неразумно (а вдруг, после загрузки ещё и сделать что-то захочется?); так что практический вывод: 128 и более Мбайт - вполне достаточно для работы опции cdcache (лично проверено - 386 Мбайт хватает с гарантией); если же CDCACHE="no" (в том числе: и из-за неудачи при попытке копировать livecd.cloop в память), то модуль cloop.o устанавливается с параметром file=/newroot/mnt/cdrom/livecd.cloop. То есть: файл - тот же, но уже не из памяти, а непосредственно с CD ROM; и, соответственно, размонтировать последний не удастся; что касается монтирования livecd.cloop, то оно выполняется точно так же, как и в предыдущем случае (l.159-160); операции копирования и создания символических ссылок (l.166-173) завершают формирование новой корневой системы; а l.181-182 окончательно делают её активной корневой; запускаемый процесс - /sbin/init, то есть - нормальная загрузка. Таков путь загрузки от BIOS до системы, подготовленной maintainer-ом для выполнения инсталляции. Что бы "улучшить"? более естественным для варианта "по умолчанию" представляется отсутствие SCSI; опция загрузки cdcache представляется совершенно не лишней; настолько, что её-то как раз и следовало бы сделать "умолчательной", и в ходе инициализации сообщать оператору: может он демонтировать CD ROM (успешное кэширование) или нет. Для этого редактируются: linuxrc в initrd и help.msg в /isolinux. Разумеется, и add.msg никто не запретит отредактировать... На уровне isolinux-livecd.cloop - всё. Разумеется, эти "возня" совершенно не обязательно предполагает "прожигание болванок". Отредактированный образ initrd прекрасно воспринимается Grub или LILO: всегда можно собственную редакцию проверить. Дальнейшее "рукоблудие" предполагает операции с livecd.cloop: исключительно. Это будет Часть 2. Углубленное потрошение Таким образом, как "образуется" подготовленная maintainer-ом система, думаю, понятно. Посмотрим теперь, что же он нам, собственно, подготовил... Любой LiveCD предполагает, что его файловая система частично находится в памяти (каталоги с динамически изменяемым содержимым - всегда, каталоги с неизменяемым содержимым - по мере возможности). Что касается первых (/proc, /var, /tmp, /home, /root etc.), то с ними всё ясно: кроме как в памяти им больше и быть негде. Что до вторых, то для обеспечения скорости доступа хорошо бы и им быть на виртуальном диске, но не всегда это возможно: потребности, как правило, обычно превосходят количество доступной RAM. И, чем дальше - тем больше. Глядишь: а для всего ПО, которое хотелось бы иметь в системе, уже и объёма CD не хватает... Само собой напрашивается желание держать это самое ПО в компрессированном виде, независимо от того, памяти или объёма CD перестало хватать. Средств компрессии - "бери - не хочу". Вот только хотелось бы декомпрессию осуществлять "на лету", на уровне ядра, скажем... Почему - нет? Начал - Поль Рассел (Paul 'Rusty' Russel), "подхватил" известный энтузиаст LiveCD Клаус Кноппер (Klaus Knopper): и вот уже все желающие могут воспользоваться пакетом cloop с сайта Knoppix. Как конечный продукт (после компиляции), пакет представляет собой три файла: модуль ядра cloop.o, осуществляющий компрессию "на лету"; утилита создания компрессированных образов create_compressed_fs; утилита декомпресии extract_compressed_fs. Сборка пакета выполняется командой: $ make KERNEL_DIR=/path/to/linux-kernel/sources Несложно догадаться, что для компиляции требуется каталог с исходниками ядра. А точнее - конфигурационный файл /usr/src/linux/.config и подкаталог /usr/src/linux/include/linux. Маленькое "но": предполагается, что ветка ядра - xfs. Работоспособный модуль cloop.o действительно был впервые построен только для ядра ветки xfs. Однако не возбраняется и использование другого ядра, например, канонической vanilla. Для использования модуля потребуются следующие команды: $ mkdir -p /lib/modules/misc && cp cloop.o /lib/modules/misc/ $ depmod -a $ mknod /dev/cloop b 240 0 Назначение команд, думается, очевидно. Модуль загружается, например, уже приводившейся командой: $ insmod /modules/cloop.o file=/newroot/mnt/cdrom/livecd.cloop где параметр file указывает на компрессированный образ. Возможен и более, так сказать, современный способ загрузки: $ modprobe cloop file=/path/to/compressed/image Впрочем, выбор между insmod или modprobe - скорее дело привычки... Доступ к файловой системе становится возможным, конечно же, после её монтирования. В рассматриваемом LiveCD это: $ mount -o ro -t ext2 /dev/cloop /newroot/mnt/cloop Что бы посмотреть, что же находится внутри livecd.cloop, воспользуемся одной из собранных утилит: $ ./extract_compressed_fs ./livecd.cloop > livecd.loop Полученный файл монтируем, как обычно. Например: $ mount ./livecd.loop /mnt/loop -t ext2 -o loop Смотрим: вполне узнаваемая gentoo-система. Те же конфигурационные файлы и каталоги. Хотим - дополняем документацией на своё усмотрение, хотим - расширяем число установленных пакетов, хотим - конфигурируем на своё усмотрение. Только сначала переносим все каталоги в какой-нибудь /home/myLiveCD, делаем всё необходимое для использования его в качестве корневого, и - chroot! После того, как будущая LiveCD-система будет признана вполне отвечающей пожеланиям, покинем её (exit), предварительно демонтировав всё лишнее. И создадим наш новый livecd.cloop: $ mkisofs -r /home/myLiveCD | \ create_compressed_fs - 65536 > livecd.cloop Полученный файл, наряду с подкаталогами /gentoo и /isolinux оригинального диска, файлами README.html, quickinstall.html и любыми другими, которые мы захотим поместить на создаваемый LiveCD станут объектом компиляции, выполняемой всё той же mkisofs. Правда, опций на сей раз потребуется побольше. Но об этом - у Питера Анвина и в документации на одноименную программу - она достаточно подробна. В /isolinux не забудьте поместить результат работы на предыдущем этапе (initrd и isolinux.cfg). Всё! |
LiveCD.SU |