Запаска для Linuxа

Владимир [Farcaller] ПУЗАНОВ, 23.06.2003, Мой Компьютер Weekly

У большинства CD-ROM'ов современных дистрибутивов Linux есть режим восстановления системы rescue. Но иногда полезно иметь Linux на дискете. Попробуем-ка его туда загнать.

Создание ядра

Для нашего Linux'а надо сделать специальное ядро. Оно должно быть компактнее стандартного и использовать минимально возможное количество модулей. Наш дистрибутив будет основан на двух дискетах. На первой будет находиться ядро, на второй - корневая файловая система. Кроме того, можно заготовить еще несколько дискет с дополнительными файлами.

Ядро Linux находится в /usr/src/linux*. Обычно там лежит одна папка с исходными кодами ядра вашего дистрибутива и симлинк linux на нее. Так что для перекомпиляции ядра нам потребуется перейти в /usr/src/linux. Не забудьте, все это надо выполнять из-под root'а!

Полезно настроить новое ядро на оптимальную для вас конфигурацию и поставить его вместо основного. Этим вы можете добиться прироста производительности. Если вы уже настраивали ядро, то введите make mrproper. Эта команда удалит «мусор», оставшийся после предыдущих компиляций. Теперь надо собственно сконфигурировать ядро. Для этого существуют такие комманды: make config - страшная вещь, конфигурирует ядро из консоли без возможности вернуться к предыдущим вопросам; make menuconfig - удобная консольная конфигурация, основанная на системах меню; и make xconfig - самая продвинутая, запускает конфигурацию в графическом режиме. Еще есть make oldconfig, эта команда устанавливает значения по умолчанию.

В режиме конфигурации компоненты ядра можно (Y) включать в ядро, (M) компилировать как модуль (модули хранятся отдельно от ядра и подключаются при необходимости) и (N) вообще не компилировать.

Что же выбрать среди сотен опций? Рассмотрим по группам.

Code maturity level options - для использования нестабильных драйверов. Скорее всего, не понадобится;

Loadable module support - тут можно разрешить или запретить использование модулей. Нам они пригодятся;

Processor type and features - тут проживают опции процессора. По умолчанию выбран универсальный вариант, но можно выбрать свой тип процессора для оптимизации. Не рекомендую для универсальной rescue-дискеты;

General setup - основные свойства ядра. Поддержка сети (зачем она на дискете?), PCI, EISA, MCA, PCMCIA (последние три, скорее всего, тоже не пригодятся);

Binary emulation of other systems - поддержка бинарников от UnixWare, Solaris и т.п. Ни Винды, ни ДОСа тут нет, а другие программы нам в процессе восстановления не понадобятся. Отключаем;

Memory Technology Devices (MTD) - устройства типа Flash-карт. Отключаем;

Parallel port support - поддержка ядром параллельных портов. Желательно оставить;

Plug and Play configuration - поддержка глюкотыка;

Block devices - тут находятся опции поддержки разных блочных устройств (дисководов, HDD). Редкие устройства (XT hard disk, Parallel port IDE device support, массивы Compaq) можно удалить. Loopback пригодится как модуль, а вот RAM disk support обязательно должен быть встроен в ядро, равно как и initrd support;

Multi-device support (RAID and LVM) - если у вас нет RAID-контроллеров, можете смело все выключать;

Networking options - наша дискета не будет работать с сетью, так что тут нет ничего для нас полезного. А вообще, этот пункт для обычного ядра надо конфигурировать осторожно, чтобы не удалить чего-то нужного;

Telephony support - поддержка устройств IP-телефонии. Ну, с дискеты звонить можно только в рельсу :-). Отключаем;

ATA/IDE/MFM/RLL support - тут настраиваются соответствующе контроллеры. Можно удалить (при ненадобности) модули RAID'ов в конце;

SCSI support - если у вас нет SCSI-винчестера, можно смело отключать;

Fusion MPT device support - можете смело убирать;

IEEE 1394 (FireWire) support - FireWire нам не пригодится. Отключаем;

I2O - поддержка ввода/вывода без участия процессора. Нужна для хитрых устройств, которые не будут использоваться при спасении. Отключаем;

Network device support - на нашей дискете не будет сети, но если вы вдруг захотите подключиться к Интернету, используя набор дискет, то изучите этот пункт и опции сетей, отключая по возможности ненужные компоненты (сетевые карты и т.п.);

ARCnet devices, Appletalk devices, Ethernet, Wireless LAN, Token Ring devices, Wan interfaces, ATM drivers, Amateur Radio support, IrDA (infrared) support, ISDN subsystem, Old CD-ROM drives - отключаем. Для нас здесь нет ничего интересного;

Input core support - полезно только при наличии USB-клавиатуры или мыши;

Character devices - здесь обитают терминалы, последовательные порты, мыши, джойстики, видеокарты и другие символьные устройства. Тут можно убрать I2C support, Hardware sensors support, Joysticks, Watchdog Cards, Ftape, PCMCIA. Поддержку мышей тоже можно убрать;

Multimedia devices, Crypto Hardware support - можно убрать;

File systems - тут много лишнего. Главное - не перестараться. Можно убрать поддержку квот, автомаунтера. Из файловых систем оставьте ReiserFS (модуль), ext3 (модуль), DOS FAT, MSDOS, VFAT (желательно в ядро), ISO9660 и Joliet (можно в модули), NTFS и/или OS/2 HPFS (модуль, если нужно). В ядро поселите /proc file system support, /dev/pts file system support, Second extended fs support (обязательно!). Network File Systems можно (и нужно) выключить. В Partition Types выберите те, которые вы используете (Advanced partition selection, PC BIOS, Windows Logical Disk Manager (Dynamic Disk) support). В Native Language Support в ядро отправьте Codepage 437, 866, NLS ISO 8859-1, 8859-2, 8859-5, NLS KOI8-R, KOI8-U. Остальные можно убрать;

Console drivers - несложно догадаться, что тут обитают консольные драйверы. Можно оставить Framebuffer, но уберите оттуда лишние видеокарты (вам должна подойти VESA VGA, остальные можно убрать, если только вы не обнаружили среди них своей).

Sound - поддержка звуковых карт. В процессе оживления системы иногда хочется покрутить эмпешки. Оставьте тут свою звуковую карту, другие желательно убрать;

USB support - если у вас есть какое-то очень нужное USB-устройство - оставьте. Но если из таковых у вас только сканер (или принтер), тогда можете убирать (разве что вы очень хотите попечатать);

Bluetooth support - уверен, что «синие зубы» вам не пригодятся. Если у вас другое мнение - вперед;

Kernel hacking - тут может пригодится опция Prefer small over fasr code. Ну, и всегда полезная волшебная кнопка sysrq.

Все. Ядро успешно настроено. Далее выполняем команды make dep и make clean. Теперь откройте файл Makefile и исправьте строчку, начинающуюся с EXTRAVERSION=. Напишите там, к примеру, mk-rescue-1. Сохраните и закройте файл.

Начинаем компиляцию. Введите make bzImage. После завершения выполните make modules, если вы использовали модули. После нее команда make modules_install перепишет модули в /lib/modules/KERNELVERSION/kernel/drivers. Если после компиляции ядра вы получили сообщение, что оно не влезет на дискету - посмотрите его размер. Если в пределах 1.7 Мб, то ядро можно засунуть на хитро отформатированную дискету. Если около 1 Мб, можете скомпилировать в ядро некоторые модули для освобождения места на второй дискете. Скопируйте готовое ядро в рабочую папку (cp /usr/src/linux/arch/i386/boot/bzImage /tmp/linux-floppy/vmlinuz)

Файловая система

Для нашего дистрибутива (мощно звучит :-)) нужна еще одна вещь - файловая система, которая будет хранится на второй дискете. Давайте теперь займемся ею.

Какие же файлы необходимы для работы Linux'а? Рассмотрим минимальный набор.

Файловая система должна содержать каталоги /dev, /proc, /bin, /etc, /lib, /usr и /tmp. Необходимы жизненно важные утилиты: sh, ls, cp, mv и т.д. Необходимы конфигурационные файлы rc, inttab, fstab, и т.д., а также нужные runtime-библиотеки. Но от такой спасательной дискеты будет мало пользы. Наша дискета должна уметь проводить восстановительные работы, выполнять резервное копирование, играть mp3-файлы :-) и много чего еще. Давайте приступим.

Создать ФС можно в оперативной памяти и в файле (loopback device). Что удобнее? Я люблю работать с RAM-дисками. Да и loopback есть не во всех дистрибутивах. Так что я предлагаю использовать /dev/ramX. Для начала очистим устройство...

Теперь создадим на нем ФС etx2:

И смонтируем его:

Перейдите в /mnt/floppy. Пришло время заселять нашу дискету! Но для начала создадим стандартный набор директорий:

Заселение /dev

Я думаю, что проще всего сделать это, скопировав необходимые файлы из аналогичной директории вашего Linux'а. Не забудте использовать ключ -R:

И не забудьте также скопировать то, на что ссылаются ссылки (извините за каламбур); к примеру, в моей системе /dev/fd0 - симлинк на /dev/floppy/0. Если вы хотите создать устройство вручную, используйте команду mknod. ls -l - поможет узнать major- и minor-номера ваших устройств, они же все есть в /usr/src/linux/Documentation/devices.txt.

Заселение /etc

Это достаточно сложная директория, которая требует некоторого знания shell-скриптов. Вам точно пригодятся файлы fstab, passwd, shadow, group, rc, inittab. В RedHat-производных есть каталог /etc/rc.d. Его содержимое может быть полезно при восстановлении, но он слишком громоздок для проведения загрузки из него. Необходим и файт termcap, но его можно (и нужно) урезать, удалив лишнее содержимое (если будут проблемы - пишите, пришлю). Проверьте passwd. Удалите лишние записи, проверьте корректность указаний оболочек и домашних директорий. Запись root должна выглядеть приблизительно так:

Минимальный inittab должен выглядеть так:

Посмотрите ls -ltru. В самом низу будут наиболее часто используемые файлы. Имеет смысл скопировать и их.

Создайте файл pam.conf с таким содержимым:

Скопируйте свой файл nsswitch.conf.

Заселение /bin и /sbin.

В /bin должны быть ls, mv, cat, dd, sh, chmod, mkdir, login, rm, cp, rmdir, ln, grep, kill, ps, tar, gunzip, mount, umount. /sbin должен содержать fsck*, halt, hdparam, init, insmod, lilo, mingetty, mkfs*, modprobe, poweroff, shutdown, swapon, swapoff, rmmod, depmod. Очень полезен может оказаться пакет Busybox - http://www.busybox.org. В нем содержится солидный набор программ «в одном флаконе».

Заселение /lib.

Чтобы узнать, какие библиотеки вам нужны, просмотрите результат работы ldd <имя_бинарника>. Эти библиотеки и надо скопировать. Кроме того, вам нужен ld-linux.so и /lib/security/pam_permit.so. Если вы создали модульное ядро, скопируйте необходимые модули в /mnt/floppy/lib/modules. Модули нашего ядра на локальной системе будут в каталоге с окончанием mk-rescue-1 (к примеру, у меня - 2.4.8-mk-rescue-1).

Финал

Эти команды завершат создание ФС:

Пора записать ФС в файл:

Запись дистрибутива

Ну вот и все. Ядро готово, ФС тоже. Как же теперь все это записать на дискеты? Для начала придется немного поработать руками. Создайте файл bdlilo.conf с таким содержимым:

Теперь измерьте размер ядра в блоках (ln -s vmlinuz) и добавьте где-то 50. Теперь вставьте дискету #1 и введите:

Теперь вставьте вторую дискету:

Все! Победа! Осталась малость - чтобы все это заработало :-). Скорее всего, этого не произойдет :-), так как в этом процессе слишком много мест, где можно проколоться. Но не отчаивайтесь! Перечитайте статью, изучите Bootdisk-HOWTO, в конце концов, напишите мне. Знайте: если у меня получилось, у вас тоже получится. И когда у вас начнутся проблемы с ОС (не дай Бог!), поставьте эту дискету, разыщите сборник эмпешек - и вперед :-)! А позже я, может быть, расскажу вам, как поселить Linux на CD, не обделив вниманием графический интерфейс. Желаю успехов вам, уважаемые читатели, в нелегком деле освоения Linuxа!





Источник - LinuxBegin.ru
http://linuxbegin.ru

Адрес этой статьи:
http://linuxshop.ru/linuxbegin/article371.html