В мире Linux мы привыкли видеть исключительно клоны. Debian, Ubuntu, Red Hat, SUSE — все это разные дистрибутивы, принципиального отличия в которых нет. Половина популярных Linux-дистрибутивов — это форки Debian или Ubuntu, другие — форки древнего Slackware с измененным менеджером пакетов и красивыми конфигураторами. От былого разнообразия не осталось и следа, но, может быть, мы просто плохо ищем?

 

Форк раздела «Введение» из прошлой статьи

Современному линуксоиду не понять, но раньше выбор дистрибутива был настоящей эпопеей. Дистрибутивы действительно отличались по многим параметрам, а ввиду отсутствия высокоскоростного интернета и виртуальных машин эти отличия играли весьма важную роль. Slackware предлагал сквозную простоту, Red Hat отличался проработанностью до мельчайших деталей и встроенными конфигураторами, Mandrake был оснащен графическим инсталлятором, а мегафичей Debian был APT, который позволял (ты не поверишь!) автоматически выкачивать софт из интернета.

Величайшей удачей было раздобыть четырехдисковый набор Red Hat, который включал в себя все графические оболочки и кучу прикладного софта, но, если это не удавалось, Mandrake на двух дисках был вполне пригоден. В те времена скачать образ диска могли лишь единицы, поэтому по рукам ходили многочисленные болванки с самыми ходовыми дистрибутивами. Само дистрибутивостроение отличалось относительной простотой и было пропитано духом just for fun, благодаря которому появлялись многочисленные Франкенштейны, включая мой собственный, почивший где-то на дне 10-гигабайтного диска Seagate.

Прошли годы, Seagate был убит Kingston, а дистрибутивы превратились в огромные сложные махины, созданные для выкачивания денег из компаний, чей админ внезапно уговорил начальство перевести серверы на Linux. Но где-то среди многочисленных инсталляций Ubuntu и Linux Mint продолжают существовать те самые Франкенштейны, которые привносят в мир Linux что-то новое, пусть и в честь очередного вытягивания денег.

 

Slax и модульная система расширения

В свое время Slax настолько меня впечатлил, что я вступил в группу разработчиков, намеревавшихся создать дистрибутив на основе его идей. Группа, впрочем, быстро прекратила свое существование по причине нереализуемости идеи, а вот Slax продолжает существовать и здравствовать.

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

Весь дополнительный софт для Slax распространяется в виде модулей с расширением sb. Модуль представляет собой образ файловой системы Squashfs (простая ФС со сжатием), который содержит приложение и все необходимые ему файлы, лежащие по тем путям файловой системы, где они должны быть в работающей системе (usr/bin/abiword, например). Стоит положить этот модуль в специальный каталог на флешке (/slax/modules) или нарезать на диск, и система автоматически подхватит его и смонтирует поверх корня LiveCD при загрузке (Unionfs монтирует ФС друг на друга, как слои пирога). В результате в системе появится приложение, которого физически там нет.

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

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

Содержимое пакета Slax

 

GoboLinux и отдельные каталоги приложений

Другой необычный для Linux (но стандартный в OS X и Windows) подход к установке стороннего софта используется в дистрибутиве GoboLinux. Вместо привычных любому юниксоиду каталогов /bin, /usr/bin, /usr/share и других, содержащих установленные приложения в «размазанном» по системе виде, GoboLinux использует набор каталогов /Programs, /Users, /System, /Files, /Mount и /Depot.

Фактически дистрибутив следует по пути OS X. Все системные файлы находятся в каталоге /System, а приложения, установленные пользователем, — в /Programs, каждое в своем собственном обособленном каталоге (например, /Programs/Firefox). В результате появляется возможность установки разных версий одного приложения (как вариант — библиотеки), а для удаления софта достаточно физически стереть каталог.

Однако в такой организации каталогов есть изъян, который заставил разработчиков GoboLinux применить несколько костылей. Проблема в том, что, в отличие от приложений для OS X, софт для UNIX пишется в соответствии со стандартом FHS, который предполагает наличие в системе стандартного дерева каталогов, включающего в себя те самые /bin, /etc, /lib, /usr и так далее. Приложения ожидают увидеть эту структуру на диске и при ее нарушении могут вести себя непредсказуемо.

Чтобы решить эту проблему, разработчики GoboLinux применили два хака: специальный модуль ядра и символические ссылки. Модуль скрывает все стандартные каталоги (/bin, /etc и прочие) при листинге корневого каталога, но оставляет возможность получить к ним доступ при прямом обращении. Так удается скрыть реальную структуру каталогов от пользователя.

Ссылки, в свою очередь, решают проблему совместимости. Все системные библиотеки и приложения, хранящиеся в /System, имеют символические ссылки в каталогах /bin и /lib, что позволяет системе правильно функционировать. Совместимость сторонних приложений обеспечивает инсталлятор, который создает новые ссылки для каждого устанавливаемого приложения. Так, при установке Firefox появится файл /usr/bin/firefox, который на самом деле ссылается на /Programs/Firefox/bin/firefox, а также ряд других ссылок.

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

Рабочий стол GoboLinux

 

NixOS, ее конфигуратор и менеджер пакетов

Говоря о менеджерах пакетов и организации файловой системы, нельзя не упомянуть NixOS, едва ли не самый интересный и «правильный» с точки зрения применяемых технологий дистрибутив. NixOS построена вокруг двух основных идей: декларативная модель конфигурации системы и современный менеджер пакетов, лишенный почти всех проблем, привычных dpkg, rpm и им подобных.

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

{

# Расположение загрузчика
boot.loader.grub.device = "/dev/sda";
# Корневой раздел системы
fileSystems."/".device = "/dev/sda1";
# Включить SSH по умолчанию
services.sshd.enable = true;
# Включить Apache (+ настройки)
services.httpd.enable = true;
services.httpd.adminAddr = "alice@example.org";
services.httpd.documentRoot = "/webroot";

}

Этот файл описывает стандартные настройки простого веб-сервера с доступом по SSH. Да, NixOS действительно позволяет держать настройки разных сервисов в одном файле, но соль не в этом, а в том, что, имея данный конфиг, легко клонировать весь дистрибутив. Достаточно скопировать этот файл в свежеустановленный экземпляр NixOS и запустить команду

$ nixos-rebuild switch

И вуаля. Через несколько минут мы получим дистрибутив с преднастроенными и запущенными SSH и Apache. Но самое интересное, что данная команда не просто устанавливает, настраивает и запускает софт, а фактически приводит дистрибутив к описанному состоянию. Это значит, что после выполнения команды в системе действительно останутся только SSH и преднастроенный Apache и ничего, кроме их зависимостей и конфигов (по сути, аналог установки с нуля).

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

Такое возможно потому, что разные версии (или сборки) одного пакета имеют различные пути расположения в системе внутри каталога /nix/store и идентифицируются системой по хешу, так что обновление — это всего лишь операция по выкачиванию новых версий пакетов, их разворачиванию по уникальному пути и «переключению» системы на их использование. Никто не запрещает в любой момент переключиться обратно. Косвенно такой подход решает проблему DLL Hell, позволяет откатывать приложения к прошлым версиям и, конечно же, устанавливать две версии одной софтины рядом друг с другом.

NixOS невероятно интересная система, и я рекомендую каждому, кто неравнодушен к Linux, обязательно ее попробовать. А мы идем дальше, на очереди QubesOS и ее виртуальные окружения.

Любую прошлую конфигурацию Nix можно загрузить прямо из Grub

 

QubesOS или Xen как основа для ОС

В разные времена предпринималось множество попыток создать защищенную операционную систему на основе технологий изоляции и виртуализации приложений. В свое время в рамках проекта Syngularity этим занималась даже Microsoft, однако ни одна из этих попыток не увенчалась успехом. Как бы хороши ни были идеи, заложенные в ОС, почти в 100% случаев они становились «жертвой второй системы» — перетащить юзеров и разработчиков на новую платформу не удавалось.

Проект QubesOS, начатый известным польским security-экспертом Иоанной Рутковской (Joanna Rutkowska), выгодно отличается на их фоне тем, что предлагает использовать для построения безопасной ОС уже существующие разработки, без необходимости ломать совместимость с приложениями, драйверами и с нуля писать миллионы строк кода. QubesOS — это всего лишь Linux-дистрибутив на основе Fedora, однако в отличие от других он изначально построен на идее жесткой изоляции приложений и компонентов системы с помощью виртуализации.

В основе системы лежит гипервизор Xen, поверх которого запускается несколько виртуальных машин (доменов), каждая из которых ответственна за выполнение своей системной функции. В отдельных доменах здесь работают сетевой стек (включая набор драйверов), файловые системы и драйверы RAID, а также графический стек, включающий в себя X-сервер. Для запуска приложений также применяются отдельные домены, но не по одному на каждое из них (иначе система умерла бы от быстрого исчерпания ОЗУ), а разделенные на «группы по интересам»: развлечения, работа, интернет-банкинг и так далее.

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

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

В настоящее время разработчики QubesOS готовят к выпуску второй релиз системы (RC2 уже доступен), в котором появятся отдельный домен для Windows-приложений и USB-домен для безопасной работы с USB-устройствами.

Принцип разделения QubesOS на домены

QubesOS: три приложения в разных доменах

QubesOS: бесшовный запуск приложений в Windows-домене

 

ChromeOS

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

По большому счету, ChromeOS — это сильно урезанная Ubuntu, поверх которой работает графическая среда, основанная на наработках проекта Chromium. За загрузку системы отвечает все тот же убунтовский Upstart, однако в силу необходимости запуска гораздо меньшего количества компонентов холодный старт ChromeOS происходит значительно быстрее (буквально за секунду). За графику здесь отвечает X.org, но используется он исключительно с целью правильной поддержки оборудования и устройств ввода, само изображение почти всегда идет в обход X-протокола напрямую в видеоадаптер (поэтому вскоре иксы будут заменены на Wayland или Mir).

Из других компонентов также используется графическая библиотека Clutter, PAM, D-Bus, NTP, syslog и cron. Идеи пакетов в системе нет, а все обновления ОС происходят в ходе OTA-обновления «одним куском». В ходе обновления система никогда не перезаписывается, а вместо этого использует второй системный раздел, который после перезагрузки становится первым. Таким образом, ChromeOS всегда можно откатить к предыдущему состоянию, а само обновление не может убить систему.

Благодаря отсутствию многих стандартных компонентов Linux-дистрибутивов и ориентированности на исполнение исключительно браузерных приложений, ChromeOS отличается высокой устойчивостью к взломам. Как и в случае с настольным браузером, каждое веб-приложение (читай: вкладка) исполняется в собственной песочнице, что позволяет предотвратить компрометацию всей системы в том случае, если злоумышленник найдет дыру в самом браузере. Системный раздел всегда смонтирован только на чтение. Для подтверждения целостности системы в хромбуках используется модуль TPM (Trusted Platform Module).

В целом ChromeOS — это не полноценная операционная система, а скорее очень нестандартный дистрибутив Linux, чего нельзя сказать, например, об Android или Firefox OS.

 

Debian GNU/kFreeBSD или «а почему бы и нет?»

Дистрибутив Debian всегда отличался широкой поддержкой самых разных компьютерных архитектур. Он способен работать на ARM, MIPS, PowerPC, Sparc и множестве других официально и неофициально поддерживаемых машин и процессоров. Однако один из самых интересных портов Debian был выполнен… на ядро FreeBSD.

По своей сути Debian GNU/kFreeBSD — это тот же самый дистрибутив, но модифицированный для запуска на ядре FreeBSD. Здесь есть привычный apt-get, набор конфигураторов, система инициализации в стиле System V, репозитории бинарных пакетов, KDE и GNOME, так что для конечного пользователя разница будет абсолютно не видна. Зато сисадмин найдет для себя много интересных плюшек.

Основной смысл существования этого проекта — получить возможность использовать технологии FreeBSD, недоступные в ядре Linux. К таким можно отнести нативную поддержку ZFS, модульную подсистему для работы с хранилищами данных GEOM, модульную сетевую подсистему Netgraph и, конечно же, эталонную реализацию TCP/IP-стека. Все это доступно в Debian GNU/kFreeBSD вместе с привычными плюшками Debian.

 

Вместо выводов

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


 

Блок-врезка: Другие интересные представители фауны

  • Glendix — попытка создать Linux-дистрибутив на основе идей Plan 9
  • Tiny Core Linux — полноценный дистрибутив размером 10 Мб
  • Maui — дистрибутив на основе Wayland и графической среды Hawaii
  • CoreOS — минималистичный серверный дистрибутив для запуска одного приложения
  • Stali — дистрибутив на основе идеи KISS от известного проекта Suckless


 

Боковые выносы: INFO

Впервые модель установки приложений в обособленные каталоги появилась в инсталляторе GNU Stow.

Интересно, что кроме Debian GNU/kFreeBSD существует также порт на микроядро Hurd, однако его состояние оставляет желать лучшего.

Версия браузера Chrome для Windows 8 — это не что иное, как ChromeOS в миниатюре.


Евгений Зобнин

Евгений Зобнин

Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

Оставить мнение

Check Also

Целенаправленная социальная инженерия. Нестандартные техники введения в заблуждение

В предыдущей статье мы разобрали массовые атаки. Но их применимость ограничена: пентестер …