Периодична таблица на дистрибуциите на Linux
1. КАКВО ПРЕДСТАВЛЯВА ДИСТРИБУЦИЯТА НА LINUX?
Операционната система Linux се състои от много компоненти, най-важният от които е ядрото (kernel), като общността на разработчиците му се оглавява от Линус Торвалдс. Но операционната система не се състои само от ядро. За нейната работа са необходими още много програмни средства – драйвери за хардуерните устройства, програми за управление на файловата система, програми за организация на взаимодействието с потребителите и така нататък. За разлика от останалите операционни системи (например Windows, Solaris или HP-UX), отделните компоненти на операционната система се разработват и поддържат не от някаква отделна фирма, а от независими групи разработчици, които работят според принципите на отворения софтуер и предоставят разработените от тях продукти за обществено ползване при условията на Общият публичен лиценз (General Public License – GPL). Към момента на поява на ядрото на Linux, значителна част от програмните компоненти, необходими за една операционна система беше разработена в рамките на проекта GNU, което позволи на Торвалдс в съкратени срокове да създаде операционна система, която получи неговото име.
Тъй като всички компоненти на Linux се разпространяват при условията на лиценза GPL, може да се създаде впечатлението, че всеки един човек може да събере своя колекция от свободен софтуер и да инсталира Linux на своя компютър. И в това има известна доза истина. Но този, който е замислил подобен проект, трябва да има представа какви изпълними файлове и библиотеки ще са му необходими за да може системата1 да работи успешно, както и да знае къде трябва да бъдат разположени системните файлове, как да се организира нейното зареждане и как да бъде правилно конфигурирана. Освен това, трябва да се разрешат зависимостите между пакетите и да се премахнат противоречията между тях (и различните им версии), което не е толкова лесна задача. Първите версии на Linux, появили се през 1991 г., се състояха от две дискети. Първата служеше за зареждане на операционната система и съдържаше ядрото, а втората – кореновата (/) файлова система и основните приложни програми, разработени по проекта GNU. Копия от тези дискети можеха да бъдат изтеглени от сървъра на университета в Хелзинки. Конфигурирането и настройката на системата се извършваха на ръка и бяха много сложни. Затова до появата на първите дистрибуции, да инсталира Linux на своя компютър можеше само достатъчно подготвен специалист, може да се каже и експерт в UNIX.
Положението се промени след появата на така наречените дистрибуции. Дистрибуцията на Linux се различава от обикновеният набор от програми на първо място с наличието на инсталираща програма, позволяваща на обикновен потребител да инсталира системата на своя компютър, като при това не се налага помощта на висококвалифициран експерт. Ако се опитаме да дадем формално определение за дистрибуция, то ще се получи нещо подобно на това:
„Дистрибуцията на Linux е набор от програми, включващи основните компоненти на операционната система (в това число и ядрото на Linux), някаква съвкупност от приложни програми и програма за инсталация, позволяваща инсталирането върху потребителския компютър на операционната система GNU/Linux, както и набор от приложни програми, необходими за конкретната употреба на системата“.
Първите дистрибуции на системата се появяват много скоро след като Линус Торвалдс пуска разработеното от него ядро2под GPL лиценз. Тъй като в рамките на проекта GNU бяха създадени много приложни програми, отделни програмисти (и групи от програмисти) започнаха да разработват както програми за инсталиране, така и други приложни програми, потребителски интерфейс и програми за управление на пакети, и да издават свои дистрибуции на Linux.
Първата дистрибуция на Linux е създадена в Англия, в Манчестърският компютърен център (Manchester Computing Centre, MCC) от Оуен Льо Бланк (Owen Le Blanc). Първата версия на тази дистрибуция, получила впоследствие името MCC Interim Linux, става достъпна за всички желаещи на ftp сървъра на университета в Манчестър през февруари 1992 г.
Приблизително по същото време, сътрудници на университета в Тексас създават дистрибуцията TAMU.
През октомври 1992 г. се появява разработената от Питър Макдоналд (Peter McDonald) дистрибуция Softlanding Linux System (SLS), която беше първата дистрибуция, включваща в себе си такива елементи като X Windows System и поддръжка на TCP/IP.
Нито една от тези дистрибуции нямаше добра поддръжка. В края на 1992 г., Патрик Фолкердинг (Patrick Volkerding) издава дистрибуция, основана в по-голямата си част на SLS, наречена Slackware и която в момента е най-старата дистрибуция от тези, които все още са активни.
На основата на Slackware, немската фирма S.u.S.E (съкращение от „Software- und System Entwicklung), основана през 1992 г. като консултантска група по операционната система UNIX, създава дистрибуцията SuSE Linux, първата версия от която излиза през 1994 г. По-късно, SuSE интегрира в себе си дистрибуцията Jurix на Флориан ла Рош (Florian La Roche).
На 16 август 1993 г. Йън Мърдок започва още един проект, Debian, за разработване на дистрибуция на Linux като алтернатива на комерсиалните дистрибуции на Linux. Йън е искал да създаде система, разпространявана абсолютно свободно и открито, според духа на Linux и GNU. По-късно разработването на Debian е било финансирано от проекта GNU – Free Software Foundation, който предоставил финансиране в продължение на една година – от ноември 1994 до ноември 1995 г., което позволява на Йън Мърдок да се посвети изцяло на Debian през това време.
Дистрибуцията Red Hat, включваща в себе си някои аспекти от дистрибуцията Bogus (например пакетният механизъм), е основана през 1993 г. На основата на Red Hat впоследствие възникват редица други дистрибуции, в числото на които има и много комерсиални – Caldera, Mandrake и TurboLinux.
От тогава, броят на Linux дистрибуциите непрекъснато расте, възможно и поради относителната лекота, с която може да бъде създадена една дистрибуция от отделни пакети, доставяни от независими разработчици. Според сайтаDistroWatch.com (който води отчет на различните Linux дистрибуции), към 15 януари 2005 г. съществуват 373 дистрибуции на Linux. Поддръжката на някои от тях вече е прекратена, но повече от 300 разработки продължават да „живеят“. Само през 2004 година са се появили повече от 100 нови дистрибуции. И това не е краят, тъй като едва ли не всеки ден продължават да се появяват нови и нови дистрибуции.
Как да се ориентираме сред тези дистрибуции, с какво се различават една от друга, по какви критерии може да ги класифицираме? И как да изберем вариант на система, който ще е най-подходящ за конкретната ситуация?
2. КРИТЕРИИ ЗА КЛАСИФИЦИРАНЕ НА ДИСТРИБУЦИИТЕ
Посочените по-горе числа за броя на дистрибуциите, разбира се, са впечатляващи, но старите потребители на Linux знаят, че ядрото и повечето програми са еднакви при всички дистрибуции, и че техният състав се различава най-вече по номера на версията или компилацията на пакета от конкретният потребител. Освен това, потребителят може да добави към системата си практически всяка необходима му програма, като в краен случай я компилира от изходен код или разработи самостоятелно пакет с нея (при наличие на съответната квалификация, разбира се).
Тъй като броят на дистрибуциите на Linux е много голям, практически да се запознаем с всяка една от тях за да може да направим правилен избор вече не е възможно. Следователно, актуален става проблемът за тяхното класифицирането, както и за избор на съществени характеристики, които да служат за критерии при избор на дистрибуция. На вече споменатия сайт www.distrowatch.com могат да бъдат намерени достатъчно много материали, които дават някакъв, макар и частичен, отговор на поставените въпроси и които са залегнали в основата на тази статия, в която ще бъде направен опит за класифициране на дистрибуциите на Linux по няколко критерия.
- Съществуват много признаци, по които могат да се различават отделните дистрибуции, като някои от тях са следните:
- предназначение на дистрибуцията към конкретна област на приложение (например за организация на защитна стена, за работа като маршрутизатор, за създаване на особено защитена система или за използване на домашен компютър от обикновен потребител с акцент върху мултимедийните приложения);
- изисквания към апаратното осигуряване3 (някои дистрибуции са оптимизирани за компютри с процесор Pentium, други могат да се инсталират и на компютри с процесор Intel 80486; например SUSE LiveCD 9.2 не се стартира на компютри, които имат оперативна памет по-малка от 256 MB;
- използваната графична среда – KDE, GNOME или XFce;
- наличието на средства за локализация, осигуряващи поддръжката на нужния ви език (например в някои LiveCD дистрибуции не е предвидена поддръжка на български език, така че се налагат допълнителни усилия за кирилизиране на системата);
- носителят, от който може да се стартира системата – например една или няколко дискети, CD-ROM диск, инсталация върху твърд диск;
- организацията на процедурата за начално зареждане на системата – BSD или System V;
- използваната система за управление на пакети – dpkg или apt-get в Debian, rpm във Fedora Core;
- структурата на директориите на файловата система [виж 5, 6];
- родословието или историята за възникване на дистрибуцията – новите дистрибуции не се създават в повечето случаи на празно място, а на основата на някоя съществуваща такава);
- състава на основното програмно осигуряване4, което се инсталира;
- достъпност до допълнителните пакети с програми;
- наличие на комерсиални програми, включени в дистрибуцията;
- процедурата за откриване на различният хадуер;
- предоставените инструменти за управление на операционната система;
- и така нататък …
Нека се опитаме да отделим от този списък тези признаци, които могат да бъдат използвани за основа на някаква класификация на дистрибуциите. Ще започнем с това да отхвърлим някои критерии, нямащи практическо значение.
3. НЕСЪЩЕСТВЕНИ КРИТЕРИИ
Някои от изброените критерии може да изключим без някаква особена аргументация – например достъпността до допълнителни пакети е практически еднаква за всички дистрибуции, тъй като всяка програма може да бъде компилирана от изходен код или да бъде създаден пакет със специфичен за дадената дистрибуция формат. По същите причини може да изключим и критерия за наличие в състава на дистрибуцията на комерсиални програми, тъй като няма начин да ви бъде забранено да купите такива програми и да ги включите във вашата система. Средства за локализация се включват вече във всички дистрибуции без изключение, въпреки че не винаги дистрибуцията съдържа необходимите шрифтове. Този критерии става още по-несъществен в светлината на очаквания преход към Unicode5. Нека разгледаме по-подробно още няколко критерия.
Структура на файловата система
Алексей Федорчук в статиите [5, 6] предлага като критерии за класификация на дистрибуциите да се използва структурата на файловата система6. Вероятно тази разлика е била значителна по времето на написването на статията [5]. В последно време набира скорост процесът на разработване на стандарти за Linux. В рамките на организацията Linux Standard Base, поставила си за задача да съгласува взаимодействието между различните дистрибуции и да разработи общи стандарти за едни или други компоненти на системата (а по-точно, даже преди възникването на тази организация), беше разработен стандарт за структурата на файловата система (Filesystem Hierarchy Standard – FHS). Спазването на изискванията на стандарта значително опростява живота на създателите на програмни приложения, тъй като осигурява лесно намиране на нужният на приложението програмен компонент от софтуера (в частност – на библиотеките) в точно определени и известни места. Затова структурата на файловата система придоби приблизително еднакъв вид във всички основни дистрибуции. Например дистрибуцията SuSE някога беше упреквана за непълно съответствие със стандарта FHS, но от версия 9.2 тя напълно отговаря на версия 2.3 на този стандарт. Даже и в случая, когато фактическата структура на файловата система се отличава от стандартната, може да бъде постигнато съответствие с помощта на употребата на символни връзки. Така че открояване на ясно изразени групи дистрибуции на основа на различна структура на файловата система не е възможно да се направи.
Използваната графична среда
Външният вид на екрана на компютъра, върху който са стартирани различни мениджъри на прозорци и графични обвивки може да се различава съществено. Но надали си струва да взимаме използваният мениджър на прозорци или използваната графична среда (KDE vs GNOME) за основа на някаква класификация на дистрибуциите. Най-често дистрибуцията предлага възможност за избор между няколко графични среди7. А освен това, тези среди не са нищо друго освен един пакет от софтуера и потребителят винаги има възможност да изтегли и инсталира този пакет, даже и ако първоначално той не е влизал в избраната дистрибуция.
Родословие
По-голямата част от съвременните дистрибуции водят своето родословно дърво или от Red Hat, или от Debian. Но произходът на дистрибуцията, тоест изясняването от коя по-ранно съществувала дистрибуция тя се е разклонила според мен представлява единствено чисто исторически интерес. Всяка нова дистрибуция с времето се отдалечава от своя родител и може да мигрира към някоя друга дистрибуция или да даде началото на съвсем нов клон в дървото на дистрибуциите. Такива дистрибуции като Mandrake, Conectiva8 или PLD произлизат, както е известно от Red Hat, но в момента представляват напълно самостоятелни разработки. Нещо повече – съществуват вече други дистрибуции, които се явяват производни от вече назованите. Така че макар и произхода да може в някаква степен да характеризира дистрибуциите за опитните потребители, все пак не може да се използва като критерии за класификация. Ако ви интересува кои дистрибуции от кои други са произлезли, то на сайта DistroWatch има страница, на която са показани тези данни9.
Процедура за разпознаване на хардуера
Съдейки по отзивите в различни източници, средствата за определяне на хардуера в компютъра в различните дистрибуции се различават съществено. Широко известно е, че дистрибуцията Knoppix в този аспект се отличава най-добре. Само че, предполагам, това преимущество е временно. По силата на отвореността на всичкият софтуер на GNU/Linux, постиженията и разработките на един разработчик бързо стават достояние на всички и затова идеите на Клаус Кнопер, скоро ще бъдат реализирани и в други дистрибуции. Именно този свободен обмен на идеи позволява бързото развитие въобще на свободният софтуер.
Състав на основният инсталиран софтуер
За да използваме този критерий, първо трябва да уточним какво имаме предвид, когато говорим за „базов софтуер“. Това понятие беше въведено и разгледано в статиите на А. Федорчук [6, 7]. Само че неговата трактовка на този термин има отношение по-скоро към операционната система като такава, а не към конкретна дистрибуция. Когато става дума за дистрибуции, а още повече и за тяхната класификация по този признак, за „базов“ би трябвало да се приеме този набор от програми, който се инсталира от инсталатора независимо от желанието на потребителя, тоест даже и тогава, когато при избора на пакети за инсталиране вие сте махнали отметките от всички пакети. Но доколкото знам, нито една инсталираща програма не спира на това място, когато е инсталиран този „базов“ софтуер. Така че за изясняване на това, доколко се различават състава на „базовия“ софтуер в различните дистрибуции, ще се наложи да се проведе специално изследване. И критерия се получава трудоемък. А освен това, доколкото мога да преценя по резултатите от експериментите по инсталиране на Red Hat Linux 9 Cyrillic Edition в минимална конфигурация (виж [8]), този набор трудно може да бъде наречен минимално необходим за стартирането на компютъра. Така, че за каква „базовост“ става дума тук?
Инструменти за управление на системата
Наборът на програмите, използвани за конфигуриране, настройване и оптимизация на системата във всяка дистрибуция е различен. И мненията за това кои от тях са най-добри за тези цели също се различават много. Едни автори смятат, че освен ръчно редактиране на конфигурационни скриптове никакви други средства не са нужни, други смятат, че за потребителя са необходими конфигуратори, работещи в графичен режим. Поради което наборът от графични инструменти за настройване на системата практически във всяка дистрибуция е различен (особено красивия инструмент YaST странно защо не съм срещал в нито една друга дистрибуция). Нещо повече, доколкото си спомням, даже в последователните версии на Red Hat, този набор силно се променя от версия на версия. Ако съществуваше неголямо количество стандартни инструменти за настройка, от които създателите на дистрибуции можеха да избират най-подходящите според тях, можеше да бъде създаден критерий за класификация по този признак. А тъй като многообразието на тези инструменти е сравнимо с количеството дистрибуции, то разумен критерии за класификация по този признак не може да бъде построен.
Носител, от който се стартира системата
Сред стотиците съществуващи в момента дистрибуции има както такива, които се инсталират на твърдия диск и се стартират от него, така и такива, които не изискват инсталация върху твърд диск10. Като носител може да се използва CD-ROM, USB памет, дискета или няколко дискети, даже и виртуален диск, създаден в оперативната памет на компютъра. Но да класифицираме дистрибуциите по този признак едва ли е целесъобразно. В края на краищата, ние се опитваме да построим класификация за да облекчим избора на дистрибуция за една или друга област на приложение. И не е важно как ще стартираме системата, важно е каква задача ще изпълнява тя. Нали нито една дистрибуция не се създава с цел просто да стартираме системата. Даже дистрибуциите на дискети се създават за стартиране на системата в ролята на маршрутизатор, защитна стена, за използване на компютъра, на който има инсталирана такава операционна система като отдалечен терминал или станция за вход към Internet.
Изисквания към хардуера
Що се отнася до хардуера в компютъра, на който ще бъде използвана системата, то този признак според мен се слива с признака за предназначението на дистрибуцията. Просто сред сферите на приложение на дистрибуцията трябва да се създаде отделна категория – дистрибуция за „слаби“ компютри. В тази категория частично ще попаднат и тези дистрибуции, които се стартират от дискети, ако нямат друго предназначение.
И така, от първоначално посоченият списък с признаци за разглеждане останаха само организацията на процедурата за начално зареждане на системата, използваната система за управление на пакетите и областта на приложение на дистрибуцията. Тези три признака за класификация на дистрибуциите трябва да бъдат разгледани по-подробно, с което и ще се заемем малко по-надолу.
4. СРЕДСТВА ЗА УПРАВЛЕНИЕ НА ПАКЕТИТЕ
Както беше казано в посоченото по-горе определение, дистрибуциите се състоят от отделни пакети, всеки от които съдържа някакво приложение, помощна програма или услуга. Отделният пакет може да съдържа например web браузър, библиотека за работа с графични файлове във формат png, набор от шрифтове и така нататък.
- Софтуерът, съдържащ се в пакета, се доставя в една от двете форми:
- под формата на двоични файлове, предназначени за непосредствено инсталиране във вашата система без да има нужда от каквато и да е допълнителна обработка (например компилация);
- под формата на изходен текст, които файлове обикновено съдържат текст на някакъв език за програмиране, архивирани във формат tar и опаковани с програмата gzip, а също така и допълнителни файлове, необходими за компилацията на приложението от файловете с изходен код.
Съществуват също така и пакети, които при добро желание могат да бъдат отнесени едновременно и към двата вида. Това са пакетите, които съдържат скриптове и конфигурационни файлове, помощни страници в формат man или info, информация за авторските права или друга документация. От една страна те представляват също „изходен код“, а от друга се инсталират в системата без всякаква допълнителна обработка, също като изпълнимите файлове. Но този тип пакети изпълнява спомагателна роля и за нас не представлява интерес. А количеството и състава на пакетите от първите два типа имат много съществена роля в класификацията на дистрибуциите.
Да си припомним първо, че всичкият софтуер в GNU/Linux е свободен, тоест доставя се заедно с изходният код. И поради това, за всеки бинарен пакет на дисковете на дистрибуцията ще се намери съответният пакет с изходен код. Но обратното твърдение не е вярно, тъй като съществуват дистрибуции, в които броят на двоичните файлове е силно ограничен. Това са така наречените source-based11 дистрибуции, тоест дистрибуции, основани на изходен код. Техните създатели са предположили, че техните потребители ще могат самостоятелно да компилират и инсталират на компютъра всяко необходимо им приложение. Но за да се пусне самият процес на компилиране, трябва операционната система вече да е работоспособна, макар и с някаква минимална конфигурация. Трябва да са били инсталирани програмата за начално зареждане, ядрото, архиваторите tar и gzip (за да може да се разопакова и деархивира пакета с изходният код), компилатор с целият съпътстващ го инструментариум (линкер, асемблер и така нататък), библиотеките на езика C, помощни програми за работа с файлове и текст (find, grep, awk, sed), без които компилирането и инсталирането на програмите е просто невъзможно. Този проблем може да се реши по два начина: или компилацията се извършва на някаква друга система, или необходимият минимум от прекомпилирани пакети се инсталира от дистрибуцията, а останалите пакети се компилират в създадената по този начин среда. Най-яркият пример на реализация на подхода, основан на компилация на цялата система от изходен код е проекта Linux From Scratch, който не е дистрибуция в прекия смисъл на тази дума, а представлява набор от инструкции за създаването на система от набор пакети с изходен код (виж [10]).
Колкото до пакетите с прекомпилиран софтуер, то за тяхното инсталиране както в процеса на инсталация на системата или във вече инсталирана система, се изискват специални средства за управление на пакетите. Работата е в това, че инсталацията софтуер от пакети, обикновено е свързана с разрешаването на така наречените „зависимости“. Например, пакетът, съдържащ компилатора GNU C (gcc) „зависи“ от пакета binutils, който включва в себе си linker12 и транслатор. Ако потребителят се опита да инсталира gcc без предварително да е инсталирал binutils, най-вероятно процеса на инсталиране на gcc ще завърши със съобщение за грешка. Затова в състава на пакета се включва не само двоичния код на изпълнимата програма, но и допълнителна служебна или мета-информация: името на програмата, данни за разработчика, информация за други пакети, които са необходими за правилната работа на дадената програма (най-често това е необходима на даденото приложение библиотека), контролни суми, информация за това как правилно да бъде конфигуриран пакета и как да бъде правилно деинсталиран, ако нуждата от неговото използване изчезне.
Пакетът обикновено представлява един архивиран файл, в който се намират както самата програма, която ще се инсталира, така и необходимата служебна информация (мета-информация). Понякога тази мета-информация се съдържа не в самия пакет, а във външна база от данни. Но за да се възползваме от нея е необходима още една програма, която да инсталира приложението от пакета в система, използвайки при необходимост мета-информацията от пакета. Очевидно е, че тази програма силно ще зависи от това, каква точно мета-информация се съдържа в пакета и как е организирана тя. По този начин се е получило, че създателите на някои дистрибуции са разработили всеки за себе си своя собствена структура на пакетите и свои специализирани средства за управление на тези пакети, които позволяват инсталация на програмата от пакета с помощта на съдържащата се в него мета-информация.
Системата за управление на пакети е набор от инструменти, предназначени за автоматизация на процесите на инсталиране, обновяване, конфигуриране и отстраняване на пакети на програмно осигуряване от определен формат.
- Най-известни системи за управление на пакети са:
- rpm/yum – мениджърът на пакети на Red Hat. В момента абревиатурата RPM обикновено се разшифрова рекурсивно (RPM – RPM Package Manager), но първоначално тя е означавала пакетен мениджър на Red Hat (RedHat Package Manager), тъй като беше разработена за дистрибуцията Red Hat. В настоящият момент, този пакетен мениджър се използва и в много други дистрибуции.
- dpkg/APT – е системата за управление на пакетите *.deb в дистрибуцията Debian, която също е портвана и за други дистрибуции. Самите пакети .deb представляват сами по себе си два tar архива, компресирани с помощта на gzip: в единият се намира управляващата информация, а в другия – самите данни. Стандартно средство за управление на тези пакети е конзолната програма dpkg, допълнена от обвивката APT (Advanced Packaging Tool).
- tgz или tar.gz е стандартен набор от две програми – tar и gzip, понякога допълнен с някои допълнителни управляващи файлове. Използва се в дистрибуцията Slackware и някои други дистрибуции, като не осигурява решаването на зависимости. От source-based дистрибуциите тази система се различава по това, че вътре в tar.gz архивите се намират предварително компилирани програми (а не изходен код на програмите).
- Системата portage на дистрибуцията Gentoo, представляваща набор от файлове ebuild, съдържащи информация за това как да получим (от всеки достъпен източник – мрежа, локален диск etc), компилираме и инсталираме пакет в системата Gentoo, използва конзолната команда emerge. Обикновено пакета в този случай съдържа изходният код на програмата и приложението се компилира директно по време на инсталацията, за сметка на което се оптимизира за конкретната машина. Макар, че по този начин могат да се инсталират и предварително компилирани програми, този вариант се използва само в изключителни случаи, например при инсталация на много бавни машини.
- YaST е приложение, разработено от Novell и използвано в дистрибуцията SuSE.
Компилацията на пакети от изходен код също може да се разглежда като един от вариантите на система за управление на пакетите. От изброените по-горе системи, той се различава само по това, че пакетите в source-based дистрибуциите почти не съдържат в себе си предварително компилирани програми (освен тези, които са абсолютно необходими като ядро и компилатор), така че единственият начин за инсталация на нов пакет е неговата непосредствена компилация от изходен код.
Най-разпространено средство за управление на пакети програмно осигуряване остава програмата rpm. Наистина, тя притежава този недостатък, че разрешаването на зависимостите лежи основно върху потребителя13. Програмата само съобщава, че липсва някакъв пакет в системата, а самото намиране и инсталиране остава за потребителя. Затова много основани на rpm дистрибуции използват създадения от Debian инструмент apt, който понякога се появява и под други имена. Дебианският deb и tgz на Slackware (и неговите производни) също са широко разпространени. Освен вече изброените са били изобретени още няколко средства за управление на пакети. Като примери може да използваме slp от дистрибуцията Stampede, който има няколко интересни особености и системата за управление на пакети от дистрибуциятаJBLinux.
Таблица 1, която е взаимствана от сайта Distrowatch.com, показва разпространението на различните системи за управление на пакети. Имайте предвид, че за разлика от аналогичната таблица на сайта, аз не съм си поставял за задача да изброя в най-дясната колона на таблицата всички дистрибуции, използващи една или друга система за управление на пакети, а само съм показал само по няколко примера.
Таблица 1.
Система за управление на пакетите | Брой дистрибуции, използващи тази система | Примерни дистрибуции |
---|---|---|
DEB | 121 | Adamantix, Damn Small, Debian, GNUstep, Helix, Knoppix, Kurumin, Linspire, MEPIS, Morphix, Ubuntu, UserLinux, Xandros |
RPM | 111 | Fedora, Hancom, Linare, Linux XP, Lycoris, Magic, Mandrake, Novell, PLD, Red Flag, Red Hat, SOT, SUSE, Trustix, Turbolinux, Voodoo |
TGZ (TAR.GZ, TAR.BZ2, TBZ, DPAK, PKG) | 38 | Arch, Blin, CRUX, Definity, GoboLinux, LiveCD Router, Sentinix, Slackware, SLAX, STUX, Vector |
Source-based | 10 | Core, LFS, Lunar, Sorcerer, Source Mage |
APT-RPM | 9 | ALT, Ark, ASP, CLE, Conectiva, Lorma, PLD, Vine, Yellow Dog |
Portage | 9 | Gentoo, Gentoox, iBox, Jollix, Knopperdisk, Shark, SystemRescue |
BOX | 1 | Pingwinek |
CCS | 1 | Specifix |
CGZ | 1 | MirOS |
INSTALL | 1 | Athene |
NBA | 1 | Nasgaia |
OLM | 1 | Onebase |
RUBYX | 1 | Rubyx |
UHU | 1 | UHU |
Трябва да се каже, че понякога е много трудно да се прокара ясна граница между различните системи за управление на пакетите. Освен това, съществува и програмата Alien, която позволява да се конвертират пакети от един формат в друг. Ако вие искате да използвате пакет от дистрибуция, различна от тази, инсталирана на вашият компютър, вие можете да използвате тази програма за конвертиране на този пакет във формат, който се използва във вашата система, след което ще можете да го инсталирате.
5. СКРИПТОВЕ ЗА НАЧАЛНО ЗАРЕЖДАНЕ14
Начинът на организиране и разполагане на началните скриптове е вторият съществен признак, по който дистрибуциите на Linux се различават една от друга.
Като начало нека си припомним, че съществуват два различни стила на първоначално зареждане на unix-подобните операционни системи, произхода на които стига до корените на историята на възникване и развитие на UNIX: така нареченият BSD стил (използван също така в такива операционни системи като FreeBSD, NetBSD и OpenBSD) и стилът System V (наричан още стил ATT). Разликата между тях е в организирането и разполагането на началните скриптове, осигуряващи управлението на процеса на първоначално зареждане на системата. В класическите BSD системи, тези файлове се съхраняват в директорията /etc и техните имена започват с представката „rc“. В системите от семейството на System V, тези файлове се намират в директорията /etc/init.d, а връзки към тях са създадени в директориите /etc/rc0.d, /etc/rc1.d и така нататък. Вторият стил на организиране на скриптовете е по-ясен и позволява по-точно да се изпълнява процесът на спиране на системата. Ако искате да научите повече подробности за разликите в двата споменати стила, прочетете глава 2 от книгата [6].
По-голямата част от дистрибуциите на Linux използват стила на System V. Към тях спадат Debian, всички производни на Red Hat, включително Mandrake и руските дистрибуции ASPLinux и ALT Linux. В стил BSD е организирано зареждането на дистрибуцията Slackware и неговите производни. Но и единият и другият стил не се спазват съвсем строго. Например, структурата на директориите, в които се съхраняват инициализиращите скриптове, в основните дистрибуции се различават съществено:
Листинг 1.
-
- Fedora Core (Red Hat):
/etc/init.d/
– символна връзка към/etc/rc.d/init.d/
/etc/rc.d/
– скриптовеrc
,rc.sysinit
иrc.local
|
/init.d/
– множество файлове със скриптове/rc0.d/
– символни връзки@K*.*
и@S*.*
/rc1.d/
– символни връзки@K*.*
и@S*.*
………./rc6.d/
– символни връзки@K*.*
и@S*.*
/rcS.d/
– символни връзки@K*.*
и@S*.*
-
- Knoppix (клон Debian):
/etc/init.d/
– скриптовеrc
,rcS
,reboot
и множество други/etc/rc0.d/
– символни връзки@K*.*
и@S*.*
/rc1.d/
– символни връзки@K*.*
и@S*.*
………./rc6.d/
– символни връзки@K*.*
и@S*.*
/rcS.d/
– символни връзки@K*.*
и@S*.
*
-
- Slackware:
/etc/rc.d/
– скриптовеrc.0
,rc.4
,rc.6
,rc.K
,rc.M
,rc.S
,rc.local
,rc.syslog
,rc.nfsd
,rc.sysvinit
,rc.netdevice
,rc.keymap
и други скриптове, имената на които имат видrc.*
.
-
- Gentoo:
/etc/init.d/
– скриптове с най-различни имена.
-
- SuSE:
/etc/rc.d/
– символна връзка към/etc/init.d/
/etc/init.d/
– множество файлове с различни имена, в частностboot.*
-
/boot.d/
– символни връзки@K*.*
и@S*.*
-
/rc0.d/
– символни връзки@K*.*
и@S*.*
-
/rc1.d/
– символни връзки@K*.*
и@S*.*
………. -
/rc6.d/
– символни връзки@K*.*
и@S*.*
-
/rcS.d/
– символни връзки@K*.*
и@S*.*
Както виждате, даже и в Red Hat и Debian, които следват стила на System V, структурата на директориите се различава. А SuSE, макар и произлизаща от Slackware, се движи в посоката на стила System V най-малко в организацията на структурата на директориите. А Red Hat са създали скрипт rc.local, приличащ на едноименния такъв във FreeBSD. В процеса на първоначално зареждане този скрипт се изпълнява последен. Вярно е, че в последните версии на Red Hat и Fedora този скрипт е „празен“, тоест практически не се използва. И авторите на книгата [6] не съветват в него да се добавят собствени команди, препоръчвайки по-добре да се използват средствата на System V.
Но структурата на директориите и имената на инициализиращите скриптове може би не са най-важното. Както е известно, в процеса на начално зареждане на операционната система, в началото се зарежда ядро, което стартира процеса init, имащ винаги идентификатор 0. Този процес изпълнява инструкциите, зададени във файла /etc/inittab. В листинг 2 са показани извадки от него от няколко дистрибуции. Показан е не целият текст на файла, а само 4 групи от най-важните редове, определящи процеса на зареждане. Във всички дистрибуции освен посочените инструкции се определят и действията при натискане на клавишната комбинация Ctrl-Alt-Del и се стартират виртуални терминали (само в дистрибуциите Fedora Core и SuSE за тази цел се извиква процеса mingetty, в Gentoo и Slackware – agetty, а в Knoppix — /bin/bash -login).
Листинг 2.
Fedora Core (Red Hat) |
id:3:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 x:5:respawn:/etc/X11/prefdm -nodaemon |
---|---|
Knoppix (Debian) |
id:5:initdefault: # Boot-time system configuration/initialization script. si::sysinit:/etc/init.d/rcS # What to do in single-user mode. ~~:S:respawn:/bin/bash -login >/dev/tty1 2>&1 |
Slackware |
id:3:initdefault: # System initialization (runs when system boots). si:S:sysinit:/etc/rc.d/rc.S su:1S:wait:/etc/rc.d/rc.K rc:2345:wait:/etc/rc.d/rc.M l0:0:wait:/etc/rc.d/rc.0 l6:6:wait:/etc/rc.d/rc.6 # Runlevel 4 used to be for an X window only system x1:4:wait:/etc/rc.d/rc.4 |
Gentoo |
id:3:initdefault: # System initialization (runs when system boots). si:S:sysinit:/sbin/rc boot ~~:S:wait:/sbin/sulogin l0:0:wait:/sbin/rc shutdown l1:1:wait:/sbin/rc single l2:2:wait:/sbin/rc nonetwork l3:3:wait:/sbin/rc default l4:4:wait:/sbin/rc default l5:5:wait:/sbin/rc default l6:6:wait:/sbin/rc reboot z6:6:respawn:/sbin/sulogin # Used by /etc/init.d/xdm to control DM startup. x:a:once:/etc/X11/startDM.sh |
SuSE |
# The default runlevel is defined here id:5:initdefault: # First script to be executed, if not booting in emergency (-b) mode si::bootwait:/etc/init.d/boot # /etc/init.d/rc takes care of runlevel handling l0:0:wait:/etc/init.d/rc 0 1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 #l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # what to do in single-user mode ls:S:wait:/etc/init.d/rc S ~~:S:respawn:/sbin/sulogin |
- Както се вижда, при всички случаи редът на изпълнение на действията е приблизително един и същ:
- Отначало се задава нивото на изпълнение (runlevel);
- След това се изпълняват действията по началната инициализация на системата, независещи от зададеното ниво. В различните дистрибуции за тази цел се използват различни скриптове:
- във Fedora Core –
/etc/rc.d/rc.sysinit
- в Knoppix –
/etc/init.d/rcS
- в Slackware –
/etc/rc.d/rc.S
(тоест скрипт за преход в Single User Mode) - в Gentoo –
/sbin/rc boot
- в SuSe –
/etc/init.d/boot
- във Fedora Core –
- След това се изпълнява скрипт за преход на дадено ниво на изпълнение15. При това, ако във Fedora Core и Gentoo за всяко ниво на изпълнение има отделен ред, то в Slackware за нивата от 2 до 5 се изпълняват едни и същи действия;
- И накрая, във всички дистрибуции, освен в SuSE, на отделен ред се извършва стартирането на графичната среда на системата.
При стила на System V се използва един и същ скрипт за преминаване на дадено ниво на изпълнение, а това какво прави този скрипт, се определя от съдържанието на директорията /etc/rc.d/rcN.d. Тази директория съдържа списък на връзки към стартиращи скриптове за тези системни услуги, които трябва да работят на ниво N. Самите скриптове се намират в директорията /etc/init.d или /etc/rc.d/init.d.
За разлика от стила System V, в BSD стила за всяко ниво на зареждане отговаря отделен скрипт. И отначало винаги се извършва преход на ниво S (еднопотребителски режим), а след това вече се преминава към зададеното ниво за ползване. Стилът BSD в най-чист вид (от разгледаните примери) е реализиран в дистрибуцията Slackware.
Тъй като стилът System V е взет за основа при създаването на стандарта LSB (Linux Standart Base), дистрибуциите, използвали преди BSD стил, в последно време започнаха да се грижат за реализиране на съвместимост със стила System V. Slackware осигуриха такава съвместимост от версия 7.0 на дистрибуцията си. Тази съвместимост се постига с използване на скрипта rc.sysinit, който провежда търсене на всички скриптове в стил System V в директорията /etc/rc/d и ги изпълнява, ако нивото на зареждане отговаря на исканото. Това е полезно, ако вие използвате комерсиален софтуер, който се ориентира по стила на System V. В същото време, вие можете да използвате и BSD скриптове.
6. ОБЛАСТ НА ПРИЛОЖЕНИЕ НА ДИСТРИБУЦИЯТА
За насочеността на дадена дистрибуция в определена област на приложение си струва да поговорим. Област на приложение е доста широко понятие. Както вече беше казано по-горе, под този термин попадат и изискванията към хардуера (дистрибуции за 486 процесори, за компютри без оптично устройство и така нататък), както и дистрибуциите, стартирани от нетрадиционни носители (CD-ROM, flash памет, външни или преносими дискове и др. такива). И броя на градациите или групите, отделени по този признак може да бъде много голям. Аз съставих по материали от Internet таблица 2, в която са показани отделни примери за това към какви области на приложение могат да бъдат ориентирани отделните дистрибуции. Трябва да ви предупредя, че голяма част от обясненията са дадени на основата на намерени в паяжината описания и информацията не е проверена лично, за което моля да не бъда съден строго за допуснати грешки.
Таблица 2.
Ориентация | Основни представители |
---|---|
Дистрибуции с общо предназначение |
|
Дистрибуции за мейнфрейм машини | |
Сървърни дистрибуции |
|
Сигурни дистрибуции |
|
Дистрибуции за мултимедия | |
Дистрибуции за маршрутизатори и защитни стени |
|
Дистрибуции за вградени системи |
|
Дистрибуции за „слаби“ компютри |
|
Дистрибуции, стартирани от CD и bootable business card18, т.е. CD с обем не повече от 50 MB. |
|
Дистрибуции за USB |
|
Минидистрибуции, стартирани от дискета |
|
Дистрибуции, стартирани под Windows |
|
Ще отбележа, че на сайта на Linux Weekly News има много по-подробна таблица, класифицираща дистрибуциите по тяхното предназначение [3].
7. ОКОНЧАТЕЛНА ТАБЛИЦА И ЗАКЛЮЧЕНИЕ
- начинът на първоначално зареждане;
- системата за управление на пакети;
- предназначението на дистрибуцията.
- Обобщавайки гореизложеното, може да направим извода, че съществуват три съществени критерия за класифициране на дистрибуциите на Linux:
И ако сведем всичко в една обща таблица, ще получим „периодичната система“ на дистрибуциите на Linux, представена в Таблица 3.
Таблица 3.
System V, RPM/YUM | System V, DEB | System V, APT-RPM | System V, TGZ | System V, Source | System V, Portage | System V, Други | BSD, RPM/YUM | BSD, DEB | BSD, APT-RPM | BSD, TGZ | BSD, Source | BSD, Portage | BSD, Други | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Сървърни | RHEL, SuSE | |||||||||||||
С общо предназначение | Fedora, Mandrake | Debian | ASPLinux, ALT Linux | LFS | Gentoo | Slackware, Arch | ||||||||
Защитени | Trustix | |||||||||||||
За мултимедия | ||||||||||||||
Маршрутизатори | ||||||||||||||
За вградени системи | ||||||||||||||
За „слаби“ машини | ||||||||||||||
Стартирани от нетрадиционни носители (Live CD, USB и т. н.) | Knoppix, DamnSmall | |||||||||||||
Стартирани под Windows |
Тази таблица може да бъде допълвана „по вертикала“ чрез добавяне на нови области на приложение на Linux.
За съжаление, аз не съм в състояние да разпределя всички съществуващи към настоящият момент дистрибуции по клетките на таблицата. Поставих само тези дистрибуции, с които съм запознат. Ако вие сте работили с други дистрибуции и можете да ми помогнете в запълването на таблицата, пишете на адрес kos at rus-linux dot net. Аз ще се старая да попълвам тази таблица по хода на пристигащите съобщения.
БИБЛИОГРАФИЯ:
- DistroWatch
- Wikipedia
- The Linux Weekly News comprehensive list of distributions
- Distribution Reviews
- А. Федорчук, “Демоны, пингвины и пользователи. Начнем с пингвинов.”
- А. Федорчук, “О дистрибутивах Linux”20
- А. Федорчук, “Кое-что об ОС, Unix’ах, Linux’ах и BSD”
- В. Костромин, „Red Hat Linux 9 Cyrillic Edition с точки зрения пользователя“, часть 1. Инсталляция. 1.2. Минимальная конфигурация. Базовый набор.
- Э. Немет, Г. Снайдер, С. Сибасс, Т. Хейн, „UNIX: руководство системного администратора“, Киев, БХВ, 1999 г.
- Джерард Бикманс, Linux From Scratch, версия 5.0, перевод: Виталий Катраев.
- Sean Russell, RPM Hell. A Perfect Example of Good Software Crippled by Bad Design.