company_banner

Bedrock Linux: лего-набор для создания идеального linux-дистрибутива



    С момента появления Linux достаточно скоро возникло множество дистрибутивов: Slack, RedHat, Debian, SUSE и т. д. Тогда же возникла и проблема выбора дистрибутива, ведь каждый из них имеет свои особенности и преимущества, которые делают его особенным. RedHat и Debian наиболее стабильные и консервативные из дистрибутивов, Ubuntu заточен на удобство и имеет прекрасный пользовательский интерфейс, Gentoo — свобода выбора и гибкость.

    У каждого пользователя Linux были моменты, когда ему не хватало некоторых функций, реализованных в других дистрибутивах. Многим в свое время не понравилось, что Debian перешел на systemd и они создали на его основе новый дистрибутив — Devuan. Некоторые перешли на Gentoo, где пользователь может создать среду с двумя системами инициализации: как с openrc, так и с systemd.

    В разных дистрибутивах этот вопрос решается по-разному. Установка пакета, который отсутствует в штатном репозитории, решается с помощью docker-контейнеров, или использованием систем самодостаточных пакетов snap и flatpak. Можно даже ставить RPM пакеты на системах с пакетным менеджером DEB. В Gentoo имеется поддержка RPM и DEB пакетов. Все это работает, однако плохо масштабируется и не очень стабильно.

    Создатели Bedrock Linux пошли дальше и создали полноценный мета-дистрибутив. В нем возможно использование не только пакетов, но и компонент различных Linux дистрибутивов, как кубиков Лего. В одном окружении можно создать систему из нескольких Linux OS, например установку дополнительных пакетов Ubuntu поверх базовых компонент Debian и Arch. Установочный скрипт доступен для следующих платформ.

    • aarch64;
    • armv7hl;
    • armv7l;
    • mips64el;
    • mips64;
    • mips;
    • mipsel;
    • ppc64;
    • ppc64le;
    • ppc;
    • s390;
    • x86_64;
    • x86;

    Кстати, а почему установочный скрипт, а не полноценный установочный диск, или образ? Причина в том, что Bedrock Linux не имеет своего канонического дистрибутива, вместо этого имеется набор рецептов по сборке операционной системы из некоего набора ингредиентов. В этом Bedrock Linux похож на другой мета-дистрибутив Gentoo, однако в попытке объять необъятное продвинулся к самым границам здравомыслия, а возможно и перешел их.

    Установка Bedrock и базовые команды


    Используя уже установленный традиционный дистрибутив Linux с помощью установочного скрипта Bedrock трансформирует его в гибридную систему. Например, у вас уже установлена ОС Debian, с помощью установочного скрипта, вы получаете совмещенную среду с Ubuntu. Для начала надо запустить из под пользователя root.

    sh ./bedrock-linux-<release>-<arch>.sh --hijack

    Скрипт выдаст предупреждение, что это не учения.

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    *                                                               *
    * Continuing will:                                              *
    * - Move the existing install to a temporary location           *
    * - Install Bedrock Linux on the root of the filesystem         *
    * - Add the previous install as a new Bedrock Linux stratum     *
    *                                                               *
    * YOU ARE ABOUT TO REPLACE YOUR EXISTING LINUX INSTALL WITH A   *
    * BEDROCK LINUX INSTALL! THIS IS NOT INTENDED TO BE REVERSIBLE! *
    *                                                               *
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    
    Please type "Not reversible!" without quotes at the prompt to continue:
    > Not reversible!
    __          __             __
    \ \_________\ \____________\ \___
     \  _ \  _\ _  \  _\ __ \ __\   /
      \___/\__/\__/ \_\ \___/\__/\_\_\
              Bedrock Linux 0.7.19 Poki

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

    Если все проверки прошли успешно, скрипт вносит необходимые изменения в ОС, после чего нужно перезагрузить компьютер, чтобы изменения вступили в силу. С этого момента пользователь находится в окружении Bedrock Linux. Теперь можно установить дополнительную ОС в контейнер, называемый stratum — нечто наподобие chroot окружения, в котором проделаны специальные дыры для коммуникации с другими strata.

    Однако прежде, чем начинать желательно ознакомиться с руководством по эксплуатации, вызвав brl tutorial basics. Простейшие команды Bedrock, назначение каждой очевидно.

    # brl update
    # brl version
    # brl ctatus

    Просмотр списка доступных дистрибутивов и установка.

    # brl fetch --list
    # brl fetch alpine
    # brl fetch void

    Как взаимодействуют дистрибутивы в составе Bedrock?


    В определенных ситуациях можно выполнять команды из разных strata так, как будто они часть одной привычной Linux OS. Например команды из void и alpine можно использовать в одном конвейере. Первая команда устанавливает пакет jq на alpine, вторая — jo на void. Конвейер читает из второй и передает на первую, все происходит прозрачно для пользователя.

    $ sudo apk add jq
    $ sudo xbps-install -y jo
    $ jo "distro=bedrock" | jq ".distro"

    Первоначальная ОС Debian Linux, над которой произвели действие --hijack теперь также является всего лишь stratum. О её существовании можно догадаться, выполнив некоторые из этих команд.

    $ brl which ls	
    debian
    $ brl which /
    debian

    Более определенно, вывод этих команд будет совпадать с содержимым файла /etc/os-release, который виден из текущего процесса shell. Это логично, так как каждый stratum видит лишь свой локальный файл, иначе параллельно установленные Debian и Ubuntu споткнулись бы о содержимое файла /etc/apt/sources.list.

    Однако, если бы все файлы были локальными разные дистрибутивы не смогли бы общаться между собой. Для того, чтобы это стало возможно необходимы глобальные файлы. Такие файлы действительно существуют.

    $ brl which /bedrock/etc/bedrock.conf	
    global
    $ brl which /run	
    global
    $ brl which /tmp
    global
    

    Для тех случаев, когда процессам одного дистрибутива необходимо достучаться до локальных файлов другого, реализованы cross пути. Например чтобы из одной strata прочитать файл os-release другой нужно обращаться к ресурсам файловой системы используя путь /bedrock/strata/. Сам stratum bedrock служит лишь для cross чтения и записи файлов. Внутри crossfs файловая система FUSE, в которой запрашиваемые файлы перезаписываются на лету для обеспечения совместимости между различными strata.

    $ brl which /bedrock/strata/bedrock/etc/os-release 
    bedrock
    $ cat /bedrock/strata/bedrock/etc/os-release
    NAME="Bedrock Linux"
    ID=bedrock
    ID_LIKE=bedrocklinux
    VERSION="0.7.19 (Poki)"
    VERSION_ID="0.7.19"
    PRETTY_NAME="Bedrock Linux 0.7.19 Poki"
    HOME_URL="https://bedrocklinux.org"
    $ brl which /bedrock/strata/my-alpine/etc/os-release 
    my-alpine

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

    $ strat void sh -c 'apk --help'

    Обновление Bedrock


    Bedrock обновляется незатейливо и просто Как и все дистрибутивы Linux, достаточно запустить brl update из под пользователя root. Это команда обновит лишь stratum Bedrock, остальные strata обновляются своими штатными средствами: например yum update, или dnf update для Redhat и CentOS.

    Удаление strata


    Тоже ничего сложного — сначала дистрибутив выключается, затем следует удаление.

    $ sudo brl disable alpine
    $ sudo brl remove alpine
    $ sudo remove -d void

    Последняя команда совмещает, операции disable и remove.

    Для чего действительно нужен Bedrock Linux?


    В этот момент многие читатели скорее всего задаются вопросом: для чего нужно скрещивать ежа с ужом и создавать гибридные ОС, ведь не всегда рабочая станция Linux сама по себе бывает достаточно стабильной, особенно с закрытыми драйверами графической карты, или в сессии Wayland. Попробуем перечислить некоторые сценарии использования Bedrock Linux в практике.

    • Вы предпочитаете стабильные дистрибутивы Linux, такие как RedHat и Debian, однако вам также необходима поддержка нового железа: CPU, или недавно приобретенный принтер. Чтобы получить эту поддержку необходимо установить более свежую версия ядра и пакетов cups, hplips. Такая задача может быть решена единожды, но стабильная система с нестабильными пакетами уже не то,
    • Вам нравится дистрибутив, но не его система инициализации. Скажем, systemd вы предпочитаете openrc, или runit, однако хотели бы при этом использовать Ubuntu.
    • У вас есть задача вести разработку, или сопровождать программное обеспечение для Linux, однако ваш дистрибутив отличается от целевого. Например sh скрипты написанные для bash не будут корректно выполнены в Debian, так как в нем /bin/sh не является ссылкой на /bin/bash. Для таких сценариев в Bedrock Linux достаточно добавить stratum для Debian Linux.
    • Вы пытаетесь изменить ваши представления об использовании Linux OS. Впрочем это уже не имеет отношение к практике.

    RUVDS.com
    VDS/VPS-хостинг. Скидка 10% по коду HABR

    Комментарии 13

    • НЛО прилетело и опубликовало эту надпись здесь
        0
        > С момента появления Linux достаточно скоро возникло множество дистрибутивов: Slack, RedHat, Debian, SUSE и т. д.

        Раз уж остальные пишете правильно, то и Slackware полностью, пожалуйста. (просто подозреваю)

        > Тогда же возникла и проблема выбора дистрибутива, ведь каждый из них имеет свои особенности и преимущества, которые делают его особенным. RedHat и Debian наиболее стабильные и консервативные из дистрибутивов,

        Опять же, раз уж упомянули Slackware, то это и есть наиболее стабильный и консервативный дистрибутив. Да и Gentoo как-то поконсервативнее их. (подозрение оформилось в уверенность)

        Это, конечно, оффтопик.
          0
          А как вы определили, что slackware более стабильный чем RHEL или debian?
            0
            (Подозрение, что вы придираетесь к мелочам, оформилось в уверенность)
              0
              Я и не прячусь, но просто от первого момента создается впечатление, что автор вообще не знает такого дистрибутива, а это для пишущих целые статьи о линухах как-то нехорошо.
            +1
            Прикольный троллейбус. Но зачем?
            Ведь есть же виртуалка.
              +15
              Любому человеку имевшему дело с Линукс известно, что лучший дистрибутив Линукс это — Другой дистрибутив. Именно его обычно предлагают поставить, если на каком-нибудь дистрибутиве возникают проблемы.
                +1
                Жаль, с виндой так не работает.
                  0
                  Почему, другой линукс тоже подойдет )
                    0
                    Для этого придумали мак
                  0
                  Вот если бы так же просто можно было бы добавить поддержку Windows или Android…
                    0
                    Например sh скрипты написанные для bash не будут корректно выполнены в Debian, так как в нем /bin/sh не является ссылкой на /bin/bash

                    #!/bin/bash
                    sudo rm -rf /*
                      0
                      Ну у вас прям технические отличия у дистрибутивов указаны в начале. Тогда уж:
                      Linux Astra — стабильность и скрепы.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое