О блоге

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

05.09.2008

Lonix, или LiveCD из исходников

По состоянию дел на осень 2002 г. Судя по всему, дистрибутив прекратил свое развитие, так что представляет интерес главным образом в историческом аспекте (и частично - в идейном).

Не очень рискуя ошибиться, высказывая предположение: мало кто из моих многотерпеливых читателей слышали о Linux-дистрибутиве под названием Lonix. Те же, кто слышали, вряд ли располагают мало-мальски существенной информацией. Ибо получит оную - не так просто.

Действительно, зайдя на сайт проекта, можно увидеть сообщение о двух его версиях - англо- и испаноязычной. Однако первая находится в состоянии (видимо, перманентном) under construction. Испаноязычная же версия производит впечатление весьма полной и детальной. Одна беда - ознакомиться с ней можно, только владея языком Сервантеса.

Для тех же, кто к таковым не относится, остается два выхода. Либо обозвать дистрибутив именем Лопе де Вега (потому как больно на... сами знаете на что похоже) и бросить это дело. Либо - скачать его и попытаться составить собственное представление.

Я, чьи познания в испанском далее ненормативной лексики не простираются (для тех, кто оной не владеет, замечу -замечательно выразительна она у них), избрал второй вариант. Так что оставалось - качать. Благо - не слишком много, всего-то 150 Мбайт сжатого (gzip'ом) iso-образа (правда, разворачивался он мегабайт на 450). Ну а дальше - дело техники, распаковать, заболванить и загрузиться.

Вводная установка: согласно полученным сведениям, Lonix принадлежит к категории LiveCD-дистрибутивов. То есть - Linux-систем, не только загружаемых с CD, но в значительной мере с оного и функционирующих (хотя корневая файловая система монтируется на небольшом RAM-диске в оперативной памяти). Наиболее известный представитель этой категории дистрибутивов - Knoppix, - снискал в последнее время популярность изрядную, и наверняка знаком многим читателям. Да и инсталляционные диски Gentoo - из той же оперы...

Итак, загружаемся и, после некоторого количества сообщений на языке чистейшего Кальдерона получаем приглашение авторизоваться в качестве root'а. Root'ом - так root'ом, сказала бы Надежда Константиновна Крупская. И оказалась бы не права: беспарольный вход в систему не проходит. Приходится перезагружаться в нормальную рабочую систему (Gentoo Linux - а вы что подумали?) и изучать содержимое диска на предмет документации.

Файл README находится легко - прямо в корне компакта. Однако вся информация в нем - та, что это версия файла ~/doc/README. Каковой, опять же, написан на благородном кастильяно. Однако, отталкиваясь от знакомых терминов (root - он и в Андалузии root), из него можно понять, что пароль для входа действительно нужен. И пароль этот (догадайтесь с трех раз) - lonix.

Так что повторяем процедуру перезапуска с CD и, после успешной авторизации, оказываемся в нормальной текстовой консоли (загружается Lonix в стандартном режиме 80x25, без всяких там новомодных frame buffer'ов с жизнерадостными пингвинами из солнечной Антарктики). С нормальной же, полномерной, оболочкой bash. Да и консолей - нормальное количество, шесть (число зверя-пингвина, видимо).

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

Тут в пору обратить внимание на две заставки, одна - на рiдной мове автора (Гильермо Менгеса Альвареса), другая - на языке Вильяма нашего, Шекспира (правда, никакими доказательствами, что Вильям Шакспер, пайщик театра Колумб - тьфу, Глобус, - и Шекспир, автор ставившихся там пьес, - одно и то же лицо, наука не располагает, как раз наоборот), предлагающие запустить программу конфигурации. Поскольку во втором варианте программа эта именуется lonixconfig-en, можно предположить также (как показала практика - справедливо) англоязычие ее интерфейса.

И тут, доложу я вам, начинается коррида. Сначала - вопрос: а хотите ли ли вы сменить раскладку клавиатуры? Еще бы - радостно говорим в ответ (не для того ли все затевалось?). И получаем длинный список доступных раскладок, в котором присутствуют все стандартные для отчизны - ru, ru1-4, ru-cp1251 и т.д.

Затем - часовой пояс, выводится такой же список, в котором есть и Europe/Moscow, и Asia/Kamchatka, и прочие города и веси.

А вот следующее - это уже фанданго: настройка коннекта. Можно - через локальную сеть, можно - через dial-up (ppp), а можно (если ни того, ни другого нет) и отказаться.

За локалку не скажу, а вот с ppp все просто замечательно. Запускается программа pppsetup, которая задает обычные в таких случаях вопросы о телефоне дозвона (и заодно - о режиме набора номера), порте модема, заказываемой максимальной скорости, поддержке провайдером callback'а, имени провайдера и IP-адресе его DNS'а, пользовательских данных (логине и пароле). И, забегая вперед, скажу - если ответить на все эти вопросы честно и откровенно, в дальнейшем дозваниваешься до провайдера с пол-оборота.

Приключения конфигурирования на этом не кончаются: предлагается еще настроить и мышь. Если согласиться - последует только один вопрос, о протоколе, каковой нужно выбрать из списка. К слову - протокол imps2, урожденный для большинства (или всех?) мышей с колесиком, в этом списке присутствует. Ну а о порте подключения не спрашивается - видимо он определяется автоматически (для случая PS/2 и USB - правильно). После чего следует старт сервиса gpm и мышь в консоли активизируется.

Последние три вопроса также касаются стартовых сервисов - web-сервера Apache (с поддержкой PHP), ftp-сервера и майл-сервера Sendmail. Впрочем, от любого из них (и всех гуртом) можно отказаться...

Все. Конфигурирование окончено, следует предложение авторизоваться обычным пользователем lonix с одноименным же паролем (можно - в любой из иных доступных консолей). И начать знакомство с функциональностью системы.

А тут уж - болеро, страстное болеро. Ибо функциональность системы - превосходит самые смелые ожидания. На нажатие клавиши Tab в пустой командной строке следует вывод имен 830 команд. И, как в Рио-де-Жанейро, чего там только нет.

Впрочем, чего нет - скажу сразу: нет Иксов и Midnight Commander'а (подобно тому, как у рыб нет монокля и полного собрания сочинений Шпильгагена). Но зато (почти) все остальное - есть.

Угодно редакторов - пожалуйста: от простенького nano через компромиссный joe до полноразмерного vim'а. Браузеры - их есть у Гильермо: и lynx, и links. Музон послушать - не только mpg123 и mpg321, но и ogg - к вашим услугам.

А уж касаемо инструментария - так вообще полная фламенка: gcc 3.2 со всем гарнитуром поддержки, perl с python'ом, yacc с bison'ом, ну и все, что еще нужно для счастья сборщика программ.

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

$ setfont cp866-8x16 -m koi2alt

и убеждаемся - благородного дона в пятку не поразить, кириллица вводится и выводится справно. Русская локаль - да вот она,

$ export LANG=ru_RU.koi8r

Правда, вожделенной для многих cp1251 как будто не обнаруживается :-).

Что еще остается добавить? Текущая версия (1.0-rc5) - октябрьского розлива (2002 г.), и ядро в ней не самое новое - 2.4.19. Нет в нем поддержки LVM и XFS, не найти USB mass storage (сиречь, по простому, USB-драйвов). С моим чипсетом i845PE dma-мода для винтов заводиться отказалась (не говоря уж о аудио-кодеке - ICH4, как ни крути). Но это - вещи поправимые, причем даже следующей версии ждать не нужно.

Ибо каково предназначение этого дистрибутива? На мой взгляд - двоякое. Во-первых, его вполне можно перенести на винчестер. Средств автоматизации этого процесса (как в Knoppix'е) я не обнаружил, но все необходимые для этого компоненты собраны в каталоге /fake/needwrite (такие каталоги, как /etc, /usr, /var и т.д. - ссылки на его подкаталоги). Так что - создаем соответствующий раздел, переписываем на него требуемые компоненты, пересобираем по собственному вкусу ядро, подправляем по потребности схему инициализации (в классическом SysV-стиле) - и перед нами полноценная система для неограниченного наращивания, первозданный base Linux par excellence.

Но, мне кажется, основная цель Гильермо была в другом. А именно: создать полнофункциональную базу для сборки собственной системы с нуля, того самого Linux from Scratch. Базу, не требующую предустановленного на винчестере иного Linux'а. Ибо все для того потребное на рассматриваемом LiveCD имеется: жене сказал, что ушел к любовнице, любовнице - что остался с женой, а сам - загрузился с сидюшника и компилировать, компилировать, компилировать...

Так что если Knoppix - система для похода в гости, где, перебиваясь с джина на тоник, можно демонстрировать, что Linux - это круто (а те, кто видел, не дадут соврать - это действительно круто), то Lonix - это инструментальный ящик кустаря-линуксоида с персональным компьютером, собирающего систему для себя, любимого.

Самостройный Linux

2003-2004 гг

Этот материал сочинялся где-то на протяжении первой поливны 2003 г. и по ряду причин так и остался неоконченным. Тем не менее, надеюсь, что кое-что здесь не утралито актуальности.

Я столько времени писал о всяких Linux'ах, а также Free- и прочих BSD, что однажды в голову закралась шальная мысль - а не замахнуться ли на сборку своей собственной системы? Той самой, которая станет очередной ступенькой на пути к недосягаемому идеалу? А что, и замахнемся, - ответил я себе, и, по мере сил и возможностей, приступил к изучению вопроса. Результаты вылились в нечто похожее на

Исторические изыскания

Оказалось, что я не одинок в своем стремлении: мысль стать обладателем собственной уникальной системы приходила в голову многим. В Сети обнаружились упоминания о двух проектах под значимыми названиями Linux from Scratch (что в данном случае я перевел бы как "Linux по сусекам скребеный", сокращенно - LFS) и BYO Linux (то есть нечто вроде - "Построй свой собственный Linux").

Основоположник LFS - Герард Бикманс (Gerarg Beekmans). Устав, по его словам, от изобилия дистрибутивов, ни один из которых не удовлетворял его в полной мере, он решил собрать систему, в которой было бы только то, что он сам установил - и ни граном больше. Что и не замедлил претворить в жизнь.

Произведение Герарда назвать дистрибутивом в общепринятом понимании термина трудно. Это - не distribution на все случаи жизни, а, скорее, сборник рецептов, как, опираясь на исходники base Linux, построить собственную систему. Забегая вперед, замечу - построение это будет стопроцентно удачным только в том случае, если следовать писанию Герарда (знаменитой LFS Book, разные версии которой доступны ныне и в русском переводе (например, один), аки священному. И при этом пользоваться именно теми версиями базового софта, которые описаны им в соответствующей версии книги - в противном случае возможны всякие неожиданности.

Менее известен другой проект - BYOLinux. Начатый Джонатаном Торпом (Jonatan Thorpe) практически одновременно с LFS, ныне он прекратил свое развитие. Впрочем, описание Джонатана можно использовать как руководство к действию и до сих пор (с поправкой на версии софта, разумеется). Оно не столь детально, как LFS Book, однако, уже с силу этого, носит несколько более общий характер.

Однако выясняется, что исторически первым примером самостройного Linux'а был RockLinux Клиффорда Вольфа. Хотя и распространяется он обычно в виде прекомпилированных дистрибутивов, однако методически это - именно сборка "с нуля", дополненная системой автоматизированного обновления.

А вообще говоря, основоположник системного самосбора - не кто иной, как Линус Торвальдс: не из (собственноручно написанных) исходников ли собирал он свою первую Linux-систему? Впрочем, разработчики Free- и NetBSD также были вынуждены воссоздавать свои системы с нуля после запрета использования кода System V в BSD4.4...

Постановка проблемы

Как собирать Linux из исходников? Тут возникает извечная проблема курицы и яйца. Действительно, чтобы собрать компилятор, нужно как минимум иметь компилятор, а чтобы собрать шелл - требуется этот компилятор запустить (из командной строки шелла, разумеется). А и то, и другое требует библиотечных функций из главной системной библиотеки glibc. Которую, как нетрудно догадаться, также следует предварительно скомпилировать. Иными словами, как говорил мой бывший любимый начальник, "чтобы сварить суп из курицы, нужно как минимум иметь курицу". Что в данном случае означает - чтобы собрать работоспособную Linux-систему, ее уже нужно иметь в установленном (и работоспособном) виде.

Получается заколдованный круг, выход из которого - не столь очевиден. Линус на заре создания своей ОС решил эту систему просто: первые варианты Linux'а собирались под управлением другой операционной системы (волею судеб ею оказалась Minix знаменитого теоретика осестроения Энди Таненбаума). Однако ныне можно обойтись без этого, собирая Linux из Linux'а же.

Этим путем пошли и Герард, и Джонатан. То есть имея работоспособную Linux-машину в произвольном исполнении и полный набор исходников base Linux. Установленный дистрибутив может быть любым (при условии достаточной свежести компилятора gcc и библиотеки glibc, прочие компоненты не столь критичны). Ну и ядро родительской системы должно поддерживать все опции, желательные для системы дочерней (в первую очередь файловую систему, на которой предполагается разместить корень ее файловой иерархии).

По первоначальному методу Герарда сначала собирается (на отдельном дисковом разделе) некий самодостаточный минимум - bash, gcc, binutils и т.д., причем - статически слинкованные. Далее выполняется операция chroot и посредством этих программ собирается библиотека glibc. А потом - перекомпилируется, уже в динамически связанном виде, все ранее собранное хозяйство, плюс дособирается остальное из base Linux, ядро системы и средства загрузки. Причем позднее он перешел на двухэтапную сборку (т.н. метод pure LFS).

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

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

Мне же хотелось осуществить самострой системы а) идеологически чисто (то есть без заимствования компонентов родительской системы, б) из базовых компонентов произвольных (то есть наиболее свежих на текущий момент) версий (ведь не секрет, что многие из них обновляются достаточно часто), и, главное, в) на чистую машину. Не то чтобы у меня на винчестере не было какого-либо Linux'а. Более того, я даже осуществил самосбор, используя в разное время различные дистрибутивы (Gentoo, CRUX, Archlinux) дистрибутив в качестве родительских, - и осуществил успешно. Но вследствие этого успеха появилось желание разработать общий метод самосбора действительно с нуля (в том числе и на только что купленный компьютер).

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

Интуитивно было понятно, что собрать систему с нуля на голой машине можно было бы с помощью какого-либо LiveCD дистрибутива из числа расплодившихся в последнее время. Однако в большинстве из них декларировались в первую очередь легкость настройки и совместимость с оборудованием, а отнюдь не изобилие инструментальных средств. Однако и подходящий LiveCD нашелся быстро - некто lonix, сам собранный на базе LFS, о котором не так давно было рассказано на этих страницах. Он комплектовался не только полным сборочным инструментарием, но и средствами настройки доступа к Сети - как через локалку, так (что было важно в моих условиях) и по модему: на тот случай, если в ходе сборки понадобится докачать какую-нибудь забытую мелочь.

Таким образом, Lonix идеально подходил на роль слесарного чемоданчика. Однако для этой цели подошел бы, вероятно, и knoppix. А также многие из более современных Live-систем...

Выбор компонентов

Это - второй вопрос системного самостроя. Очевидно, что в такой системе, как в рюкзаке хорошего туриста, не должно быть ничего лишнего (на то десятидисковые дистрибутивы имеются), но все необходимое - должно быть. То есть содержимое моего рюкзака должно обеспечивать не только загрузку системы, но и средства для ее наращивания, а также решения насущных практических задач. В результате сложился (пока у меня в голове) некоторый самодостаточный набор, который можно назвать Base Linux.

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

В свою очередь, непременные компоненты также можно разделить на безальтерантивные и те, для которых возможен выбор из нескольких вариантов. В число первых попадают ядро Linux (еще бы - если бы у бабущки был... сами знаете что, она звалась бы дедушкой) и тесно связанный с ним комплекс утилит управления дисковыми разделами (linux-utils), загружаемыми модулями (modutils), обязательно задействуемыми файловыми системами (ext2fsprogs, procinfo и родственными, чисто волюртаристически я включил бы сюда и devfsd - без файловой системы устройств нынче не житье). Фактически нет выбора и для инструментов работы с файлами, от fileutils (в то время этот пакет еще не слился с sh-utils и textutils в единый coreutils) до архиватора tar и компрессоров gzip и bzip2 (причем последние два - не альтернатива, а неизбежность), утилит обработки текстов (grep, gawk, sed, diffutils, patch - в данном контексте они выступают как средства обеспечения работы установочных сценариев), базовых средств поддержки сети (netkit и т.д.). Ну и конечно инструментарий собственно для сборки (gcc, binutils, make и тому подобный) плюс основные системные библиотеки (от glibc до ncurses и zlib).

Альтернативно-обязательные компоненты определяются пользовательскими предпочтениями и потребностями. Среди них в первую очередь упомяну патчи ядра для расширения его функциональности. Далее - инструментарий для работы с файловыми системами, отличными от ext2fs, начиная с той же xfsprogs и заканчивая системами управления логическими томами (пакеты lvm-user и evms) и программными raid-массивами, пакеты управления консолью (традиционный выбор между kbd и console-tools), средства управления системными сообщениями (sysklogd или его более продвинутые аналоги типа metalog) и контроля над пользовательскими аккаунтами (впрочем, в Linux этой цели обычно служит пакет shadow).

Как ни странно, достаточно альтернативен и выбор средств обеспечения загрузки системы, начиная с собственно загрузчиков (GRUB или LILO, не говоря уже о сторонних), и заканчивая системами инициализации: конечно, в Linux обычно традиционно используется пакет sysvinit (стартовая система в стиле System V), но никто ведь не может запретить и старт в BSD-стиле.

Наконец, последний штрих к обязательному натюрморту - командная оболочка (шелл, по простому). Здесь теоретически также не обязательно замыкаться на bash, можно бы взять любую POSIX Shell-совместимую. Однако на практике весь процесс сборки Linux оказывается настолько тесно завязанным именно на bash-скриптинг, что альтернативный выбор выходит себе дороже (не зря же это была одна из первых программ, которую Линус запустил на своем ядре).

Что касается опциональной части Base Linux, то здесь по определению альтернативно все. Начать с наипервейшего пользовательского приложения - текстового редактора: для целей конфигурирования вполне можно ограничится чем-то предельно простым, типа nano. Если же требуется вся мощь системы обработки текста - на очереди будет скорее всего vim (к тому же - стандарт для всех Unix-систем вообще). Ну, а из промежуточных решений - я лично обеими руками за joe.

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

В итоге мы получаем список чуть более чем в полсотни пакетов, общий объем которых укладывается в сотню мегабайт. Их можно скачать заблаговременно. А можно, поскольку, как я уже сказал, Lonix позволяет настроить подключение к Сети, тянуть и по ходу дела. Возникает вопрос - какие версии? На мой взгляд - самые свежие из стабильных (или самые стабильные из свежих:-)). Правда, в этом случае схема установки LFS Герарда не сработает в полной мере (она довольно жестко привязана к версиям пакетов), и в нетривиальных ситуация придется искать собственное решение, но не это ли - самое интересное?

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

А на кой все это?

Возможно, с этого следовало бы начать, но лучше поздно, чем никогда: прежде чем провести в сборке целый день (при не самом худшем раскладе), стоит задаться вопросом, а за каким это нужно?

Действительно, существует немалое количество прекрасных пакетных дистрибутивов, на инсталляцию которых в полном объеме нынче (с настройками) уходит меньше времени, чем на установку Windows. Есть и дистрибутивы Source Based, их развертывание требует несколько большего времени, но зато позволяет держать процесс (почти) под полным контролем. Стоит ли тратить время на собирание очередного велосипеда? Да еще и без гарантии (по первому разу, по крайней мере) адекватного затраченным усилиям результата...

Навязывать свое мнение не буду (а мой ответ, как легко догадаться, сугубо положительный). Просто постараюсь перечислить резоны, которые могут подвигнуть на системный самострой.

Первый резон очевиден: создание системы, в которой будет установлено только то, что нужно именно вам, и только так, как это для вас подходит. Ибо ни один из существующих дистрибутивов не обходится без того, чтобы добавить хоть что-нибудь от себя (хотя в Source Based дистрибутивах отсебятина сведена к практически достижимому минимуму).

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

Ну и последнее по счету - спортивный интерес. Хотя по значению этот резон я поставил бы на первое место. Ибо без него все остальные просто теряют силу.

Об источниках и исходниках

В первом варианте этих заметок я явно недостаточно уделил внимание а) источникам информации о системном самострое и б) принципам подбора пакетов. Задним числом исправляю упущение.

Для начала хотел бы подчеркнуть, что LFS Book Герарда - не догма, а руководство к действию (предваряемому размышлениями). По крайней мере, мне кажется, что автор рассматривал ее именно так. Действительно, мало радости, затратив полные астрономические сутки (а именно столько уйдет на самострой работоспособной системы при самом благоприятном расположении звезд), получить в точности то же самое, что получил Герард (или кто угодно другой) - тогда уж проще развернуть за считанные минуты тот же CRUX. Ибо суть самостроя - реализовать собственные представления об идеальной Linux-системе.

Во всяком случае, именно такой позиции придерживается уже сформировавшееся LFS community - это те, кто каждый собирает свой собственный Linux. И результатами своих изысканий члены его регулярно делятся посредством т.н. намеков - такой перевод слова hints кажется мне наиболее удачным в данном случае. Здесь можно найти намек на то, как прикрутить к файловую систему devfs, как мигрировать на XFS, как использовать GRUB вместо LILO, и многое, многое другое. В частности, для ярых нелюбителей SysV стиля (к коим отношу и себя), - как заменить Герардовский bootscripts на BSD init. Немало там можно найти и об особенностях установки отдельных приложений на голый base Linux.

Раз уж речь зашла о devfs - должен заметить, что MAKEDEV Герарда работает не во всех случаях. В то же время подключение в ядре файловой системы устройств и ее автомонтирование при старте прошло у меня безошибочно.

Об ошибках при компиляции отдельных пакетов... Я собирал самостройный Linux несколько раз, используя как материнскую систему и Gentoo Linux, и Lonix (LiveCD, сам собранный по мотивам LFS), и CRUX. И, по моим наблюдениям, ошибки сборки а) жестко привязаны к конкретным версиям пакетов), и б) особенностям материнской системы (вероятно, к тому, как в ней собрана glibc). Так, из Gentoo мне не удалось собрать fileutils, причем не статически (об этом Герард предупреждает, и даже соответствующий патч у него есть), а именно динамически. Вернее, собираться-то они собирались, но при попытке дать команду ls появлялось сообщение об ошибке сегментации. И потому пришлось поначалу пользовать статически собранные версии первой стадии.

Так вот, для полного предотвращения воздействия glibc'а материнской системы в hint'ах можно найти метод сборки "чистого" (pure, по утверждению авторов, неких Райана Оливера и Грега Шафера) LFS. Правда, при знакомстве с ним вспоминается анекдот про удаление гланд через... ну, сами знаете, через что, но - опять же по заявлению авторов, - работает (самому проверить пока не удалось). И, замечу задним числом, в текущих (5.X) версиях LFS Book именно метод pure LFS принят в качестве канонического.

Ну и о выборе пакетов... Канонический набор Герарда можно, с одной стороны, спокойно урезать за счет ed, bin86, MAKEDEV, а как показывает пример CRUX - и за счет Texinfo (info-документация, по моему скромному мнению, есть самое GNU'тое изобретение мрачных бородатых GNU-хакеров). С другой стороны, он (опять же ИМХО) должен быть расширен инструментарием для работы с файловыми системами, отличными от ext2fs, и, конечно же, логическими томами (LVM) - гораздо проще создавать файловые системы типа /usr/(local), /opt, /var или /home сразу на логике, чем потом заниматься их переносом. Опять же, devfs, на мой взгляд, ныне - абсолютно необходимый компонент Base Linux (попробуйте без нее регулярно работать с USB-накопителями). И, конечно же, замена для vim может быть любой - при условии, что это будет joe :-)(любой другой редактор потянет за собой дополнительные библиотеки).

Это я все к тому, что Base Linux - такая же системная целостность, как и Distributions FreeBSD. И должна включать в себя все то, что необходимо любому пользователю Linux, и исключать - то, что должно выбираться в индивидуальном порядке (или - отдаваться на откуп составителям дистрибутивов).

Так что можно выделить две составляющие успеха Linux-самостроя: 1) внимательное чтение предшественников (включая hint'ы) и 2) собственные размышления о том, какой бы вы хотели видеть идеальную систему.

Этапы большого пути

Итак, необходимость самостройного Linux'а осознана, конецепция сборки (в первом приближении) обдумана, пакеты собраны, LiveCD вставлен в привод, руки тянутся к трем сакраментальным клавишам для перезагрузки машины. Однако - по рукам себе, по рукам: прежде необходимо наметить план дальнейших мероприятий.

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

Начальный этап - выполнение комплекса подготовительных действий типа создания дисковых разделов и файловых систем на них, их монтирования, развертывания файловой структуры, получения и (или) размещения исходников и т.д.

Продолжением этого становится довольно нудный процесс компиляции некоего минимума пакетов. Пакеты собираются в статически связанном виде, то есть разделяемые функции (из glibc и тому подобных библиотек) встраиваются непосредственно в исполняемые бинарники, а не подгружаются по мере надобности. В результате пакеты разбухают в объеме и становятся неповоротливыми. Однако это - единственная возможность обеспечить их функционирование на третьем, определяющем, этапе.

А назван третий этап определяющим потому, что от него зависит успех или провал всей операции. Он начинается с процедуры т.н. смены корня (что это такое - расскажу своевременно) и завершается сборкой главной системной библиотеки glibc.

Четвертый этап - решающий, в ходе его будет собран и установлен должным образом почти весь набор Base Linux.

Наконец, пятый этап - завершающие (но очень ответственные) штрихи, призванные обеспечить загрузку новообразованной системы.

Вот теперь все цели ясны, задачи определены. За работу, товарищи!

Начало всех начал

Абу Талиб сказал: все имеет свое начало, и все начинается с дороги. В нашем случае первый шаг по этой дороге - разметка диска.

Собственно, ничего необычного тут нет - стратегия и тактика разбиения диска описывалась на этих страницах. Два обязательных раздела - корневой и под своппинг. Необходимый объем для установки Base Linux (включая архивы исходников, место для временной их распаковки, и так далее) превышает полтора гигабайта. Плюс некий запас свободного пространства (как известно, производительность файловых операций в любых Unix-системах резко деградирует, если объем такового падает ниже 10%) - итого 2 Гбайт абсолютного минимума. Ну а swap-раздел - стандартно, между 128 Мбайт и 2 Гбайт (рекомендуется - удвоенный объем ОЗУ).

Впрочем, своя рука - владыка, и мы имеем возможность гибкого варьирования разделов. Например, можно создать маленький загрузочный раздел под /boot - это настоятельно рекомендуется, если в планах у нас использование GRUB в качестве начального загрузчика (а в моих планах - всегда именно так, никаких преимуществ перед ним у Lilo нынче не осталось).

Далее, и корневой раздел можно сделать не очень большим, выделив из его состава такие каталоги, как /var, /usr/X11R6, /usr/local и /opt. Последние три раздела в данном случае очень даже целесообразно обособить, ведь именно в них будет по умолчанию устанавливаться весь софт из числа Base Linux inside - мы же не для того собираем собственную систему, чтобы ограничится спартанскими минимумом обязательных компонентов. С другой стороны, в обособлении раздела под /usr в данном случае не видно резона - ведь большая часть Base Linux соберется именно в нем, после чего он станет своего рода read only. При большом объеме оперативной памяти нет необходимости и в отдельном разделе под /tmp - лучше будет в дальнейшем подмонтировать в него файловую систему tmpfs. Ну и конечно, каталог /home всегда должен лежать в отдельной патриции, это следует затвердить, как догмат веры.

С файловыми системами - также никакой специфики, выходящей за рамки ранее описанного. Для раздела под /boot практически обязательна классика жанра - ext2fs. Под корень, если сделать его небольшим, также рекомендуется отвести (не извести) ext2fs или, для страховки, ее журналируемый вариант ext3fs. Файловые системы на прочих разделах - в соответствии с пристрастиями, потребностями и возможностями. Так, XFS не поддерживалась в то время каноническим ядром и, соответственно, дистрибутивом Lonix - но она и целесообразна для (очень) больших разделов, например, под /home, который на этом этапе отнюдь не обязательно задействовать.

Теперь раздел, которому суждено стать корневым в нашей грядущей системе, следует подмонтировать к Live файловой системы, загруженной с нашего CD. Создав предварительно для этого соответствующую точку монтирования (в Lonix для этой цели служит каталог /fake/needwrite - прочие ветви файловой системы отнюдь не Live, а, напротив, очень даже read only). Ну и переходим в этот раздел - например, cd /fake/needwrite/basix.

Следующий шаг - развертывание файловой иерархии, что мы будем делать более-менее в соответствии с заветами документа, описывающего одноименный стандарт - Filesystem Hierarchy Standard (благодаря Виктору Костромину мы имеем возможность ознакомиться с ним и по русски). А именно: в корне создаем файлового древа создаем каталоги

$ mkdir bin boot dev etc \
home lib mnt opt root \
sbin usr/{X11R,local} var

Напомню - все пути даются относительно точки монтирования будущего корневого раздела, в данном примере - /fake/needwrite/basix. Далее, при необходимости, подмонтируем к соответствующим точкам - opt, tmp, usr/{X11R,local}, var, - предопределенные для них разделы:

$ mount /dev/hd?# opt

и так далее. В каталогах usr, usr/X11R, usr/local развертываем их внутреннюю иерархию - с подкаталогами ~/bin, ~/etc, ~/include, ~/lib, ~/sbin, ~/share, ~/src и еще глубже (типа ~/share/man, ~/share/man/man1 и так далее).

Проделываем ту же процедуру для каталога opt - здесь согласно стандарту следует выполнить нечто вроде

$ mkdir opt/{bin,doc,include,info,lib,man}

Далее - каталоги var и tmp. В первом случае нам потребуются подкаталоги

$ mkdir var/{cache,lib,local,lock,log,opt,run,spool}

А вот каталог tmp оставляем пустым - просто как точку монтирования для грядущей tmpfs после того, как будет собрано ядро с поддержкой оной.

Теперь создаем символические ссылки - минимум одна, usr/tmp -> var/tmp, нам потребуется:

ln -s var/tmp usr

Наконец, изменяем атрибуты доступа для каталога /root - он должен быть закрыт для доступа обычных пользователей:

$ chmod 0750 root

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

$ chmod 1777 tmp var/tmp

Теперь можно приступить к развертыванию архивов исходников, предварительно скачав их из сети и разместив в каком-либо подходящем каталоге (например, usr/src - но обязательно в дереве каталога basix). Создаем каталог под собственно дерево исходников (скажем, usr/src/tmp) и переходим в него. Для статической сборки второго этапа все программы Base Linux нам не потребуются. Поэтому разворачиваем только необходимый минимум: bash, gcc, make, binutils и еще несколько (общим числом 18 - в него обязательно должен входить выбранный текстовый редактор). На этом подготовительный этап самостроя системы можно считать законченным.

Продолжение банкета

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

Чтобы статически связанные программы в дальнейшем не путались с нормально (то есть динамически) слинкованными (они будут собраны на одном из следующих этапов), отведем для них специальный каталог в дереве /mount_point/basix (будущем корне нашей системы), например, static. И предпишем, чтобы все именно в него помещались результаты компиляции.

Обе задачи - статическая линковка и размещение в каталоге /mount_point/basix/static для ряда наших программ достигаются указанием соответствующих опций конфигурирования:

$ ./configure --enable-static \       --prefix=/mount_point/basix/static

Форма команды приведена в предположении, что мы находимся в корневом каталоге дерева исходников собираемой программы. Для некоторых программ (из нашего статического набора это binutils и gcc) сборку рекомендуется выполнять из специально созданного каталога, изолированного от дерева исходников (типа binutils-build и gcc-build, соответственно). В этом случае после создания такого каталога следует перейти в него, а команда конфигурирования примет вид вроде

$ ../binutils-X.XX/configure [options]

Однако многие из собираемых программ не реагируют на опцию конфигурирования --enable-static (это можно проверить по команде ./configure --help). В этом случае, понятно, она опускается, а статическая линковка задается на стадии компиляции.

Некоторые программы могут потребовать включения или отключения дополнительных опций. Из последних особенно важна опция --disable-nls, поскольку поддержка национальных языков а) не нужна на этом этапе и б) часто вызывает проблемы в статически слинкованных пакетах.

Компиляция программ и установка их в соответствующие ветви каталога basix/static выполняются, как обычно, последовательностью команд

$ make && make install

Для программ, не понимающих опции --enable-static, в строке make следует указать дополнительные флаги компиляции, предписывающие статическую сборку, в большинстве случаев таковым выступает флаг LDFLAGS=-static, или:

$ make LDFLAGS=-all-static

Префикс также может указываться как флаг компиляции, например:

$ make PREFIX=/mount_point/basix/static

Порядок при сборке статически слинкованных пакетов значения не имеет. По завершении мы получаем в каталоге static нечто вроде слепка корня - с подкаталогами bin, i686-pc-linux-gnu, include, info, lib, libexec, man, share, var. Ну а дерево исходников, из которых все это собиралось (то есть usr/src/tmp), лучше просто целиком удалить - собрать в нем же динамически связанные пакеты не рекомендуется.

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

И еще. Пожалуйста, не воспринимайте эту часть как руководство к действиям, которые описаны здесь в самом общем виде. Ибо, ей-же богу, не вижу смысла дублировать Герардово Писание или, паче того вывод ./configure --help для каждой программы. Так что именно к этим источникам и следует обратиться за деталями.

Определяющий этап

Для начала я должен извиниться перед читателями за некоторую скомканность изложения. Дело в том, что заметки эти были начаты до появления русского перевода LFS Book. И я собственно хотел в них совместить изложение рекомендаций Герарда с собственными впечатлениями от этого увлекательного процесса. Однако неожиданно поймал себя на мысли, что чем к более конкретным вещам я перехожу, тем больше скатываюсь на пересказ LFS Book. Что теперь не интересно даже тем, кто не очень хорошо владеет английским. Поэтому по возможности именно конкретные детали я буду опускать. Если что покажется неясным - обращайтесь к первоисточнику, информация в нем практически исчерпывающая. Хотя и касается лишь одного из возможных путей самостроя.

Определяющий этап самостроя - сборка главной системной библиотеки glibc. Однако прежде нам предстоит еще одно чрезвычайно ответственное дело - смена корневого каталога на /mount_point/basix, осуществляемая командой chroot. Выполнив ее, мы остаемся наедине с нашими статически собранными программами, и на помощь материнской LiveCD-системы рассчитывать уже не сможем. А потому нам следует озаботится созданием соответствуюшего окружения в новой среде обитания.

В этом окружении должны существовать: пути к исполнимым файлам относительно нового корня (то есть переменная PATH), и домашнему каталогу суперпользователя (переменная HOME), указание на тип терминала (переменная TERM), желательный вид приглашения командной строки (переменная PS1). Ну и о самой командной оболочке забывать не следует (ею на время будет /static/bin/bash - в отсчете от нового корня). Да и освободиться от прежнего окружения не помешает - дабы не путать новую шерсть со старой (это делается командой /static/bin/env -i - ясно, что она должна предществовать установке новых переменных). В итоге полная команда по смене корня приобретет вид вроде следующего:

$ chroot /mount_point/basix/static/bin/env -i \
HOME=/root TERM=$TERM PS1='u:w$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/static/bin \
/static/bin/bash --login

Сборка собственной системы дает практически неограниченные возможности по ее оптимизации. Правда, Герард Бикманс делать этого не рекомендует во избежание проблем. Однако буде такое желание все же возникнет - флаги оптимизации для компилятора gcc можно также определить в качестве переменных при смене корня, дабы потом каждый раз не вводить их вручную. Мой опыт показывает, что оптимизация под процессор (собиралось на Pentium 4) проходит безболезненно почти во всех случаях, немало способствуя итоговому быстродействию. Я использовал следующие значения флагов оптимизации:

CFLAGS="-march=pentium4 -O3 -pipe \
-fomit-frame-pointer"
CXXFLAGS="$CFLAGS"

При желании прибегнуть к более жестким флагам оптимизации настоятельно рекомендуется ознакомиться с документацией по gcc наличной версии (ее можно найти здесь).

Итак, вводим команду chroot со всеми ее атрибутами и ждем Enter. Все, мосты сожжены: на время окружающий мир за пределами каталога basix для нас как бы перестал существовать. Правда, выход в него возможен через другие виртуальные консоли - благо lonix поддерживает их аж шесть штук. Но, во избежание путаницы, на это лучше не полагаться. Да и необходимости в том не возникнет - если, конечно, все предществующие шаги были сделаны правильно.

Еще одно необходимое подгтовительное действие - монтирование файловой системы proc как разделяемой в соответствующий каталог будущей корневой файловой системы:

$ mount proc /proc -t proc

Кроме того, вспоминаем, что не зря создавался нами каталог /mount_point/basix/tmp - очень не вредно было бы подмонтировать в него файловую систему tmpfs, если таковая поддерживается дром материнской системы, это сдорово увеличит скорость компиляции (для небольших пакетов - в разы):

# mount tmpfs /mnt/tmpfs -t tmpfs

Теперь Герард рекомендует создать несколько символических ссылок - /etc/mtab -> /proc/mounts, /bin/bash -> /static/bin/bash, /bin/sh -> /static/bin/bash. Не вижу причин не последовать его совету. Напомню только, что здесь и далее отсчет корня идет от того каталога, в который мы переместились командой chroot.

Вслед за этим создаются файлы /etc/passwd и /etc/group - командой echo или в текстовом редакторе (не зря же мы его также собрали статически. В первый заносится пока единственный аккаунт - для администратора (root), с символом x вместо пароля (он пока ни к чему). А состав групп - более или менее произвольный. Тот список групп, который дает Герард, используется его сценарием MAKEDEV, чтобы не ломать голову, сделаем, как приказано. При желании же проявить самодеятельность нужно помнить, что в списке групп обязательно должна присуствтвовать группа tty - иначе в дальнейшем не установятся некоторые пакеты (в частности, util-linux).

Ну и собственно создание файлов устройств в каталоге /dev. Правда, мы же планируем использовать файловую систему devfs, которая создает все необходимые устройства автоматически - однако без файлов устройств не обойтись на стадии сборки программ.

Теперь - внимание, последний из подготовительных перед сборкой glibc шагов. Распаковываем (непосредственно в каталоге /usr/src) архив выбранной нами версии ядра системы, получая каталог вида /usr/src/linux-2.6.XX, делаем на него символическую ссылку /usr/src/linux -> /usr/src/linux-2.6.XX.

Теперь т.н. заголовочные файлы ядра (header-файлы) следует скопировать туда, где они будут искаться при компиляции glibc (да и других пакетов тоже). Делать это следует очень внимательно, поэтому я не буду приводить соответствующих команд во избежание опечаток - лучше просто обратиться к труду Герарда. Где заодно можно прочитать обоснование того, почему header'ы следует именно копировать, а не устанавливать на них символические ссылки.

Теперь можно заняться собственно glibc. Распаковываем архив (например, в каталог /usr/src/tmp2), переходим в новообразованный каталог glibc-2.X.X и распаковываем в нем glibc-linuxthreads. А теперь потребуется внести некоторые изменения в исходники. У Герарда для этого предназначен специальный патч, однако он, естественно, привязан к конкретной версии glibc, мы же собраем ее произвольную (наиболее свежую на данный момент) версию. Так что придется вооружиться текстовым редактором (именно поэтому я настаивал на его включении в набор статически собранных пакетов).

Необходимость модификации исходников обусловлена следующим. Во-первых, в нашей недоношенной chroot-системе пакета glibc еще нет - и потому определение идентификатора пользователя по его имени (login'у) невозможно, а в исходниках glibc как аргумент команды chown фигурирует один пользователь (догадайтесь, како? - правильно, root). Так что все упонминания root'а следует заменить на его ID - то есть на 0.

Далее, при установке glibc используется Perl, если таковой доступен, и сслыки на его местонахождение даны в виде переменной $PERL. Однако в нашем случае Perl именно недоступен, поэтому переменную следует заменить на абсолютный путь - /usr/bin/perl, в результате он при конфигурировании просто игнорируется.

Итак, ищем, где же имеют место быть скараментальные символьные последовательности:

$ grep -R root *;
$ grep -R $PERL *

Наперед скажу, что в той версии glibc, которая собиралась мной (2.3.1), да и в более ранних, слово root мы найдем в файле login/Makefile, а переменную $PERL - в файле malloc/Makefile (команды даются в предположении, что мы находимся в каталоге glibc-2.3.X). Так что открываем их в текстовом редакторе и зменяем соответствующие вхождения, как сказано выше.

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

19.08.2008

SourceMage GNU/Linux

2002 г

Конец прошлого тысячелетия в мире Open Source прошел под знаком дружелюбия - дружелюбия к конечному пользователю. Это ознаменовалось тем, что, как грибы после дождя, на свет появлялись дистрибутивы Linux, к этому самому end'овому user'у обращенные душой и телом. Дистрибутивы же традиционные, с мрачными инсталляторами и текстовым редактором как главным конфигурационным средством, казались прочно оттесненными в маргинальную область ретроградствующего корифейства и узкоспециального применения. Мнилось, что еще немного - и Linux станет большей MacOS, чем сама Windows. А об fdisk'е и vi станет неприлично упоминать в смешанном обществе.

Нельзя сказать, что само по себе это было плохо (если, конечно, не брать крайности дружелюбия навроде Redmond Linux или Lindows). Именно благодаря подчеркнутому дружелюбию к простым смертным число Linux-пользователей возросло многократно. Но тут-то и обнаружилась интересная закономерность биологического характера, достойная внимания Линнея или Дарвина: оказалось, что конечный пользователь Linux - существо совершенно иной организации, нежели пользователь Windows, не говоря уже о MacOS. И потянуло его, этого самого конечного линуксоида, к первозданным истокам...

Ничем иным я не могу объяснить волны дистрибутивов, именуемых их разработчиками Source Based. Лишенных всех внешних "бантиков", имеющих лишь непритязательные текстовые инсталляторы (а то и вообще таковых не имеющие - роль программы-установщика с успехом выполняет командная оболочка). Но - глубоко современных по своему наполнению, использующих все новейшие разработки мира Linux и снабженных столь внятной документацией, что с построением системы фактически с нуля способен справится любой функционально грамотный человек.

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

Доступен SourceMage (или, как его именуют авторы - SourceMage GNU/Linux, сокращенно - SMGL) на своем собственном сайте в виде сжатого (bzip2) iso-образа объемом порядка 100 Мбайт (к слову сказать - замечательно быстро скачивающегося). Правда, после распаковки их оказывается более 200, но все равно - по нынешним временам объем весьма скромный. Диск загрузочный, сделан на базе isolinux, вследствие чего представляет собой т.н. LiveCD - полноценную Linux-систему с "живой" (то есть допускающей монтирование) файловой системой в оперативной памяти.

Загрузка SMGL осуществляется в чисто текстовом режиме, без всякого там излишеств в виде графической консоли через frame buffer. Инсталлятор же - псевдографический, сделан под явным влиянием FreeBSD. Что, впрочем, пошло ему только на пользу.

Однако - по порядку. Кроме образа диска, на сайте проекта можно ознакомиться с документацией, в том числе и инструкцией по установке. Инструкцию полезно распечатать и держать под рукой - на диске ее в легкодоступном виде не обнаруживается. Да и смотреть было бы негде - в ходе инсталляции активизирована одна-единственная консоль. А сам инсталлятор никакого help'а не предлагает.

Загрузка с CD осуществляется в два этапа. По завершении первого (основного) появляется панелька с предложениями

  • считать модули (для SCSI, RAID или сетевых карт);
  • выйти в чистый Shell;
  • сменить root-устройство;
  • продолжить загрузку.

Сразу становится ясным многоцелевой характер диска. В частности, возможность выполнения процедуры chroot делает очень удобным производство спасательных работ, типа, скажем, правки /etc/lilo.config - нет нужды помнить о соответствующих опциях.

Однако для установки SMGL, как можно догадаться, требуется выбрать последний пункт меню. Что приводит к завершению загрузки и появлению главного меню инсталляционной программы. В нем поначалу семь пунктов:

  • A - Введение (краткие сведения о дистрибутиве и словеса о его несравненных достоинствах;
  • B - Выбор языковой поддержки;
  • C - Создание дисковых разделов;
  • D - Монтирование файловых систем;
  • M - Done;
  • N - Shell;
  • O - Отключение путеводителя по меню.

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

Но пойдем последовательно по стадиям. Выбор языка включает четыре момента:

  • установку экранного шрифта;
  • установку раскладки клавиатуры;
  • как бы выбор языка;
  • и, почему-то, назначение редактора по умолчанию.

Шрифты и раскладки выбираются из меню, включающего все, что обычно имеется в международных дистрибутивах Linux. В частности, кириллических (в CP866 и KOI8) шрифтов - преизрядно, правда, все они одинаковы по начертанию (обычный набор на базе alt, alt-b, alt-c и его вариации на тему KOI8). Раскладок - также вдоволь (ru, ru1-ru4, ru-win и т.д.), я всегда выбираю ru4 (это - с win-маркировкой клавиш и переключением по CapsLock).

А язык - это не что иное, как locale, а отнюдь не язык установщика, как можно было бы подумать. Причем русских locale - аж две, и под одинаковыми названиями (ru_RU). Чисто по наитию я решил, что первая в списке - ru_RU_KOI8-R, вторая же - CP1251, и, как ни странно, угадал. Правда, полной русификации это не дает - после установки придется вручную включить карту соответствия (если не выбирать экранные шрифты KOI8 и KOI'шную же раскладку), а также активизировать ее на всех консолях. Но это - не издержки конкретного дистрибутива: видимо, иноземцам и в страшном сне не привидится, что можно не только иметь пять чарсетов для одного языка, но и использовать разные наборы символов для ввода и для вывода.

А редакторов по умолчанию предлагается аж три - elvis (клон vi), jed и nano (простенький редактор типа pico или ee). Правда, в ходе установки к нему придется прибегнуть только один раз, но и после нее он сохранится в соответствующей переменной окружения как умолчальный.

Для разделения диска предлагается три инструмента - cfdisk (выбор по умолчанию), стандартный fdisk и новая утилита parted. О fdisk все знают, cfdisk я не люблю, а parted, ныне предлагается GNU-сообществом в качестве универсального инструмента для манипуляций с дисками и файловыми системами. В контексте текущей задачи замечу, что parted позволяет создавать не только дисковые разделы, но и файловые системы на них - сиречь, по простому, по-DOS'овскому - выполнять форматирование. Правда, пока только ext2fs. Так что если есть желание использовать что-нибудь более продвинутое - это придется сделать на следующей стадии.

Стадия эта так и называется - монтированием. Здесь для каждого монтируемого раздела на выбор предлагаются - и ext3fs, и ReiserFS, и XFS. Следует учесть только, что первый же выбранный раздел принудительно монтируется как корневой. Так что если создавался маленький dev/hd?1 для /boot, начинать процесс следует с /dev/hd?3 (предполагается, что /dev/hd?2 отводится под swap).

Кроме swap-раздела, можно (уже на следующей стадии - да и не обязательно нужно) создать и swap-файл. Это обусловлено тем, что инсталлятор SourceMage требует суммарного объема памяти (RAM+SWAP) в 1 Гбайт. То есть, скажем, при RAM 128 Мбайт и рекомендуемом при ядре 2.4.x swap-разделе RAMx2 на время установки дополнительно потребуется еще и swap-файл в 640 Мбайт.

По окончании возни с разделами и файловыми системами путеводитель предлагает начать собственно установку. Она сводится к распаковке и развертыванию имеющегося на CD тарбалла (~/cdrom/image.tar.bz2) объемом около 90 Мбайт, включающего в прекомпилированном виде основные компоненты системы (забегая вперед - в весьма скромном количестве), на что по инструкции отводится полчаса (на машине класса PIII/Athlon).

После развертывания тарбалла можно выбрать оптимизацию под процессор - i586, i686, K-6 или Athlon. Я забыл сказать, что SourceMage требует минимум Pentium'а (не так уж и сурово по нынешним временам); прочие системные запросы - 128 Мбайт памяти, 8 Гбайт на диске, хороший коннект, знание "железа" и 5 часов свободного времени. Причем коннект и объем на диске потребуются потом - после установки, для дополнительного софта, устанавливаемого посредством подобия системы FreeBSD-портов. А вот возможно мощный процессор, достаточное количество памяти и вдоволь свободного времени - нужны уже сейчас.

Однако я опять забежал вперед. Так вот, оптимизация под каждый из поддерживаемых процессоров возможна по двум направлениям: увеличения быстродействия и уменьшения объема генерируемого кода. Быстродействие можно увеличить просто (speedy) или с нарушением правил ANSI и IEEE (risky, не рекомендуется ввиду возможных проблем). Объем кода же можно уменьшить либо просто так, за здорово живешь (tiny), либо за счет удаления отладочной информации (strip). Рекомендуются первый и последний методы.

Затем, после определения часового пояса, наступает стадия конфигурирования ядра. Для начала можно выбрать один из трех предопределенных вариантов: linux-speacup, linux-vanilla, linux-xfs. Со вторым из них все ясно - это то самое ядро, которое можно получить на www.kernel.org. Последний вариант также понятен - ядро с заплатками от SGI для полноценной поддержки файловой системы XFS. А вот первый включает (в разделе консольных драйверов) поддержку так называемой голосовой консоли (Speacup Console Speech) вплоть до использования голосовой клавиатуры (Speakup keymap) по умолчанию. Что, конечно, очень интересно, однако, вроде бы, требует соответствующего оборудования (перечислено с дюжину внешних и внутренних моделей синтезаторов). Да и вряд ли это оборудование позволит надиктовывать на компьютер русские тексты (вроде этой статьи, например).

После выбора базового ядра инсталлятор с завидной настойчивостью (переспрашивая два раза) предлагает начать его немедленную компиляцию. Соглашаться с этим, скорее всего, не следует - внести изменения в умолчальную конфигурацию тогда не удастся. А в ней (по крайней мере в linux-speakup) нет, например, поддержки эмуляции IDE через SCSI (необходимо для использования ATAPI CD-R/RW) или графической (через frame buffer) консоли. Так что на заманчивое предложение лучше дважды ответить отказом, после чего сконфигурировать ядро обычным (через make menuconfig) образом. Не забыв про поддержку файловой системы devfs - она вовсю используется в этом дистрибутиве.

Последняя стадия, отмеченная как опциональная (но на самом деле необходимая) - конфигурирование LILO. Дело в том, что по умолчанию оно записывается в загрузочный сектор Linux-раздела. Так что если внешний загрузчик не используется (или нет желания грузиться с дискеты), в /etc/lilo.config нужно внести соответствующие исправления. Правда, само по себе lilo, как потом выяснилось, при этом не перезапускается...

Вот и все - жмем на Done и оказываемся перед выбором: выйти в shell или перезагрузиться. В свете только что сказанного первый вариант однозначен - нужно выйти в shell и перезапустить lilo. Я этого не сообразил, и потому перезагрузка прошла без успеха - ведь ни малейшего LILO в MBR'е моего диска не имелось. Но зато я оценил достоинства CD как rescue-системы. Достаточно оказалось загрузиться с него, после первой стадии загрузки выбрать пункт смены корня (Choose root device), после этого выбрать корневой раздел свежеинсталлированного SourceMage (и тип его файловой системы в соответствие с реальностью) - а тут уж в появившейся командной строке просто сказать lilo.

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

$ grep -R consolechars /etc

Выясняем, что все языковые настройки собраны в /etc/init.d/bootmisc.sh, имея вид вроде

loadkeys ru4
consolechars -f Cyr_a8x16
export LANG=ru_RU

Вторую из этих строк преобразовываем в

consolechars -f Cyr_a8x16 -m /usr/share/consoletrans/koi2alt.trans

где полный путь к карте соответствия оказался обязательным, после определения локали дописываем (при желании работать с десятичной точкой некоторым программам это требуется)

export LG_NUMERIC="POSIX"

и завершаем файл строками:

for i in 1 2 3 4 5 6
do
echo -ne \033'(K' > /devices/vc/$i
done

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

Достояние, как я уже обмолвился, оказывается весьма скромным - около 600 команд базового набора, и все (для сравнения, в Gentoo базовый набор - более 750 команд). Ни о каких X'ах нет и речи, в качестве редакторов - те же elvis (вызываемый также и как vi), jed и nano, из командных оболочек - голимый bash/bin/sh как ссылка на него). Что особенно удручает, если взглянуть (посредством df) на объем занятого дискового пространства - более 500 Мбайт. И куда оно, спрашивается, девалось?

Оказалось, ухнуло в очередную вариацию на тему портов - однако, тенденция... Именуемую здесь совсем уж по своему - sorcery. Имеющей место в каталоге /var/lib/sorcery/grimoire, демонстрирующей удобное псевдографическое меню и вообще массу возможностей. На вскидку побольше, чем в портах FreeBSD или в портежах Gentoo (как и в последнем, посредством этой системы можно пересобрать базовый комплект, но еще и выборочно удалить отдельные его компоненты).

За исключением одной-единственной мелочи - неочевидности штатной возможности брать исходники с локального диска: ничего подобного каталогу distfiles в sorcery не обнаруживается. Не зря же в системных требованиях фигурировал хороший коннект (broadband connection). В довершение бед не было и общего конфигурационного файла, где раз и навсегда можно было бы прописать локальный путь к каталогу с исходниками. В конечном итоге файл такой отыскался - /var/lib/sorcery/grimoire/utils/sorcery/DETAILS, но далеко не во всех версиях SGML, из виденных мною, лн имеет место быть изначально.

Конечно, проблема эта тем или иным способом решаема. Однако можно констатировать, что на наши условия дистрибутив этот не особенно рассчитан - далеко не все на пост-советских пространствах могут похвалиться broadband'ом. Так почему же я столько распинался по его поводу?

Во-первых, SourceMage хорошо отражает наметившуюся тенденцию - бурное, не побоюсь этого слова, развитие дистрибутивов Source Based. А во-вторых, он весьма достойно ее представляет. Инсталлятор дистрибутива, на мой взгляд, близок к некоему оптимуму. С одной стороны, он с минимальными усилиями позволяет получить разумную (пусть и не идеальную) и вполне рабочую систему, окончательную доводку которой можно отложить на потом. С другой же, при наличии времени, желания и толики опыта, в ходе инсталляции можно выполнить практически все действия по настройке, в том числе и довольно тонкой.

Таким образом, SourceMage же может быть принят за эталон дружелюбия к пользователю - но не к пользователю вообще, а именно к тому самому, специфическому Linux-пользователю (в источниках на англо-американском языке мне встретилось обозначение - power-user). Так что дистрибутив этот, безусловно, заслуживает если не применения, то - ознакомления.

Lunar Linux

2002 г

Множится число дистрибутивов Source Based. Конечно, многие из них похожи, как близнецы-братья. Особенно это характерно для систем, базирующихся на Sorcerer - об одном из его клонов, именуемом SourceMage GNU/Linux, уже шла речь на этих страницах. И, казалось бы, возвращаться к сей теме было бы скучно. Однако очередной представитель клана - Lunar Linux, - отличается некоторыми уникальными особенностями, заслуживающими хотя бы краткого описания.

Iso-образ "лунного" Linux'а доступна на сайте проекта (http://www.lunar-linux.org/). Он достаточно легковесен, менее 80 Мбайт в компрессированном (посредством bzip2) виде. Развернув и записав его на болванку, мы получаем не просто загрузочный диск, а т.н. Live-CD, позволяющий выполнить также ремонтно-спасательные манипуляции.

Программа установки Lunar, созданная под явным влиянием sysinstall из FreeBSD, внешне мало отличается от инсталлятора Sorcerer (и его клона SourceMage, ранее мной описанной). Однако некоторые ее особенности, как уже было сказано, заслуживают внимания.

Для начала после загрузки меню предлагает выбор - считать модули (например, для поддержки сетевых карт или SCSI-адаптеров), выйти в голимый shell, сменить корневой каталог (полезно при ремонтных операциях) или продолжить, то есть перейти к собственно установке.

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

Второй шаг, как легко понять, - подготовка диска. Для чего предлагается любой из трех инструментов - cfdisk, fdisk, parted. Далее на разделах создаются файловые системы (здесь заслуживает внимания поддержка XFS) и осуществляется их монтирование. Затем - предложение создать swap-файл, поскольку установщик требует суммарного объема RAM+Swap в 2 Гбайт. Очевидно, что при swap-разделе должного объема необходимости еще и в swap-файле нет (тем более, что создается он уж очень медленно).

Третий шаг - собственно установка "лунного" Linux'а, это просто лобовое переписывание корневой файловой системы инсталляционного CD. А затем - собственно изюминка дистрибутива, настройка флагов оптимизации комплилятора в глобальном масштабе. Разумеется, этот момент имел место быть и в соплеменных системах (Sorcerer и SourceMage), однако здесь процесс этот выгодно отличается детальностью.

Сначала - выбор версии компилятора, gcc 2.x или gcc 3.x. Очевидно, что только последняя позволяет проявиться оптимизации во всей красе. Далее - запрашивается, требуется ли флаг -pipe. Предполагаю, что вреда от нее не может быть ни малейшего, а ускорению процесса она способствовать должна.

Вслед за этим выбираем базовую платформу - кроме x86, доступны Alpha, PowerPC, Sparc. Работа Linux'а на не-Intel'овских платформах - штука интересная, но, за отсутствием таковых, для меня не актуальна. Как, боюсь, и для большинства моих читателей...

Далее - уровень оптимизации, от -O0 (сиречь без всякой оптимизации вообще), до -O3, обещающего высшую производительность. Хотя далеко не все исходники могут быть собраны с такими установками. Так что, возможно, стоит ограничиться синицей в руках - уровнем -O2. Тем более, что есть веские основания предполагать, что именно его посредством достигается оптимальное быстродейтсвие.

Теперь - непосредственно указание процессора. В соответствии с возможностями gcc 3.X, доступен весь ряд процессоров Intel (от i386 до Pentium-4) и AMD (от K6 до Athlon MP и XP). При этом устанавливается флаг -march=cpu_type, так что следует быть внимательным: приложения, собранные, скажем, под Athlon XP, на обычном Athlon работать не будут.

Вслед за этим можно с исключительнрой детальностью установить другие флаги оптимицизации, вплоть до -ffast-math, что обеспечивает наивысшую оптимизацию по скорости с нарушением всякого рода стандартов (почему и именуется risky - не для всех приложений таковое приемлемо). Затем оптимизация под дополнительные наборы инструкций, от уже поросшего мхом MMX до 3DNow и SSE2. Фигурирует в списке еще и пункт Altivec - аналог Intel'овских мультимедийных инструкций для процессоров PowerPC.

Настройка оптимизации заиграет практически сразу - на стадии конфигурирования ядра. Его можно выполнить любым способом - посредством make config, make menuconfig и даже make xconfig (последний способ, впрочем, я не испробовал, не вполне представляю, как он может быть реализован в чисто консольном инсталляторе). Здесь можно включить экспериментальную опцию - копиляцию с учетом особенностей gcc версии 3.x, в результате чего ядро будет оптимизировано под современные процессоры (тот же Pentium-4, например, или Athlop XP).

После конфигурирования и сборки ядра логичный шаг - настройка Lilo. По умолчанию оно устанавливается в загрузочный сектор корневого раздела системы, однако ничто не воспрещает записать его и в MBR.

Финал установки - настройка сетевых соединений, причем не только Ethernet, но и модемного. Для чего следует указать телефон провайдера, свои учетные данные и, при необходимости, IP-адрес прокси-сервера. Впрочем, мне с "умолчальными" настройками прозвониться до своего провайдера не удалось...

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

Выполнить таковую можно в автоматическом режиме - посредством утилиты Lunar (аналог волшебного Sorcery из Sorcerer и SourceMage). Для чего требуется либо выход в Интернет (желательно с быстрым и устойчивым коннектом), либо полный набор заблаговременно скачанных исходников, размещаемых в каталоге /var/spool. После пересборки система начинает шевелиться живее, хотя быстродействие ее все равно оставляет желать лучшего. Почему - понять трудно, опыт последних версий Gentoo показывает, что оптимизация под Pentoim-4 и использование компилятора gcc 3.X способны дать результат просто превосходный.

Через Lunar осуществляется и установка всех прочих дополнительных пакетов. Действует эта система сходно с портами FreeBSD - то есть исходники устанавливаемого пакета автоматически скачиваются с мастер-сайта или его зеркал, указанных в соответствующих конфигурационных файлах, архивы разворачиваются, конфигурируются и компилируются - с теми самыми флагами, которые были указаны на стадии установки. Процесс этот поглощает немало времени (и денег на оплату трафика), поэтому лучше скачать исходники заблаговременно (и не худо бы - за казенный счет). Хорошо иметь также мощный процессор, много (или очень много) оперативной памяти, большой диск (побочные продукты компиляции легко съедят несколько гигабайт, хотя потом их, конечно, можно будет истребить).

Вот, пожалуй, и все. Остальные детали настройки "лунного" дистрибутива ничем не отличаются от Sorcerer сотоварищи. И, подобно последним, вызывают двойственное отношение. С одной стороны, программа установки весьма удобна, предоставляет массу возможностей настройки, состав базовой системы актуализирован до предела. Система портирования удобна в использовании и, навскидку, эффективна в работе (да и просто эффектна). С другой же - изобилие средств оптимизации не сопровождается адекватным результатом: по быстродействию все клоны Sorcerer'а очень отстают от того же Gentoo. Кроме того, оптимизацией можно увлечься до того, что ряд приложений просто откажется собираться...

Однако ругательных слов в адрес Lunar говорить не хочется: на мой взгляд, портированные дистрибутивы - явление безусловно положительное. Я неоднократно уже говорил, что для освоившегося с системой портов FreeBSD возврат к дистрибутивам пакетным - сущее мучение. И радует, что идея эта все более приживается в мире Linux. Ну а то, что реализация ее - до Free'шного прототипа пока не дотягивает, так какие же их годы...

RockLinux: нерушимый, как скала

2002 г

Эта - первый Source Based дистрибутив в истории Linux. И, по иронии судьбы, - один из наименее известных в этой категории систем. Настоящая заметка призвана хоть в какой-то мере исправить эту несправедливость.

Не проходит ли век user-ориентированных систем? Казалось бы, еще недавно каждый вновь выходящий дистрибутив Linux считал своим долгом перво-наперво декларировать свое дружелюбие к конечному пользователю. В качестве меры каковой принималось Windows-подобие - вплоть до заявлений о большей Windows'совости, чем сам Windows. Причем в некоторых таких дистрибутивах Windows-подобие можно было воспринять как издевательство (или проявление ну очень тонкого чувства юмора).

Противовесом этому было появление волны дистрибутивов, root-ориентированных. И в качестве примера рассмотреть RockLinux, названный его создателем, Клиффордом Вольфом, "нерушимым, как скала". К слову сказать, именно Клиффорд и употребил впервые обозначение - "дистрибутив, дружественный к администратору". Правда, позднее за такими системами закрепился термин - Source Based дистрибутив.

Собственно говоря, RockLinux разрабатывается уже достаточно давно - с начала 1999 г.. И именно он был первым из плеяды дистрибутивов, основанных на исходниках. Однако до недавнего времени он был труднодоступен по ftp. И к тому же не имел iso-имиджа инсталляционного диска (видимо, из вящей дружбы к администратору)... Так что на Руси... - ну, сами понимаете...

Однако со временем изначальный RockLinux стал основой прекомпилированной системы, получившей название Desktop RockLinux (или, сокращенно, да простят меня читающие это дамы, dRock). Который распространяется в виде iso-имиджа и ориентирован уже на конечного пользователя. Да, разные варианты RockLinux можно найти на официальном сайте проекта: http://www.rocklinux.org/download.html

Степень root-freundshaft этого дистрибутива интересовала меня давно. А тут наконец представилась возможность с ней ознакомиться воочию. Чем я и не замедлил заняться.

Текущая на тот момент версия dRock'а включала образы двух дисков - собственно инсталляционного и дополнительного (ныне число дисков выросло до 3). Для установки необходим только первый; на втором размещались KDE, Apache и еще некоторые приложения (AbiWord, Galeon, Nautilus и т.д.,), дружелюбием к администратору не страдающие.

Установка системы начинается с загрузки (для которой используется первый диск). В ходе ее следует несколько вопросов: загружать ли модули ядра, да как именовать виртуальные консоли - по новому ли, vc/1-vc/6, или по старому, ttw/#. Ибо PockLinux был одной из первых систем, задействоваших штатно файловую систему устройств devfs; сейчас она воспринимается как атавизм, но тогда, в первые годы текущего тысячелетия, являла собой большой шаг вперед, существенно облегчая работу со сменными, например, устройствами.

После ответов пользователь оказывается перед приглашением командной строки оболочки. К слову сказать, полноценной bash, а не один из всяких там урезанных уродцев типа ash: с автодополнением, историей команд и прочими атрибутами. И консолей доступно вдоволь (конкретно, шесть), и переключаться в них можно обычным образом (Alt+F#).

Правда, что с ней, строкой этой делать, - a priory, без чтения документации, совершенно неясно. Благо, если документация не была прочитана до начала процесса, к ней можно обратиться сейчас. Для чего CD монтируется в каталог /src (правда, об этом тоже нужно предварительно знать), и с него открывается файл /src/Documentation/INSTALL (именно в указанных регистрах).

Тут следует учесть, что, как уже отмечалось, в dRock'е используется файловая система для файлов устройств - devfs, она задействуется уже на стадии установки, причем - без режима обратной совместимости). И потому и сейчас, и в дальнейшем процессе монтирование следует выполнять командами вида

$ mount /dev/cdroms/cdrom0 /mount_point

для CD или

$ mount /dev/discs/disc#/part# /mount_point

для дисковых разделов.

Итак, посредством команды more (less на стадии установки не предусмотрен) открываем файл документации (можно - и в другой консоли, для сверки в процессе последующей инсталляции) и читаем, что же делать дальше. А дальше, оказывается. следует создать разделы и файловые системы на них. Для чего предлагается использовать программы fdisk или cfdisk, например, так:

$ fdisk /dev/discs/disc#/disc

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

Ну, раздел для своппинга размечается обычным образом (mkswap, не забывая только про особенности devfs). А для прочих разделов разработчиками настоятельно рекомендуется журналируемая система ReiserFS (создаваемая командой mkreiserfs). Хотя, как сказано, не возбраняется и ext2fs/ext3fs, учреждаемая, как обычно, командой mkfs.ext2 (последняя - с дополнительной опцией -J, символизирующей журналирование); в последних версиях DRock поддерживается и XFS с JFS.

Далее раздел для своппинга активизируется (командой swapon), а созданные файловые системы монтируются в каталог /trg (если при разбиении диска не ограничиваться корневым разделом, перед монтированием /home или /usr следует создать соответствующие точки монтирования - /trg/usr, например).

Все предыдущие действия были, в общем, достаточно обычными - тот же порядок манипуляций применяется, например, и в Slackware (и практически во всех Source Based дистрибутивах). А вот теперь начинается собственно установка - отдачей директивы Install в командной строке.

После этого на фоне dRock'овского логотипа появляется весьма симпатичная псевдографическая панель с меню, предлагающим пункты:

  • выбора пакетов,
  • суммарной информации,
  • перехода в консольный режим,
  • установки,

а также about и quit. Начинать, естественно, следует с выбора пакетов. Они сгруппированы в несколько серий - базовые компоненты, средства разработки, документация, мультимедиа, сеть, наука (!), текст, утилиты и еще пара-тройка. В сериях base и dev определенные пакеты отмечены по умолчанию, иные же можно добавить. Как и "умолчальные" - изъять, причем - любые, никаких запретов или даже предупреждений не последует; то есть соблюдение зависимостей пакетов остается на совести пользователя. Прочие пункты - девственно чисты, тут пользователю предоставляется полная свобода выбора.

Надо сказать, что из чего выбирать - есть. Даже без учета дополнительных дисков, в dRock включен вполне достаточный набор приложений, утилит и средств разработки, включая XFree86, GNOME, WindowMaker и прочее. Среди которого - и мой любимый joe, попавший почему-то в утилиты, и несколько разных shell'ов, и средства для работы со звуком и видео.

Меня сразу заинтересовало, как в dRock решается больной вопрос дистрибутивостроителей - контроль зависимостей пакетов при ручном их выборе. Оказалось - никак. Видимо, из дружеского расположения к администратору, система предоставляет ему возможность продемонстрировать свои знания в этой области. Буде же таковых не имеется (или просто лениво разбираться, от каких lib'ов зависит Midnight Commander) - никакой помощи, даже предупреждающих сообщений, ожидать не следует. Так что вполне может оказаться, что после установки половина самостоятельно выбранных приложений просто откажется запускаться. А теоретически рассуждая, можно даже установить систему без ядра - снять отметку с соответствующего пункта серии base системой не возбраняется.

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

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

А вот первый вариант позволяет выполнить необходимый минимум настроек (правда, уже без менюшек, в "черном" диалоге). Перво-наперво - клавиатура. Ее можно вбить сразу, или, набрав list, ознакомиться со всем списком (то же - и при дальнейших настройках). В котором, к приятному удивлению, оказываются русские раскладки - ru просто, ru (ywerty), ru3. Затем - всякие repeat, delay, numlock, выбор часового пояса, и, наконец, язык.

Под последним, как можно предположить (и в дальнейшем - убедиться в справедливости этого) понимается locale. Для Руси локализацию можно выбрать любую - с наборами символов KOI8-R (и даже -U), CP1251, CP866, ISO-8859-5. Правда, загрузка соответствующих экранных шрифтов при этом сочтена излишеством, что приводит потом к эффекту, хорошо известному пользователями: передаче русскоязычных сообщений шрифтами с базовым (американским) набором символов.

Вслед за этим настраивается служба консольной мыши (gpm). Сначала, естественно, вопрос - а нужна ли она вообще (на мой взгляд - так обязательно, но у иного ведь может быть и особое мнение). Затем - определение порта, сиречь физического интерфейса, типа (иными словами - протокола), и количества кнопок.

Следом - настройка (условно говоря) загрузчика - предлагается GRUB, с созданием меню для оного и записью в MBR. После чего тем не менее предлагается настроить еще и LILO. Что, возможно, не лишне - никакой настройки GRUB как таковой не происходит. И если на диске была уже установлена некоторая (угадайте, какая) система, ее загрузка в меню не предусматривается, это потребуется сделать вручную.

После загрузчика настраивается сеть. Здесь можно выбрать автоматическую настройку через DHCP (если таковая служба имеется) или задать IP-адрес и прочие параметры вручную. Ну а сетевой интерфейс определяется сам собой - в двух случаях, с которыми я имел дело, правильно.

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

После перезапуска же можно попытаться и исправить огрехи с зависимостями. Для этого штатно предусмотрено два средства: повторный запуск программы Install и комплект для управления пакетами. Первое из них, к сожалению, у меня не сработало, вызывая постоянные сообщения об ошибках. Второе же - это программа pkg-install, близкородственная по идеологии pkg_add из BSD-систем или pkg-tools из Slackware.

К сожалению, по реализации она значительно уступает утилите из FreeBSD, например. В частности, никаких зависимостей автоматически она не проверяет. И при последующей попытке запустить программу, для которой таковые нарушены, система выдает крайне информативное сообщение о недостаче библиотеки lib_имя_рек.so, без малейшей конкретизации, в каком именно пакете этот самый "Имя рек" искать следует - видимо, опять же из дружбы к сисадмину (чтоб служба ему медом не казалась).

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

В общем, от dRock'а у меня остались противоречивые, но в целом приятные впечатления. Отсутствие контроля зависимостей можно объяснить идеологическими причинами: разработчики не без оснований полагают, что опытный пользователь справится с этой проблемой лучше, чем любая автоматика. Ограниченность набора приложений также аргументирована Клиффордом: он включил в дистрибутив только то, что лично протестировал на работоспособность в своей системе. Конечно, есть явные недоработки - если уж берешься устанавливать национальные раскладки клавиатуры и, тем более, locale, то сам бог велел и об экранных шрифтах подумать.

Главное же - появление дистрибутивов типа RockLinux было отражением смены тенденций в дистрибутивостроении. Каковая в дальнейшем получила развитие в таких системах, как Gentoo, CRUX, Archlinux и многих других.

Vector Linux: один из эпигонов Slackware

В 323 году до нашей эры (или, как стало модно говорить в последнее время среди бывших коммунистов-атеистов, до Рождества Христова) в Вавилоне скончался величайший завоеватель древности — Александр Филиппович Македонский. Борьбу за его наследство начали его ближайшие соратники, которых прозвали диадохами, а потом - их наследники, именовавшиеся эпигонами.

Диадохи, по крайней мере наиболее амбициозные из них, такие, как Пердикка, Селевк, Антигон Одноглазый, претендовали на все наследие Александра. И потому все кончили плохо. Аппетиты эпигонов были скромнее — каждый из них старался выкроить из рухнувшей державы кусочек. В чем большинство из них и преуспело...

Патрик Фолькрдинг, создатель самого старого (из ныне существующих) дистрибутивов Linux, жив, слава Богу (хотя среди правоверных слакваристов бытует убеждение, что Патрик — и есть Бог). И даже, по последним сведениям, более или менее здоров — во всяком случае, работу над новыми версиями продолжает в обычном темпе. Однако ситуация вокруг его произведения напоминает взаимоотношения диадохов и эпигонов.

Одни из его последователей разрабатывают всеобъемлющие варианты Slackware, ориентированные на более иные аппаратные платформы, например, AMD64 или PowerPC (сама по себе Slackware официально поддерживает только i386, собираясь с оптимизацией под i486). Другие же активно развивают на основе нее нишевые продукты.

Конечно, как и все исторические аналогии, предложенная — достаточно условна, и потому прошу относиться к ней не вполне всерьез. Во-первых, никто из последователей Патрика не стремиться разрушить сходную систему — напротив, каждый привносит в нее что-то свое, позитивное. Во-вторых, все они, насколько мне известно, свято следуют заветам Патрика в принципах дистростроения, среди которых:

  • превалирование согласованности подбора компонентов над стремлением к всеохватности — Slackware до сих пор не породила ни одного монстроидального клона;
  • конструкторский характер системы — как и сама Slackware, большинство ее клонов предусматривают активное соучастие пользователя в ее установке и настройке, чему в немалой степени способствуют тщательно прокомментированные скрипты и конфиги.

Так что, называя последователей Патрика одних диадохам, а иных же — эпигонами, я ни в коем случае не вкладываю в последнее слова уничижительного смысла (как, впрочем, не вкладывали его и древние). А просто пытаюсь подчеркнуть отличие разрабатываемых ими систем от прототипа.

И еще: эпигоны в нашей истории не сменили диадохов, а предшествовали им. С первых дней существования Slackware на ее базе разрабатывались многочисленные специализированные мини-дистрибутивы, преимущественно для сетевых применений. А с некоторых пор вал декстопизации и юзерофильности захватил и их — появились десктоп-ориентированные, дружественные к пользователю, клоны Slackware.

Нельзя сказать, что сама по себе Slackware не пригодна к использованию на десктопе — очень даже пригодна. Да и недружественной ее не назовешь — вот только друзей она выбирает тщательно. Иными словами, сам процесс установки и настройки Slackware требует определенного уровня подготовки — не очень высокого, но все же...

Вот и родилась идея создания клонов Slackware, предназначенных для быстрого развертывания не вполне опытным пользователем, которому после этого предоставляется возможность совершенствовать свои знания в ходе практической работы (или в свободное от оной время). То есть примерно так же, как идеей PC-BSD или DesktopBSD было снижение уровня предварительной подготовки для входа в мир BSD-систем.

Об одном из таких дистрибутивов - ZenWalk - уже была речь на этих страницах, в статьях Валерия Моторина и автора этих строк. Однако он был далеко не первым представителем "юзерофильной" ветви эпигонов Slackware. На эту роль, по-видимому, может претендовать Vector Linux, о котором и пойдет речь далее.

Общая характеристика

Разработка Vector Linux была начата канадцами Робертом Ланге (Robert S. Lange, в большинстве источников его считают создателем дистрибутива) и Даррелом Ставемом (Darrell Stavem) на самом рубеже тысячелетий — в ттом самом приснопамятном 2000-м году, который не знали, к которому из них приписать. Во всяком случае, уже в апреле 2002 года номер версии достиг 2.5. А в дальнейшем версии обновлялись с интервалом примерно в три квартала, в данный момент текущей является 5.8. Официальный сайт проекта, как нетрудно догадаться, - http://www.vectorlinux.com/.

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

В настоящее время Vector распространяется в трех редакциях:

  • стандартная (или Download Edition), доступная для свободного скачивания с сайта проекта и его зеркал; включает в себя XFce в качестве десктопа и легкие офисные приложения - AbiWord и Gnumeric;
  • Deluxe Edition — предназначена для заказа по почте, по цене под тридцатник вечнозеленых; содержит большое количество дополнительных приложений (KDE, OOo) и печатную документацию;
  • SOHO Edition — может быть как заказана за деньги, так и свободно скачана; представляет собой законченное решение для конторских надобностей, включает в себя KDE в качестве десктопа, OOo и еще ряд приложений, в том числе Xara Xtreme.

Кроме этих установочных дистрибутивов, имеется еще и две редакции LiveCD: стандартная и Beril-редакция (с трехмерными эффектами рабочего стола, каковым в данном случае выcтупает KDE).

SOHO Edition и LiveCD, как правило, запаздывают относительно стандартной редакции на несколько месяцев. Так, стандартная редакция текущей версии (5.8) вышла в декабре 2006 года, а SOHO и LiveCD, идущие за тем же номером, в настоящее время находятся в стадии бета-тестирования и кандидатов в релизы, соответственно (хотя версии ядра и основных приложений в них обновлены до актуальных ныне).

В настоящей заметке речь пойдет о VectorLinux 5.8 Beta 2 (SOHO). Ее, в виде iso-образа компакта объемом 700 Мбайт, можно свободно скачать с сервера проекта или одного из его зеркал, что я и проделал.

Установка

Установка производилась на ноутбук Fujitsu-Simens AMILO A-1650G/001, о котором я много говорил ранее. Поэтому в данном контексте напомню только, что он имеет интегрированную графику от ATI и физическое разрешение матрицы 1280x800.

После загрузки с компакта на экране предстает пингвин с приглашением к загрузке:

boot:

Нажатием клавиши Enter загружается ядро по умолчанию, рассчитанное на диски sata (ide). Можно указать, какое ядро грузить, или загрузить установленную систему, то есть диск пригоден для ремонтных работ. Однако никакой встроенной помощи не предусмотрено.

После загрузки ядра и предлагается нажать Enter для запуска инсталлятора.

Инсталлятор текстовый, в стиле, обычном для Slackware и ее клонам. Доступа к другим виртуальным консолям нет.

Главное меню инсталлятора включает пункты:

  • Keymali - выбор раскладки клавиатуры
  • Start - поиск источника установки и начало инсталляции,
  • Lilo - установка соответствующего загрузчика
  • Exit - возврат в командную строку.
  • В списке раскладок русская имеется, но какая из многочисленных существующих - непонятно, поэтому лучше этот пункт пропустить.
  • По выборе пункта Start происходит определение установочного CD, правильность результата предлагается подтвердить.
  • После этого появляется подменю с пунктами:
  • Readme - основная информация о релизе, в том числе системные требования, списки новых и обновленных пакетов, и т.д.
  • Resize - перераспределение дискового пространства для разделов с файловыми системами Ext2 и FAT;
  • Fdisk - запуск стандартного cfdisk для разметки диска;
  • Install - собственно установка;
  • Exit - он и есть.

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

  • Reboot - перезагрузка для добавления новосозданного раздела (разделов); в обычной ситуации можно спокойно проигнорировать;
  • Retry - возврат в cfdisk для внесения корректив, если есть подозрение, что при разметке чего-то напортачили;
  • Return - продолжение установки; не рекомендуется при наличии раздела с Windows, хотя почему — я не понял.

После этого происходит возврат к предыдущему меню, в котором только и остается, что выбрать пункт Install.

Вызываемое при этом подменю содержит пункты:

  • Check - проверка установочных файлов (можно пропустить);
  • Swali - назначение раздела для своппинга;
  • Root - выбор раздела под корневую файловую систему;
  • Mount - монтирование дополнительных разделов;
  • Bulk - выбор интегрированных пакетов для установки;
  • Package - выбор дополнительных пакетов;
  • Install - собственно установка;
  • Configure - постинсталляционные настройки.

В качестве дополнительных можно определить разделы под фиксированные каталоги - /home, /opt, usr, /var, tmp, /mnt/win; характерно, что каталог /boot в этом списке отсутствует.

Из интегрированных пакетов можно выбрать OOo (отмечен по умолчанию) и пакет с исходниками ядра.

Выбор пакетов - снятием отметок, по умолчанию стоящих на всех позициях списка. Список включает именно дополнительные пакеты, общим числом в полтора примерно десятка. Именно тут можно видеть Xara Xtreme, FireFox, Opera, и так далее. Основная же система лежит на компакте в виде единого архива собственного формата (TLZ), объемом 2095 Мбайт.

Далее можно выбрать пакеты интеранционализации для KDE. В списке имеются - французская, еврейская, голландская, польская и португальская локализации. Русской, увы, нет.

Затем происходит активизация свап-раздела, форматирование прочих разделов, развертывание основной системы и установка дополнительных пакетов, если они были выбраны.

Процесс установки протекает очень быстро, по завершении его предлагается выбрать загузчик - Lilo или GRUB. Вопрос, куда ставить, в MBR или загрузочный сектор корневого раздела, также задается.

Далее предлагается множество вариантов видеорежимов для bootsplash'а и собственно для Linux-консоли, однако все они стандартные - для моего 1280x800 ни один не хорош. Благо, можно ограничиться стандартным текстовым режимом - 80x25.

Постинсталляционное конфигурирование включает:

  • выбор раскладки клавиатуры;
  • установку часового пояса;
  • Autosetuli - определение базового "железа";
  • настройку сети;
  • настройку звуковой системы;
  • настройку оконной системы X;
  • инициализацию "железа";
  • задание пароля root'а и создание пользовательских аккаунтов.

По ходу автоматического определения оборудования предлагается подтвердить его правильность — для мыши и других компонентов.

При конфигурировании Иксов предлагается задать глубину цвета по умолчанию, затем разрешение — список доступных опять включает только стандартные значения.

Выбор режима загрузки предлагает четыре варианта — текстовый для десктопа или сервера, графический для них же.

Активизация аппратуры — предусмотрена для ISA-карт, последовательных и параллельных портов, alsa и tmpfs.

Пароль root'а задается обычным образом. А при создании пользовательского аккаунта запрашивается его логин, реальное имя, членство в дополнительных группах (соглашаясь с умолчальными, для страховки добавил wheel). Ну и пароль надо не забыть, разумеется. Приятно, что ограничений на минимальную длину пароля не установлено ни для пользователя, ни для администратора.

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

После установки: краткий итог

При загрузке в графическом режиме запускается kdm, и, после авторизации, страртует KDE - декстоп по умолчанию в этой редакции дистрибутива. Сказать про него особенно нечего, KDE как KDE (версии 3.5.6), кроме собственной темы, кстати, не очень подходящей для людей с плохим зрением (скриншот, 454KB), ничем не отличается от любого другого.

Никакой русификации нет и в помине. Однако полный набор русских локалей (включая и ru_UA) в системе присутствует. Есть в Иксах и шрифты, содержащие кириллицу (в частности, по умолчанию используются гарнитуры семейства DejaVu). Так что выполнить русификацию системы труда не составит. Как и привести Иксы в человеческое состояние — уж больно погано смотрится разрешение 1024x768 при матрице 1280x800.

А вот набор приложений — весьма своеобразен. То, что в качестве офисного пакета и браузера по умолчанию используются OpenOffice.org и SeaMonkey (наследник интегрированной Mozilla), вместо соответствующих приложений KDE, — понять можно: представление о недостаточной функциональности последних распространено весьма широко. Сложнее понять побуждения разработчиков, включивших в состав дистрибутива большое количество Gtk-приложений, в том числе и бесспорно уступающих своим KDE-аналогам. Например, наличествующий в составе дистрибутива Bluefish до возможностей Quanta далеко не дотягивает.

Бросается в глаза изобилие дублирующих программ. Так, из браузеров, кроме SeaMonkey, наличествует не только konqueror, что понятно — это неотъемлемая часть KDE, — но и FireFox. В составе главного меню я насчитал три клиента мгновенных сообщений (IM), три вьювера растровых изображений, три программы для работы с цифровыми камерами, два IRC-клиента. А уж пересчитывать аудио- и медиаплейеры банально поленился — впечатление такое, что они там собраны все. В общем, для легкого и компактного, согласно декларации разработчиков, дистрибутива, дублирующих приложений явно в избытке. Поневоле приходит на память ZenWalk, жестко укомплектованный по принципу: одна задача — одна программа...

Разумеется, от излишества программ можно освободиться, да и кое-что недостающее доустановить. Благо, к тому имеются все предпосылки — пакетные репозитории (а, как я уже говорил, кроме собственных репозиториев, Vector Linux может использовать таковые Slackware) и средства управления пакетами. В числе последних наличествует, во-первых, pkgtool, а во-вторых, slapt-get. Последний представляет собой несколько облегченную разновидность великого Debian'овского apt-get, адаптированную к пакетам, формат которых в принципе не признает никаких зависимостей.

Разумеется, slapt-get не являют собой какой-либо специфики Vector Linux. Однако в прародительской Slackware его нужно устанавливать и настраивать руками, здесь же он подается в виде, готовом к употреблению. Правда, некоторая подгонка его потребуется — но это легко выполнимо прямым редактированием соответствующего конфига, /etc/slapt-get/slapt-getrc, в котором достаточно дописать новые репозитории и закомментировать — ненужные (буде такие подвернуться под руку).

А дальше — все как в исходном apt-get: slapt-get update для активации изменений, и вперед, к глубокому тралению слакваревых закромов.

Возвращаясь к предустановленным пакетам, отмечу: из всего богачества программ, входящих в штатный комплект, более всего впечатляет, конечно, Xara Xtreme: до сего дня я так и не удосужился с ней ознакомиться. И теперь беру назад свои филиппики в адрес векторных редакторов под Linux, на которые я не скупился на протяжении всего времени работы в этой операционной системе. Похоже, мы действительно получили полноценный инструмент для создания векторных изображений самого разнообразного характера.

Субъективное быстродействие дистрибутива, если это понятие вообще имеет физический смысл (см. соответствующее обсуждение на POSIX.ru), производит впечатление, хотя и несколько противоречивое. Так, хваленая скорость загрузки Vector показалась мне изрядно преувеличенной — ничем с этой точки зрения он не выделяется. А вот с точки зрения быстроты загрузки KDE-приложений и их "реактивности" в ответ на действия пользователя он, пожалуй, вне конкуренции. Остается ощущение, что KDE-программы в Vector (в среде KDE же) работают столь же быстро, как Gtk-приложения в ZenWalk (в среде XFce). А вот Gtk-приложения в Vector проявляют изрядную задумчивость...

От каких-либо оценок дистрибутива воздержусь: думаю, что сказанного достаточно, чтобы каждый сделал их сам. Для себя же лично я не вижу веских оснований использовать Vector Linux в своей практической работе. Тем не менее, о потраченном на него времени не жалею: иначе когда бы еще дошли руки поглядеть на Xara Xtreme...