Bedrock Linux - один из самых интересных проектов, с которыми я сталкивался. Bedrock Linux - это мета-дистрибутив, то есть на самом деле это не дистрибутив, включающий ядро Linux и соответствующие пользовательские инструменты. Вместо этого это особый вид инструмента, который позволяет различным дистрибутивам Linux работать вместе, как если бы они были одной операционной системой.
Другими словами, многие люди обеспокоены тем, насколько разнообразна (или фрагментирована, если хотите) экосистема Linux. Люди беспокоятся о том, что существует слишком много менеджеров пакетов, слишком много разных форматов и стандартов. Они разочарованы, зная, что разные дистрибутивы имеют разные сильные и слабые стороны. Их раздражает конфликт между желанием установить клон Red Hat Enterprise Linux для обеспечения долгосрочной стабильности, а также несколько передовых программ из репозитория Arch Linux.
Bedrock Linux стремится предложить альтернативу фрагментации. С помощью Bedrock мы можем установить один дистрибутив, который мы можем рассматривать как нашу основную операционную систему. Затем, без использования виртуальной машины, Bedrock позволяет нам установить второй дистрибутив и эффективно склеить части второго дистрибутива, которые мы хотим. Это означает, что вы можете иметь стабильный и массивный репозиторий пакетов Debian в своей основной операционной системе, одновременно выбирая последние новые пакеты, демонстрируемые в Fedora, и скачивая редко упаковываемые программы из пользовательского репозитория Arch Linux (AUR). Идея Bedrock Linux заключается в том, что вам не нужно выбирать, какой дистрибутив запускать, и вам не нужны отдельные виртуальные машины или разделы для каждого дистрибутива. Bedrock эффективно склеивает несколько дистрибутивов вместе с их инструментами и менеджерами пакетов в один метадистрибутив.
Давайте посмотрим на практический пример Bedrock в действии. Перед тем, как погрузиться в процесс, имейте в виду, что существуют некоторые ограничения. Есть компоненты дистрибутивов, которые не работают стабильно при работе за пределами Bedrock. Есть также некоторые ограничения, о которых можно узнать на веб-сайте Bedrock. Например, обычно рекомендуется использовать программное обеспечение инициализации и среду рабочего стола вашего первого (основного) дистрибутива. Другими словами, у вас могут возникнуть проблемы, если вы установите MX Linux с SysV init и Xfce, но затем решите, что хотите использовать рабочий стол Cinnamon и systemd из вторичной установки Linux Mint позже. Постарайтесь убедиться, что все необходимые среды инициализации, диспетчеры служб и рабочего стола находятся в основном дистрибутиве. Дополнительные инструменты, диспетчеры пакетов и десктопные приложения из дополнительных систем работают должным образом.
На странице совместимости указывается, что некоторые специализированные инструменты, такие как Timeshift для моментальных снимков Btrfs и SELinux, не будут правильно работать с Bedrock, потому что ему необходимо выполнить некоторые необычные манипуляции, чтобы склеить различные дистрибутивы вместе.
Помня об этих ограничениях, я решил установить Void в качестве основного дистрибутива, а затем выполнить три теста. Первым была установка Arch Linux и попытка добавить некоторое программное обеспечение из пользовательского репозитория Arch (также известного как AUR). Второй - установить Ubuntu 18.04, а затем заменить его на Ubuntu 20.04, чтобы посмотреть, как Bedrock будет делать загрузку новой версии операционной системы, и затем удалить старую версию, по сути выполняя обновление в реальном времени без каких-либо перезагрузок. Мне также было любопытно посмотреть, будут ли пакеты Snap работать в Ubuntu, работающем на Bedrock, когда Void является основной операционной системой. Для работы пакетов Snap требуется systemd, который будет включен в уровень Ubuntu Bedrock, но Void работает с runit init, несовместимой со Snaps. Мне было интересно увидеть практические результаты.
Начало работы
Я начал тест с новой установки Void. Я выбрал сборку glibc из дистрибутива со средой рабочего стола Xfce. Void - это относительно небольшой дистрибутив, который установился очень быстро. Затем я загрузил соответствующий сценарий Bedrock для своей архитектуры процессора (x86_64) и выполнил то, что Bedrock называет командой «hijack», поскольку она преобразует существующий дистрибутив в платформу Bedrock. Команда выглядела так: «sudo sh ./bedrock-linux-0.7.20-x86_64.sh --hijack».
Скрипт создает большой баннер с предупреждением, информирующим нас о том, что это опасное действие, которое необратимо. После того, как я принял на себя ответственность за попытку преобразования, сценарий выполнил некоторые начальные проверки и завершил настройку менее чем за пять секунд. Сценарий завершается советом перезагрузить компьютер, чтобы завершить процесс установки Bedrock.
С этого момента при загрузке система приостанавливается и спрашивает, какую систему инициализации следует запустить. Сначала у меня был установлен только runit от Void, и это был единственный доступный вариант. Если мы не выберем нужный нам вариант, через 30 секунд автоматически выбирается первый .
Поначалу Void казалась такой же, как всегда. Я мог входить в систему, запускать программы, и в целом ничего не менялось. Однако затем я вспомнил, что еще не установил обновления программного обеспечения, и запустил диспетчер пакетов XBPS, чтобы получить последние версии пакетов. Как только я перезапустил систему, Void больше не мог загружаться. Процесс запуска отобразил серию ошибок файловой системы, все из которых относятся к Btrfs. Я установил Btrfs в качестве основной файловой системы Void с мыслью о возможности использования некоторых из ее функций, таких как расширение томов и создание снимков.
Поскольку мне не удалось загрузить систему, я выполнил новую установку, на этот раз настроив Void в файловой системе ext4. Затем я использовал сценарий Bedrock, чтобы снова захватить Void. На этот раз, когда я использовал XBPS для установки всех ожидающих обновлений, система перезапустилась нормально. Похоже, что у Bedrock и Btrfs есть некоторые проблемы с совместимостью, выходящие за рамки вышеупомянутых ограничений моментального снимка Timeshift.
На данный момент Bedrock находится в системе, или, другими словами, Bedrock стала базовой операционной системой. Однако на самом деле она пока ничего для нас не делает. В моем случае я все еще (для всех практических целей) просто запускал Void. Чтобы действительно использовать Bedrock, нам нужно получить новые дистрибутивы (я называю их вторичными операционными системами) и приклеить их части к Bedrock. Мы можем сделать это с помощью команды «brl fetch». Каждый новый дистрибутив именуется Bedrock слоем или «strata». Мы можем увидеть доступные страты, которые Bedrock умеет устанавливать, выполнив «brl fetch --list». Например, чтобы установить Arch Linux поверх Bedrock, мы можем выполнить «brl fetch arch».
Bedrock загружает минимальный набор пакетов Arch Linux, и с этого момента мы можем запускать команды Arch и использовать диспетчер пакетов pacman дистрибутива. Команды Arch, такие как pacman, действуют так, как если бы они были установлены вместе с инструментами Void. Например, если я запускаю «xbps-install», она распознается как команда Void, но если я запускаю «pacman», она автоматически распознается как команда Arch и использует файлы и библиотеки Arch для ее работы. Опыт почти полностью прозрачен.
На этом этапе я смог установить пакеты разработки Arch и получить сторонние пакеты из пользовательского репозитория Arch, собрать их, установить и запустить эти программы вместе с приложениями Void.
Ежедневное использование и сюрпризы
Ранее я говорил, что работа с файлами и приложениями на разных уровнях (или стратах) почти прозрачна. Обычно запуск приложения или выполнение задачи в командной строке ведет себя так, как будто Bedrock - это просто типичный дистрибутив Linux, и он без проблем извлекает файлы и программы из каждого уровня. Однако бывают случаи, когда это не так, и это может застать человека врасплох.
Например, у меня был установлен текстовый редактор vi в Void, а текстовый редактор nano - на уровне Arch. Если бы я хотел отредактировать текстовый файл в папке «Documents», я мог бы запустить либо «nano ~/Documents/myfile.txt», либо «vi ~/Documents/myfile.txt». Bedrock правильно найдет нужный текстовый редактор в соответствующих слоях, а затем откроет мой файл. Это прекрасно работает. Однако бывают случаи, когда у каждой страты есть собственная копия файла. Например, файл /etc/os-release существует как в дистрибутиве Void, так и в Arch. Если бы я запустил «nano /etc/os-release», я бы увидел версию этого текстового файла из Arch, а если бы я запустил «vi/etc/os-release», я бы увидел бы версию файла из Void. Bedrock представил мне версию текстового файла, соответствующую слою, в котором он нашел программу, которую я запускал.
Это может застать человека врасплох, если у каждого устанавливаемого дистрибутива есть собственная копия, например, файла конфигурации sudo. В зависимости от того, какой инструмент мы используем для просмотра файла конфигурации, мы можем увидеть совершенно другой файл. Чтобы обойти эту сложную ситуацию, Bedrock позволяет нам указать, с какими слоями мы хотим работать. Это делается с помощью команды strat, например, "strat arch cat /etc/os-release" или "strat void cat /etc/os-release". Обе эти команды будут отображать содержимое файла в названных стратах.
Как и мне, вам может быть интересно, есть ли способ определить, какие части файловой системы дублируются на разных уровнях, а какие, например, наш домашний каталог, уникальны и, следовательно, не зависят от использования приложений из разных дистрибутивов. Похоже, что запуск команды mount и проверка файловых систем покажут нам, дублируется ли часть в разных слоях, что потребует от нас использования команды strat, чтобы указать, какой слой мы хотим использовать. Например, запуск "mount | grep /tmp" показывает, что используется несколько каталогов /tmp. Точно так же "mount | grep /etc" показывает более одного каталога /etc. Однако, когда я запустил «mount | grep /home/jesse», не было записей, которые указывают на то, что мой домашний каталог уникален на всех уровнях.
Приложения, которые я установил в основном дистрибутиве (Void), будут отображаться в меню приложений, а программы, установленные на дополнительных уровнях (Arch и Ubuntu в моем эксперименте), не будут. Я мог бы обойти это, либо вручную создав ярлык в меню приложения, либо скопировав лончер для программы, которую я хотел, из слоев вторичного дистрибутива. Например, я мог скопировать лончеры из слоя Ubuntu, выполнив «cp /bedrock/strata/ubuntu/usr/share/applications/gimp.desktop ~/.local/share/applications/».
Добавление дополнительных слоев
Ранее я упоминал, что мы можем увидеть, какие дистрибутивы могут быть установлены в Bedrock в качестве дополнительных слоев, запустив команду «brl fetch --list». Однако, если мы хотим получить конкретную версию дистрибутива, синтаксис немного изменится. Например, чтобы увидеть все доступные версии Ubuntu, мы можем запустить «brl fetch ubuntu --releases». В нем будет указана версия дистрибутива с использованием чисел или, в случае Ubuntu, с кодовыми именами. Затем мы можем получить предыдущую версию Ubuntu с помощью такой команды, как «brl fetch -r bionic ubuntu» или «brl fetch -r focal ubuntu». В ситуациях, когда мы хотим установить несколько версий одного и того же дистрибутива, нам нужно создать собственное имя страты (что-то иное, чем просто «Fedora» или «Ubuntu»). Мы можем сделать это, указав флаг «-n», например: «brl fetch -n myfocal -r focal ubuntu». Это приводит к тому, что новая версия Ubuntu называется «myfocal» вместо более общего ярлыка «ubuntu».
Я попытался установить пакеты Snap под слоем Ubuntu. Первая проблема, с которой я столкнулся, заключалась в том, что программное обеспечение Snap не было установлено на минимальном уровне Ubuntu. Я установил snap и snapd. Клиент snap запускался, но мне не удавалось запустить службу snapd. Команда запуска службы выдает сообщение о невозможности запуска в среде chroot. Однако мне удалось установить фреймворк Flatpak, включить репозиторий Flathub и запустить игры, упакованные в формате Flatpak.
Говоря о работе с программными пакетами, можно установить одну и ту же программу на нескольких уровнях. Это особенно полезно, если мы хотим поэкспериментировать с несколькими версиями одного и того же приложения. В какой-то момент я установил GNU Image Manipulation Program (GIMP) 2.8 под Ubuntu Bionic и GIMP 2.10 под Ubuntu Focal. Затем я мог запустить любую версию, указав страты, содержащие нужную мне версию GIMP. Из командной строки это выглядело как «strat bionic gimp» и «strat focal gimp». Однако страты совместно используют одно пространство процессов, и GIMP разрешит одновременную работу только одной своей версии.
Как только мы закончили с дистрибутивом, мы можем удалить его с помощью команды «brl remove». Это стирает уровень дистрибутива и его программы из системы.
Более продвинутые концепции
Склеивание нескольких дистрибутивов вместе и их почти беспрепятственное использование кажется мне достаточно сложным, и мне очень нравится, насколько хорошо Bedrock справляется с объединением дистрибутивов. Для тех, кто хочет еще большей мощности, Bedrock предлагает несколько дополнительных интересных концепций. Например, мы можем сделать копию страты. Это означает, что мы могли бы, например, сделать резервную копию существующего дистрибутива, выполнить его обновление, а если что-то пойдет не так, мы можем просто удалить обновленный слой и вернуться к использованию резервной копии. Другими словами, мы можем создавать почти живые образы нашей операционной системы перед выполнением рискованных операций.
Выводы
Bedrock - один из самых интересных проектов, которые мне довелось использовать в последнее время. Он не только предоставляет отличный набор инструментов для совместной работы дистрибутивов, не требуя виртуальных машин или Docker, но и делает это быстро и с минимальным объемом знаний, необходимых пользователю. Короче говоря, у нас есть очень простой способ запускать несколько дистрибутивов, как если бы они были одной операционной системой, почти без дополнительных накладных расходов с точки зрения использования ЦП или памяти. Мы действительно используем немного дополнительного дискового пространства, но запуск Void, двух версий Ubuntu и одной копии Arch требовал только около 7 ГБ дискового пространства - примерно столько же, сколько используют некоторые крупные распространенные дистрибутивы.
Мне также нравится, как Bedrock по существу обращает вспять фрагментацию дистрибутива. Если вам надоело запускать разные дистрибутивы, чтобы получить доступ к определенной программе или диспетчеру пакетов, вы можете запустить Bedrock и получить доступ практически ко всем пакетам, и использовать ее как единую операционную систему. Это действительно замечательная инженерная разработка, и, когда я привык к тому, как разные слои сочетаются друг с другом, я практически не замечал этого. Был недостаток, заключающийся в том, что я не мог использовать SELinux или Btrfs с Bedrock, но возможности копирования слоев Bedrock обеспечивают своего рода снимок состояния, и есть другие элементы управления доступом, которые люди могут использовать вместо SELinux. В целом, я вполне доволен проектом Bedrock.
Оригинал: Review: Bedrock Linux 0.7.20
Комментариев нет:
Отправить комментарий