Анатомията на GNU/Linux

Оригиналът е на Bergentroll

10
2264

Последно време започна да ми се струва че много потребители на GNU/Linux слабо си представят от какво се състои тази операционна система и твърдят, че тя е набързо сглобена от първите попаднали подръка късчета код. В същото време архитектурата на повечето Linux дистрибуции е утвърдена отдавна и се регламентира от редица стандарти, включително стандарта за графичните среди freedesktop.org и Linux Standard Base, разширяващ Unix стандартите. Когато преди няколко години се запознах с GNU/Linux, за пълното потапяне в тази платформа ми липсваше една опростена анатомична карта на типичната Linux дистрибуция. Сега ще опитам да направя точно това.

Стартиращата програма

Сеансът на операционната система започва със зареждаща програма както театъра започва със закачалките. Зареждаща програма (boot loader) по подразбиране е GNU GRUB, известна и като GRUB 2. Първата версия все още е достъпна и може да бъде изтеглена, като сега се нарича GRUB Legacy. Другата по-известна зареждаща програма с дълга история е Syslinux.

Задачата на boot loader-а е да инициализира Linux ядрото. За да може да направи това зареждащата програма трябва да знае къде се намира това ядро и трябва да може да прочете това място (например Ext4 делът). GRUB може още много други неща – може да изгражда сложни менюта и да осъществява връзка и достъп до други boot loader-и и boot мениджъри, като например Windows Boot Manager. GRUB има конфигурационен синтаксис, който малко напомня на шела и неговите възможности могат да се разширяват с помощта на допълнителни модули.

GRUB е велик и могъщ, понякога даже твърде много и във вградените системи често се използва компактния Das U-Boot.

Ядрото

Linux ядрото е създадено, за да може да работи с POSIX съвместими среди. Обикновено се намира в папката /boot/ и в наименованието си включва думата vmlinuz, където „vm“ ни напомня, че се поддържа виртуална памет, а „z“ показва, че файлът е компресиран.

В рамките на една дистрибуция могат да се поддържат няколко варианта на Linux ядрото, като например:

  • mainline (основно)
  • LTS (с разширена поддръжка)
  • rt (с добавени пачове за работа в режим на реално време)
  • zenhardened и други (с добавени пачове за повишаване на производителността или защитеността)
  • libre (изчистено от различните фирмени блобове, но поддържа по-малко хардуер)
  • Екзотични варианти без Linux ядро – Debian GNU/Hurd (с ядрото GNU Hurd) и Debian GNU/kFreeBSD (с ядрото FreeBSD). Разбира се, това вече не е GNU/Linux.

Да напомним, че цялостна, работеща система се получава, едва когато към Linux ядрото се добавят редица малки и по-големи приложни програми, създадени от проекта GNU и затова наричани „GNU софтуер“. От комбинацията между Linux Kernel и програмите на GNU идва името GNU/Linux за цялата операционна система, но по-често тя се нарича просто Linux.

Началният образ за зареждане

Началният обрат за зареждане e известен и като initrd и initramfs. Това е компресиран файл с образа на файловата система, която се разгръща в оперативната памет на компютъра по време на зареждането. Съдържа в себе си различни драйвери и скриптове за инициализиране на оборудването и за монтиране на файловите системи.

Съдържимото на началния образа за зареждане зависи от версията на ядрото и от потребностите на потребителя – някой може да използва файловата система ZFS, а друг използва LUKS криптиране за своите дискове. Това е и причината началният образ за зареждане да не е включен в дистрибуциите. Linux дистрибуциите съдържат фреймуъркове за създаването на тези начални образи в зависимост от конкретния случай. Новият образ от подобен тип обикновено се инициализира при обновяването на ядрото. Ето някои от по-популярните фреймуъркове:

  • initramfs-tools – рожбата на Debian
  • Dracut (звучи като сушена котка) – в RHEL и неговите производни (CentOS, Scientific Linux и т.н.), счита се за най-гъвкавия съвременен инструмент в сравнение с всички останали
  • mkinitcpio – доставя се в Archlinux, но се обмисля използването на Dracut
  • make-initrd – използва се в руската дистрибуция Alt Linux

Можем да споменем и Plymouth, който се помества в началния образ. Това е едно изображение, което остава на заден фон и заменя надписите които излизат по време на зареждането на ядрото. Могат да се използват и анимирани изображения, както е прието в по дружелюбните към потребителя дистрибуции като Ubuntu и Fedora.

Init

Това е системата за инициализация, която е нещо като пастир за процесите. Те се стартира преди всички и има PID 1. Именно тази система определя нивото на стартиране на операционната система и жизнения цикъл на повечето процеси. Независимо от това каква система за инициализация се използва, нейните изпълними файлове се намират в папката /sbin/init (или /usr/bin/init) или нещо подобно.

Важен елемент. Дълги години с нас беше Sysvinit, която дойде от ОС Unix System V. Почти всичко в Sysvinit са скриптове за инициализация. Този инит си работеше без проблеми, но постепенно някои специалисти започнаха да се дразнят от последователното изпълнение на скриптовете. Ето защо в началото на века и към 2010 година като гъби след дъжд се наплодиха алтернативни системи за инициализация: OpenRC на Gentoo, Upstart на Canonical, Systemd на Red Hat, която бе направена основно от Ленарт Пьотъринг. В крайна сметка поради технически и политически причини всички бяха изядени от Systemd. Тя е възхвалявана и ненавиждана. Възхвалявана преди всичко заради опростения и лаконичен синтаксис на процесите. Така например, скриптът за стартирането на уеб сървъра Apache в класическия инит взема 153 реда заедно с коментарите, докато в Arch Linux редовете са само 15. Не я харесват заради това, че тази система за инициализация изпълнява още и функциите на преобразувател и разделител, мрежови мениджър, мениджър на монтирането и кой знае още какво, което е съвсем недопустимо от гледна точка дзена на Unix.

Шелът

Командният ред, който понякога е наричан команден интерпретатор или просто шел. Начинаещите потребители обикновено не искат да имат нищо общо с шела след като има графична среда. Не са прави, понеже шелът е заложен в POSIX стандарта и е необходим за работоспособността на системата. Съществува понятието login shell и това е първият процес, който се стартира при логването на потребителя. Той задава опциите и променливите на средата от конфигурационните файлове и всички следващи процеси се стартират в контекста на този шел.

Ето кои са най-разпространените шелове към днешен ден:

  • Bourne shell (sh) – „онзи шел“, без който на практика няма нито една Linux дистрибуция
  • Bourne again shell (bash) – приета по подразбиране като потребителска среда в почти всички GNU/Linux дистрибуции, предлагащ много по-удобна работа от sh
  • Debian Almquist shell (dash) – команден ред съвместим със sh. Традиционно се използва в Debian, където /usr/bin/sh съдържа препратка към него
  • Z shell (zsh) – много прилича на bash, но предлага оригинални възможности за интерактивно въвеждане. Рядко идва заедно с дистрибуцията, но го има в почти всички хранилища
  • BusyBox – помощна програма за вградените системи, която предоставя цяла потребителска среда, включително и POSIX съвместим Shell, който се извиква чрез $ busybox sh

Графичният сървър

Това е демонът, който изчертава и рендира програмите прозорци. За златен стандарт на графичния сървър се счита X Window System, който е с нас още от 1984 година. Това е именно стандарт, архитектура и комплект протоколи. През изтеклите години имаше редица реализации, като във всяка различна Unix система си имаше собствен реализация. В GNU/Linux (и BSD) дълго време се използваше Xfree86. Сега с нас е X.Org Server или просто Xorg, който се отдели от Xfree86.

X Window System все още е една богата система, като една от нейните възможности е мрежовата прозрачност. Това означава, че може на своята машина да стартирате графично приложение от друг компютър, дори и когато на този друг компютър графичният сървър не е стартиран. С помощта на SSH това може да се направи например чрез следната команда (може да се наложи лека настройка на sshd):

$ ssh -X hostname firefox

Тук е добре да кажем, че терминологията на X Window System не е особено интуитивна: графичното приложение е клиентът, а сървърът е приложението, което рисува и рендира.

Другата важна особеност на X е рендирането на графичните примитиви и текстовите глифове – нещо което се използваше в старите времена, „когато мъжете бяха истински мъже, жените истински жени, а малките зелени човечета от алфа Кентавър истински малки зелени човечета от алфа Кентавър“ (Дъглас Адамс) и програмистите сами си рисуваха програмите прозорци, без да използват готови библиотеки и помощни средства.

В графичните среди активно се използва X keyboard extension – разширението, което показва на екрана натискането на клавишите при различните клавиатурни подредби.

Отдавна се говори, че Х-системата ще престане да се използва. Твърде големият и сложен стандарт накара разработчиците на отворения софтуер да започнат работа върху нов стандарт – протоколът Wayland. Wayland вече достигна определена зрялост и с променлив в успех се внедрява в дистрибуциите като графичен сървър по подразбиране. Но проектът Wayland бе започнат през 2008 година и Х стандартът съвсем не бърза да напуска екраните на Linux компютрите.

На показания по-горе скрийншот се вижда Weston – еталонната реализация на Wayland, която може да извършва ротация на програмните прозорци. Тя може да бъде стартирана в друга десктоп среда, като в терминала просто бъде написана командата weston.

След стартирането си графичният сървър обслужва йерархията на програмните прозорци. Използва се понятието коренов прозорец (root window), в който се разполагат прозорците на панелите, на приложенията и т.н. Обикновено тук се поставя и тапета, който се вижда на заден фон.

Дисплейният мениджър

Неособено интуитивно наименование, като дисплейните мениджъри показват приветлив екран за логване в системата. Обикновено, освен въвеждането на потребителското име и паролата, той дава възможност да се избере сесията (при наличието на няколко десктоп среди) и да се зададе езикът на сеанса. Дисплейните мениджъри вършат една и съща несложна работа и тяхното многообразие се оправдава от наличието на немалко графични десктоп среди. Може да се живее и без дисплеен сървър като в старите добри времена. За тази цел трябва да се настрои ~/.xinitrc за стартирането на необходимия сеанс на избраната десктоп среда. Това ще даде възможност за влизане в системата чрез ядрената конзола и да се стартира десктоп средата с помощта на командата startx.

Типични представители за дисплейни мениджъри са:

  • GDM от комплекта на GNOME;
  • SDDM от комплекта на KDE;
  • LightDM — универсален вариант;
  • FlyDM — от Astra Linux.

Край на първа част. във втората част ще продължим с графичните десктоп среди, графичните помощни средства, графичните API, информационната безопасност, печата, аудиото, мрежата, взаимодействието между процесите и други.

5 6 гласа
Оценете статията
Абонирай се
Извести ме за
guest
10 Коментара
стари
нови оценка
Отзиви
Всички коментари