З чого тільки зроблені Linux’и

Олексій Федорчук

Як це не дивно, питання, з чого складається Linux як операційна система, майже не розглядається в літературі. І в поглядах на нього побутує дві крайності. З одного боку, Linux розглядається як ядро операційної системи, і не більше того. Однак ніяке ядро, хоч би абсолютно воно не було, саме по собі не здатне забезпечити вирішення найпростішої користувальницької завдання.

З іншого боку, в Linux (особливо в навколокомп’ютерні пресі) включається все, що можна виявити на багатодискових наборах, продаваних під цим ім’ям, аж до системи X Window, інтегрованих середовищ типу KDE та GNOME, та їх додатків. Однак сама по собі система X Window не має жодного відношення не тільки до Linux, але, по суті, і до Unix-систем взагалі (за винятком того, що здатна працювати під управлінням будь-якої з них). А інтегровані середовища та віконні менеджери – лише додаткові (хоча і необхідні) атрибути віконної графічної системи. Що ж стосується включаються в дистрибутиви додатків – Більш ніж на 90 відсотків вони суть загальне надбання всіх відкритих і вільних операційних систем.

Цікаво, що питання про джерела і складові частини не виникає ні у відношенні Windows будь-якого роду, ні касаемо BSD-систем. Перші – єдині і неподільні за своєю суттю, чому спроби їх кастрації шляхом видалення Explorer’а, або, навпаки, підміни керуючої графічної середовища за образом і подобою віконних менеджерів X Window, не призводять зазвичай до радує око і серце результатами.

У BSD-системах, навпаки, проводиться чітка межа між невід’ємними компонентами системи (ядром, системними і прикладними утилітами, мінімальним набором користувальницьких додатків), що об’єднуються, наприклад, під FreeBSD поняттям Distributions, і системою портів – тобто набором засобів для установки і функціонування додаткових додатків сторонніх розробників, сама назва якої підкреслює їх певну відчуженість від ОС як такої. Більш того, компоненти Distributions і порти поширюються, як правило, навіть на різних умовах: перші – за т.зв. BSD-ліцензії, другі – на умовах ліцензії GPL та аналогічних, які визначили для них творці.

Додатки, що включаються в дистрибутиви BSD-систем в якості портів (правда, в NetBSD таких немає, весь додатковий софт доступний тільки у вигляді прекомпілірованних пакетів), сильно розширюють їх функціональність. Однак і базовий набір, тобто власне внутрішні ресурси ОС, не тільки забезпечують запуск і функціонування її, але і дозволяють розв’язувати досить широке коло користувальницьких задач. Чому, власне, навіть без залучених коштів будь-яка з BSD-систем заслуговує звання ОС у власному розумінні слова.

Подивимося ж, як з цієї точки зору виглядає Linux. Для чого задамося питанням: а що ж необхідно йому для функціонування?

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

З ядром Linux все ясно – це об’єктивна реальність, дана нам у відчуттях Лінуса Торвальдса. Всі ж інші компоненти, хоча теоретично і можуть варіювати за складом, давно визначені традицією: це звані засоби, розроблені в рамках проекту GNU (з усіх можливих перекладів цього акроніма адекватним мені здається такий: “Гну – це вам не хрін собачий”) і йому одноплемінних.

Теоретично міркуючи, реалізації перерахованих компонентів можуть бути різними. Однак в якості канонічного мінімального набору для Linux можна розглядати те, що включено в pure LFS або в основний набір BYO Linux.

Потрібно зауважити, що обидва набору являють собою безлічі, перехресний більш ніж на 90%. З кожного можна збавити лише пару-трійку елементів, всі інші настільки тісно пов’язані взаїмозавісимостямі, що їх можна розглядати як base Linux взагалі. Розглянемо їх по порядку.

Ядро і засоби підтримки

Щодо ядра говорити особливо нічого – в будь-який дистрибутив включається остання (або остання безпроблемна) його версія на момент складання. Канонічний джерело ядра Linux – http://www.kernel.org, Однак іноді є сенс звернутися і до модифікованим варіантам. Так, наскільки мені відомо, повноцінна підтримка журнальованою файлової системи XFS реалізована нині тільки в ядрі версії 2.4.18 від SCI і в заснованому на ньому ядрі дистрибутива Gentoo – обидва вони можуть бути отримані в исходники з відповідних сайтів (SCI-XFS і Gentoo).

Взаємодія з модулями ядра забезпечує комплект modutils. Він включає команди призначені для завантаження і вивантаження модулів, визначення їх залежностей, такі, як depmod, modprobe і т.д.

В якості засобів підтримки, як уже говорилося, розглядаються, завантажувачі, інструменти для роботи з файловими системами та інші системні утиліти. З завантажувачів заслуговують розгляду два варіанти – Класичний Lilo або GRUB, Який має всі шанси стати стандартом для відкритих ОС.

Найважливіші утиліти підтримки Linux об’єднані в комплект, який так і називається – util-linux. У його складі – багато безлічі команд для створення дискових розділів (fdisk, cfdisk), управління підкачкою (mkswap, swapon / swapoff), отримання інформації про систему (dmesg), управління процесами і сигналами (Kill, renice) і т.д.

Засоби підтримки файлової системи (систем) включають в себе утиліти для створення їх (сиріч форматування, в термінах DOS / Windows), перевірки на цілісність, тюнінгу, резервного копіювання і т.д. Для класичної файлової системи Linux, ext2fs, такий набір носить назву ext2fsprogs. Він включає в себе команди ext2fs, mke2fs і mkfs.ext2 для її створення, e2fsck, fsck та fsck.ext2 – для перевірки цілісності, tune2fs для настройки, і ще кілька.

Комплект цей підтримують також журнальованою варіант файлової системи Linux – ext3fs і, обмежено, також і ReiserFS. Однак в принципі для неї, як і для іншої журнальованою файлової системи – XFS, потрібні власні кошти підтримки. У першому випадку це буде reiserfsprogs, У другому – цілий комплекс наборів:

Всі ці кошти можуть бути отримані (у вигляді исходников) з відповідного розділу сайту SGI.

Крім цього, потрібні кошти для підтримки віртуальної файлової системи proc, що забезпечує відображення процесів. Це – комплекти procinfo і procps. До цієї ж групи примикає комплект psmisc, Призначений для управління процесами.

Ще один з інструментів підтримки – засоби запуску та вимикання системи. Вони об’єднані в комплект sysvinit. Він забезпечує ініціалізацію процесів (init), здійснення рівнів виконання (runlevels), авторизацію користувачів і т.д. В принципі для старту повнофункціональної системи потрібні і сценарії ініціалізації. У LFS вони об’єднані в пакет bootscrips, Що включає засоби для запуску системних демонів.

Безпосереднє відношення до старту системи та авторизації має комплект shadow, Призначений для управління призначеними для користувача паролями.

і, можливо, засіб для трансляції файлової системи devfs, буде виникне бажання таку використовувати;

Далі, до засобів підтримки можна віднести програми для роботи з консольним драйвером Linux. Таких нині використовується дві – kbd і console-tools.

Обидві вони включають в себе безліч утиліт, з яких для початку найважливішими є програми для завантаження клавіатурних розкладок, екранних шрифтів і карт відповідності одного іншому (loadkeys, setfont в kbd або consolechars в console-tools, mapscrn).

Останнє із засобів забезпечення – служба консольної миші, здійснювана програмою gpm. Вона чомусь трактується звичайно як суто опціональна, але, на мій погляд, відмовлятися від додаткового зручності немає ніяких підстав.

Засоби бойового забезпечення

У це поняття я включаю користувальницькі утиліти, більша частина яких розроблена в рамках проекту GNU. З одного боку, вони забезпечують мінімальну налаштовувану функціональність системи, з іншого – Відіграють службову (але – абсолютно незамінну) роль в процесі її складання.

На першому місці тут має поставити командну оболонку – без неї ніякі взагалі дії стають неможливими: адже, крім того що вся установка системи здійснюється (прямо чи опосередковано) її командами, інтерпретатор команд необхідний і для виконання стартових сценаріїв при завантаженні системи.

Традиційно такий, як би загальносистемної, командною оболонкою в Linux є bash. Хоча зазвичай стартовими сценаріями в явному вигляді викликається якась оболонка / bin / sh, це – не більше ніж посилання на bash: останній, будучи запущений таким чином, емулює т.зв. POSIX-shell, прийнятий в якості стандарту в Unix-системах.

Оболонка bash володіє багатьма достоїнствами, але нині не є найбільш досконалою. Останній титул (в сімействі shell-сумісних інтерпретаторів, принаймні), я віддало б оболонці Z-Shell. Яка також здатна емулювати POSIX-shell і тому цілком підходить в якості загальносистемної.

Всі исходники програм доступні в мережі в архівувати вигляді, і тому перше, що знадобиться для їх установки – це архіватори та компресори. Мінімальний список перших обмежується програмою tar, Тоді як компресорів буде потрібно не менше двох: gzip і bzip2, Оскільки формати їх несумісні (іноді зустрічаються архіви виду tar.Z можуть бути розпаковані програмою gzip).

Далі йде група наборів для для маніпуляцій з файлами. Перший з яких так і називається – fileutils. Склад його наступний:

Призначення набору sh-utils – Головним чином навігація по файлових системах та отримання загальносистемної інформації. У його складі – команди basename, chroot, date, echo, env, printenv, pwd, su, tee і багато інших.

До них за змістом тісно примикає набір для пошуку файлів – findutils. Головні команди в його складі:

До того ж блоку наборів можна віднести file – Ця команда дозволяє деталізованную тип регулярного файлу (исполнимого, текстового і т.д) по т.зв. “Магічної послідовності” байтів на його початку.

Наступний блок наборів призначається для роботи з контентом файлів (в першу чергу, зрозуміло, текстових). Першим в ньому слід поставити less, Яка являє собою програму посторінкового перегляду файлів.

Далі – набір під значущим ім’ям textutils. До його складу входять:

Два взаємодоповнюючих набору – diffutils і patch, Перший з яких (у складі cmp, diff, diff3, sdiff) призначений для порівняння файлів з фіксацією їх відмінностей, а другий – для внесення змін у відповідність з цими самими зафіксованими відмінностями.

Абсолютно незамінний набір grep. Вхідні в його склад програми grep, fgrep і egrep призначені для пошуку текстових фрагментів (шаблонів) в файлах.

Набори ed, gawk і sed призначені для досить складної обробки тексту, являючи собою, по суті, потокові (Неінтерактивні) текстові редактори). Теоретично без них можна було б обійтися, але вони широко використовуються у всякого роду настановних сценаріях, так що практично виявляються необхідними.

Аналогічно і положення з комплектом groff, Що включає безліч засобів складного неінтерактивному форматування тексту. Їх цілком можна було б замінити більш сучасними і простими в обігу програмами, однак компоненти комплекту виявляються необхідними для функціонування систем документації, про яку мова піде трохи нижче.

І останнє засіб, що має деяке відношення до текстів – gettext, Інструментарій для організації інтернаціональної підтримки (т.зв. NLS – National Languages ​​Support).

Мережеві можливості базової системи забезпечуються двома наборами – netkit-base і net-tools. У першому – демон inetd, що відповідає за служби Інтернет взагалі, і команда ping для перевірки доступу до вузлів мережі. Команди набору net-tools визначають конфігурацію мережі (ifconfig), доменні імена, імена хостів і т.д.

Нарешті, група наборів, остання за рахунком, але не за значенням, – системи документації. Таких в Linux широко використовується дві – традиційні для Unix man-сторінки і розроблена в рамках GNU система info. Вони – взаємодоповнюючі, хоча за змістом і істотно перекривають один одного.

Засоби тилового забезпечення

У це поняття я включаю системні Спільні бібліотеки. Користувачеві дуже рідко доводиться мати з ними справу безпосередньо, але без них функціонування системи практично неможливо. Звичайно, багато додатки можуть бути пов’язані (і часом дійсно зв’язуються) з розділяються бібліотеками статично. Однак зборка власної системи без них просто нездійсненна.

Головною загальносистемної бібліотекою в Linux є glibc. Крім неї, для зборки (і роботи) більшості консольних додатків потрібно термінальна бібліотека ncurses. І ще – потрібно також інструментарій для зв’язування програм з бібліотечними функціями libtool. Це – необхідний мінімум, окремі додатки можуть зажадати і інших бібліотек, наприклад, s-lang.

Засоби зборки

Нарешті, останнє (або, строго кажучи, перше), необхідне для того, щоб зібрати все перераховане вище воєдино – це кошти збірки. У першу голову – компілятор мови C, на якому написана більша частина ОС Linux і програм для неї gcc.

Далі – засоби забезпечення компіляції (лінкер, асемблер і т.д.), об’єднані в два набори bin86 і binutils. Потім – програма управління компіляцією, make, І тісно з нею пов’язані утиліти autoconf для побудови засобів автоматичного конфігурування при складанні, і automake для автоматизації створення make-файлів, що описують процес компіляції. Крім цього, практично необхідними виявляються також лексичний аналізатор flex, Синтаксичний аналізатор bison і макропроцесор m4. І, нарешті, у ряді випадків для збірки програм потрібно інтерпретатор мови perl.

Ось з цього (хоча і не тільки з цього) зроблені Linux’и. Принаймні, дистрибутиви цієї системи, що претендують на повнофункціональний. Причому з цього списку (нараховує, якщо виключити функціональні аналоги, трохи більше 50 позицій) збавити практично нічого не вдається – принаймні, без істотної шкоди для можливостей. Але і це ще не все: щоб перетворити систему в мінімально придатну для практичної роботи, потрібно додати ще кілька компонентів.

Додаткові програми

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

Для забезпечення мінімальних можливостей редагування підійде будь максимально простий редактор – якщо не виходити за рамки проекту GNU, в цій ролі може виступити nano. Він дуже простий в освоєнні, не вимагає запам’ятовування численних команд і володіє базовим набором функцій редагування.

При максималістських підході надається вибір серед двох монстрів консольного світу – vim і emacs. На якому зупинитися – справа смаку, вступати в священну війну vim vs. emacs тут було б недоречно.

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

Текстовий редактор важко уявити без функцій перевірки орфографії, і тому наступний додатковий компонент – ispell.

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

Ну а для реалізації перевірки російської орфографії на додаток до оригінального ispell пропонується відомий словник Лебедєва – rus-ispell.

Нарешті, саме останнє, що потрібно для комфортної роботи – звуковий супровід у вигляді програвачів компакт-дисків і mpeg-файлів. Першої мети успішно послужить (принаймні для початку) програма cdplay, другий – mpg123, не потребують будь-яких додаткових бібліотек.

Отже, скачавши з мережі трохи більше півсотні файлів, ми отримуємо можливість побудови власної Linux-системи, придатної для практичного використання. Звичайно, набір цей – вельми аскетичний, цілком гідний древніх лакедемонян. Якщо виникне бажання, наприклад, використання графічного режиму з його численними додатками, наведений список доведеться багаторазово розширити. Однак це буде темою самостійних досліджень.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*