Linux з нічого

Про збірці дистрибутива LRs-Linux з нуля. Або майже з нуля

Як відомо, існує безліч дистрибутивів Linux, хороших і, іноді, різних. Одні з них являють собою повні колекції всього і вся. Втілюючись, в результаті, в метадістрібутіви, найкращим прикладом чого служить усім відомий Sisyphus. Інші йдуть по шляху самообмеження, виливаючись у підсумку в щось на зразок Linux на одній дискеті [1]. Треті ж, в пошуках балансу між цими шляхами, звертаються і ідеї користувальницької наращиваемости, що вперше з'явилася в FreeBSD.

Однак існує радикальне рішення цього діалектичного протиріччя - відмова від дистрибутива взагалі. Тобто збірка функціональної системи з окремих компонентів, починаючи з ядра, компілятора, glibc і закінчуючи одними додатками. Що знайшло своє втілення у проекті Linux from Scratch.

Звичайно, не можна сказати, що в цьому випадку Linux збирається з зовсім вже нічого. Хоча на перших же сторінках свого керівництва [2] розробник, Герард Бікманс (Gerard Beekmans) заявляє про принципову відмову не тільки від будь-яких прекомпілірованние пакетів, але і від будь-якого роду CD ROM і завантажувальних дисків при складанні базових компонентів. Однак в підсумку виявляється, що необхідною умовою такої установки є наявність машини з працездатною (по крайней мере, здатної завантажитися) системою на базі будь-якого іншого дистрибутива. Що, погодьтеся, хоча і цікаво, але все ж не зовсім те, що очікується: адже абсолютно будь-який дистрибутив Linux, витративши деякі (різні в різних випадках) зусилля і час (а також гроші за трафік), можна пересобрать і переналаштувати, зробивши абсолютно на себе не схожим. Причому - в процесі реальної роботи, а не в якомусь паралельному оной просторі.

Проте сама по собі ідея збірки дистрибутива з початкових кодів з нуля - дуже приваблива. І тому мою увагу привернув інший проект, що розвиває принципи LFS. Він носить ім'я LRs-Linux і в значній мірі заснований на LFS. Однак, на відміну від прототипу, це - все ж дистрибутив, хоча і своєрідний. Він доступний у вигляді iso-образу завантажувального CD, на якому містяться всі необхідні для функціонування системи компоненти. І, отже, є самодостатнім. Про нього і піде мова в цій замітці.

Отже, завантажується з CD - в квазітекстовой моді, тобто Frame Buffer. Причому в досить своєрідному режимі - монітор тут же доводиться перенастроювати, рівняння - по голові пінгвіна з заставки. Далі - вибір розкладки, це стає звичним завантажувальних Linux-CD. Попереджаю, що вибирати розкладку, відмінну від англійської американської, не рекомендується - ефект може бути вельми дивним (хоча і US-клавіатура не врятує від несподіванок після інсталяції, але - кожному овочу свій фрукт). А потім справа доходить і до мови установки. Список великий (включаючи російську), але доступні для вибору пункти - тільки англійська, французька та німецька.

Відразу зауважу, що диск, згідно з описом, служить трьом цілям - як rescue-носій, для т.зв. salvage installation, і для установки просто. Так ось, якщо не вибрати ніякого мови, ми тут же опиняємося в rescue-режимі, сиріч просто в shell'е, запустити установку з якого можливим не уявляється (по крайней мере, я такої можливості не знайшов). Так що англійська американська, хоча і відзначений за замовчуванням, вибрати все-таки необхідно.

А ось після цього - власне вибір між зазначеними режимами. Вибираємо, зрозуміло інсталяцію - відновлювати поки нічого, рятуватися - хіба що від самої установки. Після чого - повідомлення про можливість підвантаження модулів (наприклад, для SCSI-адаптера). Якісь устанавліватель повинен знати на пам'ять - ні найменшої підказки в цьому напрямку не отримаєш.

До слова сказати, все це відбувається в одній-єдиній віртуальній консолі, так що і вивести документацію на другий екран не вдасться (благо, і на диску, від гріха подалі, вона відсутня). Так що слід заздалегідь потурбуватися її роздруківкою (з сайту). Інструкція по установці там дуже скромна і за формою, і за змістом, проте містить одне абсолютно необхідне зведення. Яке - поки секрет, з шкідливості скажу, коли справа дійде до цього. Хоча саме цей пункт інструкції і слід прочитати в першу (а можливо, і в останню) чергу.

Так, перше з таких нагадувань - перед першим же серйозним діянням, розбиттям диска. Випереджає текст (так і хочеться назвати його супровідними документами) говорить, що під кореневий розділ потрібно відвести 1,8 Гбайт, під swap-розділ - 64-128 Мбайт, і окремо можна зробити boot-розділ в 20 Мбайт. А заодно нагадує нам, що ATA-диски в Linux називаються / dev / hda, / dev / hdb і т.д. файлова система Linux маркується шістнадцятковим кодом 83, а система для розділу підкачки - кодом 82. Дрібничка, а приємно - можна не помилитися навіть в останньому градусі склерозу.

Для розбиття дисків рекомендований cfdisk (в інструкції сказано, що можна і графічної утилітою, але, мабуть, це - ще в проекті). Однак не забороняється і метод. іменований hard way. Під ніж, як легко здогадатися, мається на увазі звичайний fdisk.

Незалежно від того, чи обрали ви шлях важкий або легкий (до речі, ніколи не міг зрозуміти, чому cfdisk вважається легше у використанні - по мені, так fdisk багато простіше, гнучкіше, а головне - більш прозорими), наступний крок - вибір точок монтування створених розділів. З паралельним призначенням їм файлових систем. Серед останніх доступні ext2fs (ну ще б пак!), Її журнальованою син ext3fs і ReiserFS - ні програмного RAID, ні XFS в списку немає. І вручну їх також визначити не можна:

Визначення точок монтування вимагає деякої акуратності. Так, якщо був створений спеціальний розділ під / boot, його обов'язково слід змонтувати раніше, ніж кореневу файлову систему - інакше він просто пропаде зі списку. І при виборі пунктів меню (а робиться це цифрами, за номерами) краще не помилятися - клавіша Delete нічого не видаляє, а помилка призводить до викиду в командний рядок. Після чого єдиний вихід, якщо є бажання продовжити ці ігри - перезавантаження, і все з початку.

По завершенні розмітки диска пропонується начорно вибрати те, що буде встановлюватися. Варіанти - пурістіческій набір LFS, набір власне LRs (це - не пересічні безлічі), LRs + XFree86, LRs + XFree86 + KDE (на жаль, в поточній версії тільки 2.2.2). В якості стандартного розглядається варіант LFS + все інше. Страхітливий такому не потрібно - на наступному етапі можна буде деталізувати вибір до окремих пакетів (причому не тільки з обраного набору, але і з будь-якого невибраного).

Проте насправді ступенів свободи не так і багато. Тому що до складу LFS входять базові компоненти системи (мало без чого можна обійтися в цьому наборі), до складу LRs - основні користувальницькі додатки і утиліти (тут, звичайно, дещо від чого, а то і від багатьох чинників, можна відмовитися). У набір XFree, крім власне X'ов, включені кілька менеджерів вікон (WindowMaker, Blackbox, XFce) і абстрактно-іксові додатки і утиліти (далеко не всі з них бачаться мені необхідними, так що простору для викреслювання хоч відбавляй). А з KDE - все зрозуміло, якщо є бажання використовувати цю середу, доведеться ставити практично всі з набору.

До викреслювання пакетів з наборів слід підходити вдумливо. Ніякого контролю залежностей не здійснюється, як не пропонується і ніякої підказки. Так що можна спокійно замовити установку kdebase без бібліотеки Qt - і дізнатися про неможливість цього тільки при компіляції (причому - далеко не відразу, але про це пізніше). Однак при розумінні взаємозв'язку пакетів і бібліотек можна (звіряючись при цьому з LFS-Book, без неї тут не обійтися) зібрати компоненти системи дуже точно, як в рюкзаку хорошого туриста - де, як відомо, не повинно бути нічого зайвого, але все необхідне має бути.

Правда, я, чесно кажучи, очікував більшого - а саме, можливості індивідуального вибору всіх компонентів системи. А так в наборі LFS вони фігурують у вигляді узагальнених пакетів binutilites, nettools і т.д. І зрозуміти, що ховається за ними, можна тільки з уважного читання все тієї ж LFS-Book, а вже від чогось всередині пакету відмовитися - так і зовсім не можна.

Однак, в плюс системі, пакети збираються без надмірностей - ну кому, скажіть на милість, потрібна збірка Midnight Commander з підтримкою GNOME, як це буває за замовчуванням в більшості дистрибутивів (навіть система портів FreeBSD цим грішить). І, що особисто мені сподобалося, консольні меню-орієнтовані програми компілюються без підтримки gpm - на мій погляд, клацання мишею по менюшкам не викупатися відключення при цьому традиційного консольного cutpaste.

Але я забіг вперед - поки ми тільки починаємо підготовку до архівів пакунків. Для чого насамперед вибираємо компілятор, gcc-2.95 або gcc-3.0.3. Спороводіловка говорить, що другий генерує швидший код, але може не зібрати старі вихідні. Останнє в загальному випадку вірно, але, знову ж таки передбачаючи події, скажу, що все вбрання мною (майже весь LFS, LRs без більшої частини мережевого інвентарю та мінімальної X'и з голімий Blackbox'ом) скомпілювати без проблем. Вірніше, проблеми, звичайно ж, були, але до компілятору вони відношення не мали.

Далі запитував, чи включати оптимізацію при складанні. Варіанти - від i386 до Athlon (останній - лише при виборі gcc-3). Або - мануально, для будь-яких підтримуваних gcc процесорів. Я, грішним ділом. не турбувався дізнатися заздалегідь, чи є в gcc-3 оптимізація під P-4 (а ставилася система саме на неї), та ніяких супровідних зауважень на цей предмет повідомлено не було. Хоча це було б корисніше, ніж нагадування про код файлової системи Linux. І тому обмежився оптимізацією під абстрактний i686.

Правда, недовго - хвилин через 15-20 мелькання припинилося, хоча і згасання екрану не було - рядки просто застигли на місці. Я спочатку подумав, що машина зависла на смерть - однак про якісь процесах життєдіяльності нагадували індикатори вінчестера і CD ROM. Звірився з інструкцією - і вичитав ту найголовнішу в ній істину, про яку говорив на початку: що збірка системи може зайняти від 2 до 14 годин. Для прикладу вказувалося, що повна установка на P-III / 800 вимагає годин аж 10.

У мене був не P-III / 800 (а P-4 / 1,9), і повною інсталяції я не замовляв, так що, по прикидки, годині о другій вкластися повинен був, так що випив міцної кавказької горілки кісляркі і ліг на прикру укушетку перечитувати LFS-Book (двісті сторінок чистого тексту 10-м кеглем). В результаті процедура зайняла 2 години 25 хвилин.

Але це було ще не все. Попереду чекала збірка ядра - якщо, звичайно, не скористатися запропонованим ядром LRkernel. Що я з обуренням відкинув, хоча, в світлі подальших подій, це було б найкращим виходом. Конфігурація ядра робиться (безальтернативно) за допомогою make menuconfig, спричиненої автоматично.

Ядро в комплекті виявилося не з наіпоследніх (2.4.17), без підтримки XFS (чому вона і не пропонувалася при монтуванні розділів). Так що багато уваги цьому я не приділив - все одно доведеться скоро переставляти. А ось далі мені зовсім не сподобалося. Після виходу з меню конфігурації процес складання почався автоматично, причому я навіть не встиг розглянути, що там відбувалося - bzImage чи збирався, або ще якийсь zdisk (судячи з подальшого, саме останній).

А потім, без жодного переходу, завдання пароля для root'а (причому система не один раз попередила мене про простоту використаного для цього фольклорного лайки на одному з екзотичних мов), завдання користувача і, відразу ж, конфігурація LILO. Від останнього можна відмовитися, якщо вибрати завантаження з дискети - але.

Прописав образ ядра з натхнення (помилково, але потім з'ясувалося, що жоден зі звичайних все одно не підійшов би). І перейшов до останнього пункту програми - очищення бінарників від налагоджувальної інформації (так я перевів оригінал). Після чого пропонувалося на вибір - перезавантаження або активізація консолі. Тут би мені, звичайно, вибрати останнє, подивитися, що там з ядром і при необхідності поправити /etc/lilo.config, але свербіж в трьох намозоленних пальцях:

Словом, ви розумієте - з перезавантаження нічого не вийшло. Взгрустнув, приготувався грузиться в rescue-режимі і боротися з LILO і ядром, як раптом згадав про ту саму salvage-інсталяції і вирішив її спробувати - боротися-то особливо не було за що.

Виявилося - не дарма, річ хороша. Швидко проскакуєш вибір розкладки і мови - і опиняєшся в стадії вибору пакетів. Тут в списках наборів вже відзначено, що встановлено раніше (виявилося, воно реєструвалося в базі даних, десь в / var). І можна не тільки додати щось, але і видалити. Я скористався обома можливостями (плоди читання LFS-Book на прикрою укушетке в ході інсталяції).

Видалення пройшло безболісно, ​​а ось з установкою вийшов облом. Вирішив було додати Midnight Commander, але забув відзначити glib, без якої той відмовився збиратися. Причому повідомив про це не відразу, а досить довго вдавав, що щось там компілює. Ну, тут-то не страшно, всього кілька хвилин втрачено. А ось уявіть, як було б при нормальній інсталяції встановлювати KDE без чого-небудь потрібного: годинника отак п'ять розваг - і все починай спочатку.

У комплекті, до речі, qwerty / ru4 немає, як немає і будь-який інший ru; консольні кириличні шрифти є, mapscreen для koi2alt є, російська locale є, а розкладки немає. Прямо по Венечка Ерофееву -. Пам'ятається, з іншим дистрибутивом (вірніше, австріяків) - RockLinux, вже було щось подібне. Добре, цільно-потібрений комплект всього кириличного від Altlinux - завжди під рукою, прямо паличка-виручалочка (низький за що уклін всім на www.altlinux.ru).

Загалом, на русифікації мої пригоди по збірці Linux'а з нічого і закінчилися. Звичайно, те, з чим я розважався - далеко не. По суті, звичайний дистрибутив, зі звичайним меню-орієнтованим, хоча і чисто текстовим, інсталятором, які надають не більшу (хоча і не меншу) свободу вибору, ніж інші (з тих, звичайно, що не під гаслом
  • ). Єдина відмінність - абсолютно все збирається, а не встановлюється з прекомпілірованние пакетів. І це, звичайно, плюс - можна впливати на умови збірки - ту ж оптимізацію, наприклад.

    Втім, останнім в моєму випадку практичних результатів не мало. Не дивлячись на новий компілятор і оптимізацію, система вийшла не особливо квапливої. Принаймні візуально, за Gentoo Linux (зібраної за допомогою gcc-3, але з більш новим ядром) їй ще гнатися і гнатися. Навіть ReiserFS (я забув сказати, що вибрав саме цю файлову систему) не показала себе в повному блиску на улюбленій операції (копіювання великої кількості дрібних файлів).

    Все це - не в докір. Все одно, ідея хороша, ну а виконання не на вищому рівні - так на те і версія-то 0.2.6. Важливіше, що орієнтація дистрибутива, особливо його сопроводіловок, що не дуже зрозуміла. Повторюся, що навряд чи той, хто знає про зв'язок mc і glib, потребує нагадуванні коду swap-розділу. А ось в нетривіальних випадках підказки могли б бути і докладніше. І головне - ще б більше свободи вибору:

    [1] Прикладом чого - mulinux, (майже) функціональний дистрибутив, правда, на двох дискетах (друга - система X). [Назад до тексту]

    [2] Яке так і називається - LFS-Book. Повинен сказати, читання дуже захоплююче і корисне для будь-якого користувача Linux, навіть якщо він і не має наміру збирати власний дистрибутив. [Назад до тексту]

    Схожі статті