О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

29.07.2008

MINIX 3. Первые впечатления

Прошлая заметка цикла закончилась оптимистически - успешной установкой и пересборкой системы. Теперь пора поглядеть, а что с этой системой можно делать. Обычно описание первого знакомства с ОС начинается с перечисления того, что в ней есть, и чего она умеет. Я же нарушу традицию, и для начала задамся вопросом -

Чего нет у рыб?

Выдающийся русский филолог и писатель Лев Успенский (автор, в числе прочих, замечательной книжки "Занимательная топонимика") в своих воспоминаниях рассказывает, как в студенческие годы сдавал экзамен по какой-то биологической дисциплине. И на вопрос, вынесенный в заглавие этого раздела, ответил:

У рыб нет монокля и полного собрания сочинений Шпильгагена.

За что и удостоился отличной отметки.

С MINIX 3 - случай аналогичный. Монокль к установочному ее диску не прилагается, и полное собрание сочинений Шпильгагена на нем не присутствует (да и вряд ли вообще существует в оцифрованном виде). Однако, как и с рыбами, список отсутствующих в MINIX 3 функций моноклем и Шпильгагеном далеко не исчерпывается.

Итак, в MINIX 3 отсутствуют:

  • поддержка огромного количества современного оборудования - шины USB, интерфейсов SCSI и SATA, видеосистема работает только в VESA-моде, а о звуке, выходящем за рамки SB16 и ES1371, похоже, придется пока забыть (да и с этими картами ситуация оказывается на совсем ясной);
  • возможность динамической линковки приложений с функциями системных библиотек;
  • поддержка каких-либо файловых систем, кроме своей собственной; даже доступ к компактам стандарта ISO 9660 осуществляется через /dev/ass;
  • поддержка виртуальной памяти.

В результате MINIX3-машина оказывается чем-то вроде черного ящика: общаться по сети, как локальной, так и глобальной, скорее всего, не получится из-за "неподходящей" сетевой карты, получить доступ к Linux-разделам на той же машине - тоже не выйдет. Обратная процедура - доступ к файловой системе MINIX из Linux'а - также не столь проста, несмотря на теоретическую поддержку ее ядром Linux. А наличного софта, как уже говорилось, для мало-мальски комфортной практической работы явно недостаточно. Не говоря уже о том, что неизвестно, куда результаты этой самой работы девать...

В свежеустановленной системе имеется набор классических Unix-утилит, общим количеством около четырехсот, однако реализации их - примерно соответствующие стандарту POSIX, то есть далеко не самые богатые возможностями. Так, шелл по умолчанию, носящий классическое имя /bin/sh, представляет собой, судя по всему, вариации на тему шелла Альмквиста (ash) и не поддерживает массу интерактивных функций, свойственных bash или zsh.

В качестве текстового редактора выступает elvis - один из дериватов классического vi, весьма точно имитирующий его архаические особенности (то есть - отсутствие продвинутых фич современного Vim). Есть еще, правда, редактор elle - однако узнать о его существовании не так просто, а обращение с ним нельзя назвать интуитивно понятным.

Из средств разработки имеется собственный компилятор acd, но комплекса сопутствующих ему утилит автоматизации сборки вроде бы не обнаруживается.

Даже в качестве средства просмотра содержимого файлов выступает древний пейджер more...

Это далеко не полный список отсутствующих возможностей - он включает лишь то, что, на мой взгляд, доставляет пользователю наибольшие неудобства.

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

Установка дополнительного софта

Начнем с установки дополнительных пакетов. В начале прошлой заметки я упоминал о загадочной особенности установочного диска MINIX 3: суммарный объем файлов, видимых на нем из под Linux или Windows, составляет 1,6 Мбайт, тогда как размер образа в декомпрессированном состоянии - 480 Мбайт. И высказал предположение, что остальное пространство занято собственным MINIX-разделом.

Так оно и оказалось. Правда, как примонтировать этот раздел и просмотреть его содержимое обычным, ручным, способом, я еще не придумал. Но вот установить с него дополнительные пакеты - можно "на ура".

Для установки пакетов с инсталляционного CD нужно вставить его в привод и, авторизовавшись root'ом, запустить собственный менеджер пакетов, который вполне традиционно называется packman.

После запуска packman происходит автоматическое монтирование компакта в каталог /mnt, радостно сообщается о наличии на CD 46-ти дополнительных пакетов и предлагается обойтись с ним одним из следующих способов:

  • 1 - установить все 46 бинарников с компакта (что в распакованном виде отъест 408 Мбайт от дискового пространства (из раздела под /usr);
  • 2 - установить те же 46 бинарников плюс их исходные тексты, это потребует уже более чем 1,2 Гбайт;
  • 3 - вывести список доступных с компакта пакетов;
  • 4 - произвести индивидуальный выбор пакетов для установки с диска или по Сети;
  • 5 - выйти отседова вон :)

Разумеется, любой любознательный человек (а нелюбознательных среди потенциальных пользователей MINIX в нынешнем ее виде не может быть по определению) начнет с пункта 3, то есть знакомства с предлагаемым ему к установке хозяйством. И будет приятно удивлен: в эти 46 пакетов разработчики умудрились запихать максимум всего, что может быть полезным. Тут имеются:

  • два с половиной полноценных шелла - bash, zsh и pdksh (последний я считаю за половинку, так как кардинально от /bin/sh он не отличается);
  • некоторое количество абсолютно незаменимых утилит, начиная с less и заканчивая парой вариаций на тему awk; мой любимый калькулятор bc также не забыт;
  • оба могучих текстовых редактора - и Vim, и Emacs, плюс к которым - pico из почтовой программы pine, также наличествующей в списке; есть даже программа antiword - для тех, кто, по выражению Владимира Игнатова, вынужден прогибаться под испорченный мир "подоконников";
  • вдоволь сетевых и коммуникационных пакетов - кроме вышепомянутого pine, можно наблюдать браузер lynx, ftp-клиент wget, openssh, cvs, rsync;
  • джентльменский набор средств разработчика - начиная с gcc (версии 3.4.3), включая flex, bison - и вплоть до make и autoconf;
  • интерпретаторы скриптовых языков - Perl и Python; всякие полезные мелочи, типа zip и unzip;
  • наконец, возглавляет список пакет X11R6.8.2, представляющий собой ни что иное, как Иксы в исполнении от Xorg соответствующей версии; правда, никаких рабочих сред и даже менеджеров окон в списке не наблюдается.

Кстати, можно воспользоваться случаем и, перейдя в другую виртуальную консоль, поглядеть содержимое всего установочного диска, точнее, его загадочного MINIX-раздела. Описывать иерархию его файловой структуры не буду - она вполне похожа на настоящую. Отмечу только, что дополнительно устанавливаемые пакеты притулились в каталоге /mnt/install - его подкаталогах packages (бинарники) и package-sources (исходники).

Формат пакетов (как исходников, так и бинарников) - tar-архивы, сжатые утилитой bzip2. Интересно, что входящая в штатный комплект реализация архиватора tar не позволяет просмотреть их содержимое обычным образом (через tar tjvf имя_файла). Опция z для просмотра gzip-компрессированных архивов в ней также не предусмотрена. Почему - тайна сия велика есть...

Тем временем, насмотревшись на содержимое установочного компакта, можно и определиться с тем, что делать с пакетами дальше. Поскольку цели наши в ближайшее время - сугубо познавательно-образовательные, есть смысл выбрать пункт два - установку всех бинарников и исходников. Для практической работы, конечно, следовало бы прибегнуть к индивидуальному выбору пакетов, но пока практическая работа нам не грозит. Да и, как говорят, при отсутствии настройки сети индивидуальный выбор может работать некорректно.

Сразу после нажатия на соответствующую цифру (1 или 2) начинается установка пакетов. Это довольно длительная (в масштабах времени MINIX) процедура. Но в ходе ее выполнения можно заняться важным делом - созданием пользовательского аккаунта - как я уже говорил в прошлой заметке, до сих пор можно было авторизоваться только как root и пользователь bin.

Пользовательский аккаунт создается традиционной командой adduser, однако формат ее своеобразен и требует обязательного указания трех аргументов - имени пользователя, группы, к которой он должен быть причислен, и домашнего каталога. Причем группу нужно либо выбирать из существующих, либо вписывать вручную в файл /etc/group, например, так:

users:*:101:

Средств для автоматического создания новой группы я не нашел. После этого уже можно задавать собственно команду:

# adduser newuser users /home/newusers

Зато указанный домашний каталог создавать заранее не нужно - он образуется сам собой.

Затем можно задать пароль для нового пользователя, да заодно и администратора. Что делается стандартным для всех Unix-систем способом - командой passwd с именем пользователя в качестве аргумента и двухкратным вводом пароля. Замечу к слову, что в MINIX 3, как и в Linux, используется механизм "теневых паролей" - то есть они хранятся не в файле списка учетных записей /etc/passwd, а в специальном файле /etc/shadow, доступном даже для чтения только администратору.

В заботах по созданию аккаунтов и назначению паролей установка пакетов подходит к завершению. Теперь можно создать себе нормальную рабочую среду - сменить шелл на bash или zsh, прописать в их профильных файлах любимый редактор, сменить умолчальный пейджер на less - словом, выполнить обычный комплекс настроечных мероприятий.

А можно даже запустить Иксы - обычной командой startx. Интересно, что Иксы нормально запускаются без всякого конфигурационного файла - по крайней мере, у меня на ноутбуке с интегрированным видео от ATI это было именно так. Напротив же, после автоматического создания файла /etc/X11/xorg.conf посредством

# X -configure

попытка запуска Иксов не удается, и выводится сообщение о крахе X-сервера. Впрочем, доведение Иксов до ума - это тема отдельного разговора. Тем более, что делать в них пока особенно нечего - ни одного Иксового приложения у нас не имеется, а из всех возможных рабочих сред в наличии - только менеджер окон twm, входящий в комплект Иксов (работать в котором, на мой взгляд, мягко говоря, не очень комфортно).

Расширяем ассортимент

И вот тут самое время сходить на сайт проекта (правда, возможно, что для этого придется перезагрузиться в Linux/BSD). И отыскать там раздел SOFTWARE (http://www.minix3.org/software/), содержащий все пакеты с установочного CD (подчас обновленные их версии) и немало пакетов, на него не попавших. Среди них - текстовый редактор nano, web-сервер Apache, набор утилит для обработки графики ImageMagick и прочая, и прочая, и прочая. Есть там, наконец, и ede (Equinox Desktop Environment) - компактная рабочая среда, изначально предназначенная для КПК (в частности, как говорят, она устанавливалась на пресловутые Zaurus'ы), но портированная под MINIX 3.

Если софта на сайте проекта покажется мало, дополнительные пакеты можно поискать на русском сайте MINIX - http://www.minix3.ru/files/. По содержанию он лишь частично перекрывается с официальным архивом. Так что - качай не хочу...

И тут, как в известном анекдоте про советского парашютиста, у нас есть два выхода. Если сетевая карта поддерживается MINIX'ом, и удалось наладить выход в Интернет - все хорошо: скачиваем нужные пакеты, например, новообретенным wget'ом в свой домашний каталог и начинаем думать, как их установить.

Если же, как это имело место быть в моем случае, сетевушка не поддерживается, и выход в Интернет поэтому возможен только из-под Linux'а, то мы опять имеем два выхода.

Обмен данными с Linux'ом

Первый выход - это попытаться наладить обмен данными между Linux'ом и MINIX'ом через раздел с файловой системой minixfs.

Теоретически рассуждая, файловая система MINIX ядром Linux поддерживается: те линуксоиды, кто еще застал времена загрузочных дискет для старта своей операционки, помнят, что именно в этой файловой системе форматировалась дискета с корневой файловой системой (первая дискета содержала образ ядра и файловой системы на себе не несла). Поддержка minixfs может быть или жестко встроена в ядро, или реализована в виде подключаемого модуля. Последнее имело место в моем дистрибутиве (Kununtu Feisty), так что необходимости в перекомпиляции ядра, вроде бы, не было.

Однако все оказалось не так просто. Файловая система MINIX 3 отличается от предшествующих версий 1 и 2, каковые тоже являются разными, в частности, ограничением на максимальный объем, составляющим в этих версиях 64 Мбайт и 1 Гбайт соответственно. И напрямую современным ядром она не воспринималась никак - требовался патч, который можно найти в том же самом архиве http://www.minix3.ru/files/.

Патчить и пересобирать ядро мне было откровенно лень - да и не было уверенности, что ядро 2.6.20 из Kubuntu Feisty пропатчится нормально. И потому я занялся экспериментами по принудительному созданию файловых систем для MINIX 1 и 2. Описывать эти эксперименты не буду - скажу только, что успехом они не увенчались. Файловая система MINIX 1, созданная средствами MINIX 3 - с помощью команды

$ mkfs -1 /dev/c0d0p2

категорически отказывалась монтироваться в Linux, хотя в MINIX монтировалась прекрасно и даже позволяла копировать на нее файлы. И напротив, какую бы версию minixfs (1-ю, по умолчанию, или 2-ю, задаваемую опцией -v) я не создавал в Linux'е командой mkfs.minix - ни одна из них в MINIX 3 не монтировалась. Хотя в Linux'е виделась прекрасно и была доступна на чтение и на запись.

Однако мы помним, что у парашютиста, попавшего в ад и съеденного чертом, хоть один выход да оставался. Нашелся он и у меня: обмен данными через CD.

Я уже говорил, что MINIX 3 не поддерживает файловую систему ISO9660, несомую компакт-дисками. И, следовательно, они не могут быть смонтированы в дерево файловой иерархии этой ОС. Однако она имеет комплекс утилит, функционально сходный с Linux'овым набором mtools - старожилы помнят, что он предназначался для работы с DOS-дискетами и позволял читать оные и записывать на них без монтирования.

Набор iso-утилит из MINIX включает в себя три команды. Первая - isoinfo - предназначена для получения общей информации о компакт-диске, имя устройства которого выступает в качестве аргумента:

$ isoinfo /dev/c0d2
В

данном примере имя файла устройства дано в предположении, что CD-привод подключен в качестве второго мастера - достаточно обычная ситуация в настольных машинах и практически единственная - в ноутбуках.

Ну а в выводе команды будут - формат диска (ISO9660, расширений типа Rock Ridge и Joliet iso-утилиты не понимают), идентификатор системы, в которой он был записан (LINUX), реально занятый объем, размер блока, дата создания и модификации и так далее.

Следующая команда - isodir. Она выводит список файлов и каталогов, расположенных в корне компакт-диска. Однако с опцией -r вывод будет включать содержимое и всех вложенных подкаталогов:

$ isodir -r /dev/c0d2

А опция -l обеспечит вывод в "длинном формате", аналогичном выводу команды ls -l.

Наконец, для просмотра содержимого файлов предназначена команда isoread. Для нее требуется два аргумента - имя файла устройства и имя конкретного файла, которое мы берем из вывода команды isodir, например:

$ isoread /dev/c0d2 ede_1_1_tar.b

В примере второй аргумент относится к бинарному пакету рабочей среды ede, которая упоминалось выше. А выглядит он странно потому, что isoread поддерживает только чистый ISO9660, и длинные имена с многочисленными точками, обычные для Unix-систем, оказываются изуродованными.

Вывод команды isoread будет представлять собой содержимое указанного файла. То есть для бинарника, как в данном примере, мы не увидим ничего хорошего. Как быть? - А очень просто, достаточно вспомнить о перенаправлении стандартного вывода в файл, чтобы скопировать нужный пакет в файловую систему MINIX:

$ isoread /dev/c0d2 ede_1_1_tar.b > ede-1.1.tar.bz2

Обратим внимание - целевому файлу было возвращено его первозданное имя. И делать это приходится руками. И так - для каждого из записанных на CD файлов. Зато, когда процедура будет закончена, скопированные таким геморройным способом пакеты можно будет установить. Как? Об этом речь пойдет в следующей заметке.