Дистрибутив по Linux for yourself собрать нельзя, не умея читать документацию, искать нужную информацию в интернете и не зная строение Linux. Именно о строении и пойдёт речь в этой статье. Первая часть даст базовые сведения, а в следующих частях структура типичного Linux-дистрибутива будет рассмотрена подробнее.
-`FHS` (`Filesystem Hierarchy Standart`) - документ, который определяет схему директорий в UNIX-системах. FHS разработан, чтобы предоставить общую схему для упрощения независимой от дистрибутива разработки `программного обезпечения` (далее - `ПО`). Другими словами, это стандарт, унифицирующий местонахождение файлов и каталогов с общим назначением в файловой системе UNIX. Таблицу директорий и другую информацию вы сможете лицезреть [здесь](additional/partition_catalogs).
-`LSB` (`Linux Standart Base`) - совместный проект дистрибутивов Linux при организации Linux Foundation, целью которого является стандартизация их внутренней инфраструктуры. Цель LSB - разработать и продвигать набор стандартов, который увеличит совместимость различных дистрибутивов Linux и даст возможность запускать приложения на любой совместимой системе; помимо этого, LSB помогает сконцентрировать усилия в привлечении разработчиков к написанию и портированию ПО. LSB сертифицирует стандартные библиотеки, пару утилит, структуру иерархии `файловой системы` (далее - `ФС`), уровни запуска и et cetera.
-`конфиг` - сленговое. Означает "конфигурационный файл".
В данном разделе речь пойдёт про иерархию ФС Linux. Может быть применимо и к другим UNIX-Like системам и дистрибутивам, главное, чтобы они соответствовали стандарту `FHS`. Всякие NixOS и Gobo Linux не рассматриваем.
Спецификация FHS основывается на идее существования двух независимых классификаций файлов: разделяемых и неразделяемых, а также изменяемые и статичные. Разделяемые данные могут распространяться на несколько хостов; неразделяемые специфичны для конкретного хоста (например, конфиги). Соответственно, изменяемые файлы изменяются, а статичные - нет (за исключением установки и обслуживания системы).
Задача загрузчика - инициализировать ядро Linux (в нашем случае). В помощь ядру загрузчик обычно использует начальный образ загрузки - `initrd` или `initramfs`, представляющий собой архив с образом файловой системы, разворачивающейся в ОЗУ в начале загрузки. В`initrd`/`initramfs` находятся нужные драйверы, скрипты и прочее, что необходимо для инициализации оборудования и прочих целей.
-`z` - указатель того, что файл с ядром сжат (формат сжатия обычно `zlib`. Не всегда используется именно это сжатие, иногда можно встретить `LZMA` или `BZIP2`, поэтому некоторые ядра называют просто `zImage`).
Монолитное ядро больше и несколько сложнее других видов ядер. Ну и вспомните спор Таненбаума и Торвальдса. Ноу Linux есть достоинство - это _модули ядра_. Подключать нужные модули можно буквально на лету. вы можете запускать процессы сервера, подключать виртуализацию, а также полностью заменить ядро без перезагрузки. Например, команда
-`Ядро Linux` — основная интересующая нас часть; ядро создаёт абстрактный слой и является «посредником» между первыми двумя частями и hardware-частью компьютера;
-`Hardware controllers` (контроллеры оборудования) — подсистема, охватывающая все возможные физические устройства, такие как CPU, устройства памяти, жёсткие диски, сетевые карты — все они являются частью этой подсистемы
-`User applications` (пользовательские приложения) — набор пользовательских приложений, который в разных дистрибутивах Linux может быть разным. Например, в Linux For Yourself предложен самый небольшой набор ПО, которого хватит для корректной работы операционной системы.
Каждая подсистема может взаимодействовать только с двумя соседними, расположенными непосредственно «выше» и «ниже» её уровня. Кроме того, зависимости между этими подсистемами направлены сверху вниз: слои, расположенные выше — зависят от частей ниже, но части, расположенные ниже — не зависят от частей выше их.
-`Process Scheduler` (`SCHED`) — планировщик процессов, отвечает за контроль над доступом процессов к CPU. Планировщик обеспечивает такое поведения ядра, при котором все процессы имеют справедливый доступ к центральному процессору;
-`Memory Manager` (`MM`) — менеджер памяти, обеспечивает различным процессам безопасный доступ к основной памяти системы. Кроме того, MM обеспечивает работу виртуальной памяти, которая позволяет процессам использовать больше памяти, чем реально доступно в системе. Выделенная, но неиспользуемая память вытесняется на файловую систему, и при необходимости — возвращается из неё обратно в память (swapping);
-`Virtual File System` (`VFS`) — виртуальная файловая система, создаёт абстрактный слой, скрывая детали оборудования, предоставляя общий файловый интерфейс для всех устройств. Кроме того, VFS поддерживает несколько форматов файловых систем, которые совместимы с другими операционными системами;
-`Network Interface` (`NET`) — сетевые интерфейсы, обеспечивает работу с различными сетевыми стандартами и сетевым оборудованием;
-`Inter-Process Communication` (`IPC`) — межпроцессная подсистема, поддерживающая несколько механизмов для process-to-process связей в единой Linux-системе.
Символом ядра Linux является Tux, отличающийся от «обычных» пингвинов жёлтым цветом клюва и лап. Однако, в качестве символа Linux 2.6.29 был принят Tuz (тасманский дьявол), изображение которого ранее служило талисманом конференции linux.conf.au 2009. В следующих версиях ядра используется предыдущий пингвин Tux. Его можно наблюдать и поныне.
После ядра стартует `init` - подсистема инициализации в UNIX-ах, которая запускает все остальные процессы. Имеет `PID`=1. Раньше, де-факто стандартным инитом в GNU/Linux был SysVinit. Однако, в самом начале 10-ых были попытки заменить SysVinit на другую систему инициализации. Например, в Ubuntu первое время использовался `upstart` от Canonical, а в Gentoo Linux используется OpenRC. Также был создан `systemd`, на который в данный момент перешло большинство дистрибутивов Linux.
-Не_Unix Way_. systemd - монолитная и сложная система, заменяющая собой не только инит, но и планировщик, менеджер сети, утилиту по смене корня системы, просмотрщик логов и пр, что не особо нужно многим пользователям
- systemd требуется несколько больше ресурсов, чем его менее прожорливым товарищам, из-за чего на старом железе лучше использовать дистрибутив с другой системой инициализации, например, классическим `SysVinit`
-`bourne again shell` (bash) - ставшая классической в Linux оболочка, которая используется во многих дистрибутивах по умолчанию. В Linux for yourself `/bin/sh` является символической ссылкой на `/bin/bash`;
-`BusyBox` - представляет собой целое пользовательское окружение, в том числе, командную оболочку (вызов: `busybox sh`). Достоинство: малый размер и небольшие требования к аппаратуре;
-`Z shell` (zsh) - мощная современная оболочка. Она почти полностью совместима с bash, но имеет преимущества, такие как улучшенное завершение на клавишу Tab (англ. tab completion), автоматическое исправление опечаток и огромное количество разработанных сообществом плагинов. К слову, именно она по умолчанию используется в macOS.
-`friendly interactive shell` (fish) - удобная оболочка, которая "из коробки" имеет подсветку синтаксиса, автодополнения, генерируемые из мануалов, и т. п. Из минусов нужно выделить несовместимость со спецификацией POSIX sh;
Хочу заострить ваше внимание на том, что оконный менеджер, панель и некоторые другие компоненты можно использовать и отдельно от рабочего окружения. Например, оконные менеджеры Fluxbox, Openbox, i3-wm, Awesome, Sway и др. используются отдельно от DE. Также существуют отдельные файловые менеджеры, которые так же поставляются отдельно от рабочего окружения.
Дисплейный сервер - программа, отвечающая за координацию ввода и вывода своих клиентов сОС, а также между оборудованием и ОС. Именно благодаря Display Server вы используете Linux в графическом режиме, а не в TTY. Когда говорят "дисплейный сервер", нередко имеют ввиду `Xorg`, `Wayland`, `Mir` и прочие.
Я не случайно начал именно с WM. Во-первых, про DE было сказано выше, а во-вторых, оконный менеджер можно использовать отдельно от всего громоздкого рабочего окружения.
Что такое `WM` было так же сказано выше. Можно выделить три вида оконных менеджеров:
-`Стековые` (`плавающие`, англ. `stacking`, `floating`) следуют классической метафоре, которая на данный момент самая удобная и популярная. Классическое расположение окон, которые могут накладываться и перекрывать друг друга;
-`Фреймовые` (англ. `tiling`) WM располагают окна в виде `фреймов` (`плиток`), эти фреймы не способны перекрывать друг друга, подобное поведение встречается в графическом интерфейсе _Windows_ 1.x. Наиболее удобно использовать такие оконные менеджеры посредством клавиатуры, хотя поддержка мыши во многих из них также присутствует;
-`Динамические` (например, i3wm) - динамически переключаются между двумя режимами, описанными выше (`стековый` и `фреймовый` режимы). Поддержка мыши есть в большинстве из них.