Bedrock Linux – это «метадистрибутив», что в понимании авторов означает «программа для управления другими дистрибутивами».
Вы ставите любой дистрибутив по вкусу (из списка поддерживаемых) тем способом, который вам нравится. После этого запускаете установщик Bedrock Linux. Bedrock Linux перехватывает управление над системой, внедряясь в качестве дефолтного инита, изменяя и добавляя точки монтирования и т.п. После перезагрузки вы оказываетесь в системе, которая работает «внутри» Bedrock Linux. Вы можете устанавливать другие операционные системы семейства Linux «рядом» с основной системой и свободно смешивать софт из них. (Общий /bin, список файлов *.desktop, bash-completion, man pages и другие интеграционные фичи).
Библиотеки при этом не общие, таким образом дистрибутивы не нарушают бинарную совместимость друг друга.
Это всё красивая теория. Что на практике:
Я пожертвовал установленным на флешке Арчем, чтобы поэкспериментировать с Bedrock. Этот Арч, как и все мои Арчи, представляет собой клона основной системы, которая работает около 10 лет без переустановок. Так что я заранее был готов, что при накатывании сверху Bedrock всё развалится. Как пишут авторы, они тестируют работу системы только поверх свежеустановленного дистрибутива.
Для начала:
# ./bedrock-linux-0.7.17-x86_64.sh --hijack Arch
No file detected at /sbin/init. Unable to hijack init system.
Смотрим в код. Установочный скрипт даже не пытается обнаружить, какой инит на самом деле использован:
if ! [ -r "/sbin/init" ]; then
abort "No file detected at /sbin/init. Unable to hijack init system."
fi
Мне лень писать ln -s ...
вручную, поэтому просто ставлю пакет, который притащит нужный симлинк:
# pacman -S systemd-sysvcompat
Вот такой у меня повидавший жизнь и кучу апдейтов экземпляр Арча, в котором не стоит systemd-sysvcompat. Ладно, пофиксил, едем дальше.
Запускаю установку, на этот раз Bedrock ставится нормально. Говорит, что внедрился в операционную систему, и что надо перезагрузиться.
Сначала смотрю, что он сделал:
- Создал директорию
/bedrock
со своими конфигами и бинарниками. - Заменил симлинк
/sbin/init
на свой скрипт запуска.
Других изменений не заметно.
Конфиг в /boot/grub/grub.cfg
не поправил и даже не сказал, что я должен это проверить. А в конфиге вписан совсем не тот init:
menuentry "Archlinux Ester (mainline)" {
linux /boot/vmlinuz-linux root=$root_dev ro init=/usr/lib/systemd/systemd
initrd /boot/initramfs-linux.img
}
Правлю инит. Перезагружаюсь.
Получаю сообщение «No suitable video mode found. Booting in blind mode.» и… система не грузится.
Ну, это мой косяк. Сообщение было и раньше, и пока systemd не переключит видеорежим, экран действительно оставался чёрным.
Догадываюсь, что Bedrock пытается на чёрном экране показать мне своё boot menu. Нажимаю enter. Запускается systemd. Ура, у нас есть картинка.
Снова лезу в /boot/grub/grub.cfg
. Добавляю строку insmod all_video
. Перезагружаюсь.
На этот раз всё нормально, Bedrock рисует загрузочное меню, и оно отображается на экране. Предлагает грузиться через systemd или через runit-init, который у меня, оказывается, тоже установлен. Я и не помню, что его сюда ставил. Правда, в runit-init грузиться смысла нет, половина программ в Арче просто не поймут отсутствие systemd.
Загружаюсь. Сети у приложений нет. Обнаруживаю, что у меня хаос в ip route
и в /etc/resolve.conf
. NetworkManager видит Wifi, но, видимо, какой-то подземный стук вмешался в работу. Вручную правлю маршруты и резолверы имён. Сеть появляется.
==> Вы находитесь здесь.
Теперь надо разобраться, что мешает автоматике настраивать сеть правильно. Пока на этом из приключений всё. И дальше можно ставить рядом приложения из Debian, Void, Alpine, да хоть Gentoo компилировать.
Stay tuned!