Работаем с микродистрибутивами
--или--
Linux у вас в кармане

 
Автор: (C) Larry "Dirt Road" Kollar
Перевод: (C) Александр Куприн


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

Чтобы доказать возможность и практичность применения таких мини-дистрибутивов, я настроил у себя систему на "четвёрке", умещающуюся на двух дискетах и использовал её для написания этой статьи. 1 

Введение

"Всё это" началось, когда мне досталась пара системных блоков и один монитор. Тот, что помощнее (Aptiva), имел "на борту" 133-й Pentium, жёсткий диск на 2Гб, CD-ROM привод и полное отсутствие оперативной памяти. Второй, HP Vectra 486/33N, был оснащён винчестером на 170Мб, Windows 3.1 и 8Мб ОЗУ (CD не было). Оба системника имели мышь, но ни у одного из них не было клавиатуры. Поход в Wal-Mart и расставание с десятком "удобных единиц" подарили мне PS/2-совместимую клавиатуру. Так как эти два компьютера использовали 72-пиновые SIMM'ы, то первое, что я сделал -- поставил память в Aptiv'у и посмотрел, нет ли чего-нибудь интересного на "двухгигабайтнике".

И не напрасно. Я узнал кое-что ценное -- Windows 98 становиться дурно от нехватки оперативной памяти.2  

Так получилось, что под рукой у меня не было дополнительной памяти. Поэтому я вставил SIMM'ы обратно в Vectrа и откопал диск с Red Hat 4.0, я собирался...опс, дистрибутив на компакт-диске, а у Vectra не было CD-привода (и разъёмов для его подключения тоже). Очевидно настало время менять стратегию.

В поисках чудо-дискеты

Газета Linux Daily News -- одна из моих ежедневных остановок в Сети. Если того, что вы ищите нет на LWN, значит там должна быть ссылка на это. Я перешёл на страницу Distributions и стал перемещаться вниз до раздела "Small Disk", содержащего информацию о дистрибутивах, помещавшихся на дискетах.

Моя первая мысль была о всеми любимом однодисковом дистрибутиве-спасателе (rescue distribution, rescue-дистрибутив) tomsrtbt. У меня на работе есть лаптоп под управлением Windows, вечно на вторых ролях после моего Mac G3, но временами этот дистрибутив делает его полезным. К сожалению, tomsrtbt использует не совсем стандартный размер для пакета в 1.7Мб, размещая его на дискете в 1.44Мб, к тому же производственная необходимость заставила сделать "апгрейд" лаптопа, установив на нём Windows 2000. W2K не позволяет провернуть такую махинацию, а доступа к другой версии Windows у меня не было. 3

Возвращаюсь обратно к списку. Прошерстив ещё несколько ресурсов, обнаруживаю, что BasicLinux действительно является не-CD-ориентированым дистрибутивом (как и было объявлено на странице Distribution на LWN). Он идёт в виде отдельно zip-файла размером 2Мб, но в распакованном виде легко помещается на двух дискетах и не требует создания образа дискеты8 (использует для загрузки из-под MS DOS LOADLIN.EXE). Создан на базе Slackware 3.5, использует ядро 2.0.34 и libc5. Полностью помещается на виртуальном диске размером в 4Мб, что позволяет Vectra почувствовать вкус "свободы" (точнее свободного программного обеспечения).

Наверх, наверх, навех...9

Несмотря на различия используемого программного обеспечения, форматов дисков и назначения, все дистрибутивы, ориентированные на загрузку с дискет, имеют общую схему запуска:

  1. Инициализация, или при начальной загрузке (LILO), или после загрузки DOS (LOADLIN).
  2. Загрузчик распаковывает ядро и запускает его.
  3. Ядро создаёт виртуальный диск (RAMdisk) для собственного размещения и использования.
  4. Загрузчик распаковывает пользовательское пространство (userland) и копирует его на виртуальный диск.
  5. Если процесс загрузки протекает нормально, виртуальный диск монтируется к корню файловой системы "/".

Образ диска, содержащий пользовательское пространство (т.е. содержимое файловой системы), полностью помещается на одной дискете, при распаковке занимая более 3Мб. При использовании виртуального диска, даже 486/33 чувствует себя комфортно и показывает чудеса скорости.

Компромиссы

При размещении Linux на двух дискетах, на ум приходит бессмертное наблюдение Heinlein'а "TANSTAAFL'а" (There Ain't No Such Thing As A Free Lunch -- Задаром никого не кормют). При возможности можно использовать дополнительные утилиты и даже X11, но не ожидайте увидеть KDE, Gnome или Mozilla. Фанаты Emacs могут забыть про него (или, по крайней мере, про большую его часть).

Даже основные команды и утилиты, те, которые вы ожидаете увидеть в любой ОС, чьё имя заканчивается на 'X', имеют усечённые варианты. Фактически, большинство из них -- это всего лишь символические ссылки на программу под названием BusyBox. Lineo разработал этот удобный инструмент для встроенных Linux-систем, но он также нашёл применение в дистрибутивах-спасателях и микродистрибутивах. Он включает в себя 54 наиболее важных команды в одном исполняемом файле размером всего в 110Кб. Создайте символическую ссылку (используя ln -s), назвав её cp, и когда вы введёте эту команду, BusyBox будет действовать как команда cp. Когда вы вызываете команду mv, то BusyBox перемещает или переименовывает файлы. Опция --help предоставляет доступ к краткому списку команд, исключая потребность в страницах справочного руководства (man). Смею заметить, что без пакета BusyBox дистрибутивы, помещающиеся на дискетах, пришлось бы создавать с большим количеством компромиссов между размером и функциональностью.

Работаем с BasicLinux

BasicLinux -- компактная, работоспособная сетевая система. Помимо основных возможностей (доступных через BusyBox), он обеспечивает Ethernet и dialup-подключение и может работать как сетевой экран (firewall, брандмауэр) используя ipfwadm. Такие утилиты, как fetchmail и links (не lynx, который однажды "кинул" меня) обеспечивают почтовый сервис и возможность просмотра web-страниц. Чтобы закалённые бойцы Linux чувствовали себя, по возможности, комфортно, в качестве оболочки предлагается bash. По умолчанию inittab создаёт три консоли, этого более чем достаточно для моих целей (иногда я использую две консоли одновременно, одну для непривилегированного доступа, другую -- для суперпользователя).

В отличие от большинства дистрибутивов, BasicLinux предлагает два текстовых редактора, миниатюрный e3 и популярный pico. 4 Воспользовавшись оставшимся свободным местом в загрузочном образе (baslinux.gz) и архиватором пакетов, исторически являющимся частью Slackware, я заменил два предлагаемых редактора на один -- joe. Joe чуть больше, чем pico, но умеет поддерживает возможность эмуляции pico, WordStar и Emacs (но без функциональных гипервозможностей). В результате полученный (и упакованный) образ стал больше, но продолжал помещаться на дискете.

Редактирование образа

Файл readme.txt, идущий вместе с BasicLinux краток, но даёт любому знакомому с консолью достаточно информации о том, как настроить систему или как создать образ загрузочной дискеты.

Как я уже говорил, файлы BasicLinux лежат на диске C: (по крайней мере он так бы назывался, если бы с него была запущена MS DOS). 5 Настройка образа проста:

  1. Используйте gunzip для распаковки образа.
  2. Примонтируйте образ как loopback-устройство.
  3. Внесите необходимые изменения.
  4. Размонтируйте образ.
  5. Упакуйте образ при помощи gzip.

Переход на жёсткий диск

Это не сложно, если вы планируете стереть всё с жёсткого диска и заново его переформатировать (имеется ввиду оба процесса -- разбиение на разделы и форматирование). На Vectra была установлена Windows 3.1 и куча приложений, в которых я не нуждался.

Прежде чем двигаться вперёд, я провёл небольшое исследование и сделал резервную копию каталога с системными файлами MS-DOS на дискете (используя zip-архиватор, который уже был на компьютере). С жёстким диском на 160Мб и ОЗУ на 8Мб, я полагал, что у меня будет достаточно свободного места для создания работоспособной системы.

Google помог мне найти программу для переразбиения существующих разделов на диске -- FIPS (Первая Интерактивная Программа для Переразбиения разделов на диске). Следуя инструкциям, я разместил FIPS на загрузочной дискете и воспользовался ею для уменьшения диска C:. Я хотел уменьшить раздел до 10Мб, но FIPS по какой-то причине выделял на это не менее 16Мб. 11 После удаления всех этих Windows-штучек и проведения дефрагментации диска, я смог уменьшить его до 5Мб. Я не совсем понимаю, как такое получилось. Ну, да ладно.

Теперь я запустил Linux снова и воспользовался утилитой fdisk, идущей в поставке вместе с BasicLinux, для создания раздела свопинга (swap) и решил оставшуюся часть отдать под "/". Запустив mkswap, mke2fs и e2fsck, я подготовил новые разделы к использованию. Под конец я распаковал архив instl2hd.zip и, следуя инструкциям, приложенным к нему, загрузил образ виртуального диска (и кое-какие дополнения от себя) на жёсткий диск. Дальше уже проще -- нужно было отредактировать новые точки монтирования для swap и "/" в /etc/fstab. Ещё одна перезагрузка и я уже загрузился с жёсткого диска. Жизнь прекрасна! Скопировав свою статью на Linux-раздел, я продолжил писать.

Пойманный Сетью

В системе, настроенной исключительно для работы с консолью, используется не более 5Мб оперативной памяти 6 и остаётся свободными ещё около 3Мб, их я решил использовать по своему усмотрению. И я захотел добавить:

К счастью, Vectra шёл с сетевой картой SMB-Ultra. Поиски нужного модуля не заняли много времени, но документация по BasicLinux предложила сперва попробовать загрузить модуль 8390. Т.к. мой Mac G3 работал сетевым экраном с поддержкой NAT (ipchains) для доступа в Сеть через dialup, то для подключения к сети достаточно было перенести Vectr'у в ту же комнату и подключить. После небольшой мозговой атаки и чтения страниц справочного руководства по route, я наконец понял в какой бубен мне нужно постучать, чтобы заставить Skeeter (так я стал называть Vectra) говорить по сети с внешним миром.

Скачивание пакетов X11 напомнило мне, что существуют сети и помедленней, чем мой dialup. Это был один из тех немногих случаев, когда я был рад тому, что у меня нет широкополосного подключения 7, иначе я бы чувствовал себя обманутым. Но, в конечном счёте, я заполучил всё, что мне было нужно на жёсткий диск и приступил к конфигурированию X11. Пошуровав в сети в поисках помощи, я выяснил, что утилита SuperProbe обнаружила, что Vectra имеет встроенное видео и мой монитор поддерживает только режим 640x480. Во второй вечер, я получил работающий GUI и переключился в рекомендуемый для таких случаев icewm. Пейджер от icewm и его небольшой размер заставляют узкий экран выглядеть очень прилично, если не сказать приятно. Но если быть справедливым, то экран rxvt в 35 строк лучше, чем 25 строк текстовой консоли для работы с текстом, так что я доволен.

Напоследок

С работающей сетью и графическим интерфейсом пришло время заканчивать настройку. Сейчас вся система занимает на жёстком диске около 21Мб (113Мб ещё свободно). Прибавьте сюда пакеты компилятора и занимаемый объём увеличивается до 35Мб.

Добавление пакетов, нужных для сборки groff и gawk, плюс сами откомпилированные приложения и вот уже занято более 60Мб. После установки программ и удаления директорий, содержащих исходники я поджал используемое пространство до 57Мб.

И раньше печатая по сети через lpr на совместно используемом принтере, я по-быстрому сделал несколько тестовых документов в groff и отправил их на лазерный USB-принтер, подключенный к G3. На этом этапе, Skeeter уже умел делать всё, что я для него планировал. Мне хотелось бы монитор с большим разрешением, и возможно хорошо было бы собрать из исходников графический веб-браузер Chimera 1.x, но этого не было в списках первой необходимости.

Поиски собственной "экологической ниши"

Уже готовый для того, чтобы служить "пишущей машинкой" (доказательство -- эта статья), Skeeter может подключаться к MUD и использоваться для развлечений (представьте себе трёх человек делящих между собой dialup -- двух использующих telnet, и третьего просто читающего почту через броузер, и никто не жалуется, что связь становится медленной). Rouge очаровал моего сына и его друзей, чем удивил моего друга, который не понимает как может быть интересной игра без графики!

Skeeter может использоваться как удалённый дисковод. У iMac (там теперь стоит MacOS X) его уже нет, точнее то, что осталось, представляет из себя что-то непонятное. Поэтому если нам нужно прочитать или записать данные на дискету, мы обращаемся за помощью к Skeeter'у. В будущем он может стать сервером печати, ему это вполне по силам.

Итак, я считаю, что эксперимент удался. Благодаря инвестициям в десять долларов и напряжённому труду в поте лица своего, я получил ещё один работающий компьютер и приобрёл новые навыки.


Larry Kollar

Работу Larry можно охарактеризовать, как "технический писатель", но в душе он мечтает однажды стать настоящим BOFH 10. На работе он умеет находить время для написания скриптов настройки ведомственных Linux-серверов (конечно же "маков") и отгоняет орды завистливых IT-сотрудников, смотрящих жадными глазами на его G3. Дома, у подножия гор Джорджии, он делает всё, что может для того, чтобы сохранить жену, двух детей и четыре компьютера здоровыми и счастливыми.

Примечания переводчика

1 На домашней странице дистрибутива BasicLinux дана ссылка на эту статью, как на практическое пособие по его установке и использованию.
2 Спазмы, удушье, а затем полный коллапс. Если интересуют подробности, спросите у нашего редактора.
3 Судя по всему, автор хочет сказать, что создание образа на дискете требует, чтобы вы находились в "реальном" DOS'е, а не DOS-сессии в случае с Windows 95/98. К тому же речь шла о W2K, в которой DOS-режима нет как такового.
4 В оригинале статьи автор ошибся, спутав pine и pico. Первый -- почтовый клиент, второй -- текстовый редактор, который используется в pine.
5 Из-под Linux'а, скорее всего, это будет -- /dev/hda1.
6 В оригинале статьи автор называет первые 5Мб свободным пространством на жёстком диске, а 3Мб остатком свободным в ОЗУ. Скорее всего, он запутался с виртуальными дисками и образами, копируемыми на них.
7 Технология, способная обеспечить одновременную передачу голоса, данных, видео; обычно это осуществляется путем мультиплексирования с разделением частот.
8 Т.е. используется системная дискета от MS DOS. Загрузка BasiLinux осуществляет программа loadlin, размещённая на ней.

Примечания редактора

9 Up and Away -- это, кажется, из "Ветра в ивах". Там некий Крот, устав от тягот и лишений подземной жизни, решает устроить себе каникулы и говорит примерно следующее: "Все, с меня хватит! Наверх, наверх, НАВЕРХ... Куда угодно, только прочь отсюда ". С тех пор Up and Away стало символом личного освобождения от гнетущего бремени приземленных забот.
10 Bastard Operator From Hell -- эдакий компьютерный мальчиш-плохиш из славного прошлого университетских компьютерных сетей. С одной стороны -- всевластен [пароли, доступ к машинам]. С другой -- полная безнаказанность [да я простой оператор, откуда мне знать, что делает del *.*]. Подробности смотрите здесь.
11 Даже свободный код не может выделять под раздел неполные цилиндры.:)


Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн, Андрей Киселев