__          __             __
\ \_________\ \____________\ \___
 \  _ \  _\ _  \  _\ __ \ __\   /
  \___/\__/\__/ \_\ \___/\__/\_\_\

Bedrock Linux 0.7 Poki

Bedrock Linux 0.7 Poki Beta Test

In depth documentation is unlikely to be available during Poki's pre-release testing. However, one of the release's goals is a much improved user experience such that documentation should be much less necessary than it was in past releases. If it met this goal, the currently limited documentation should not be a major hindrance.

Installation instructions

This is intended for pre-release testing and is not suitable for production systems. There is a substantial amount of new code with limited testing. There are likely many still undiscovered bugs. Only install on test machines for the time being.

See known issue list before installing. Hijacking some distros may be known to be broken at this point in time.

Poki is currently targeting x86_64. Additional architectures may be added later.

Install a traditional x86_64 Linux distribution such as Arch, Debian, Fedora, or Gentoo. Select a filesystem which supports extended filesystem attributes (most common ones do). Set it up as you would normally, including setting up various users and networking.

Download a pre-built binary of the latest Poki installation script from here or build your own from here.

Run the script as root with the --hijack flag:

sh bedrock-linux-release-x86_64.sh --hijack

Reboot.

You should see a new init selection menu during the boot process. Initially this will only have one option. Select it or wait for the timeout. brl fetch'ing new strata will add more items later.

Once you have logged in, explore the brl command and the /bedrock/etc/bedrock.conf configuration file.

Basic usage

A Bedrock Linux system is composed of "strata". These are collections of interrelated files. These are often, but not always, one-to-one with other, traditional Linux distributions. Bedrock integrates these strata together, creating a single, largely cohesive system with desirable features from other distributions.

To list the currently installed (and enabled) strata, run:

$ brl list

To list distros which can be easily acquired as strata, run:

$ brl fetch --list

To acquire new strata, run (as root):

# brl fetch <distros>

Once that has completed, you may run commands from the new strata. For example, the following series of commands make sense on a Bedrock system:

$ sudo brl fetch arch debian
$ sudo pacman -S mupdf && sudo apt install texlive
$ man pdflatex
$ pdflatex preexisting-file.tex && mupdf preexisting-file.pdf

Bedrock's integration is not limited to the command line. For example, graphical application menus or launchers will automatically pick up applications across strata, and Xorg fonts installed from one stratum will be picked up in an X11 graphical application from another stratum.

If there are multiple instances of an executable, Bedrock will select one by default in a given context. If there are hints it can pick up on for which one to use, it is normally correct. brl which can be used to query which Bedrock will select in a given context. For example:

$ # arch, debian, and centos are installed.
$ # running debian's init, and thus must use debian's reboot
$ sudo brl which -b reboot
debian
$ # only arch provides pacman, so arch's pacman will be used
$ brl which -b pacman
arch
$ # yum is a python script.  Since yum comes from centos, the python
$ # interpreter used to run yum will also come from centos.
$ sudo yum update
^Z
$ brl which $(pidof python | cut -d' ' -f1)
centos

If you would like a specific instance, you may select it with strat:

$ # arch, debian, and ubuntu are installed
$ # install vlc from arch
$ sudo pacman -S vlc
$ # install vlc from debian
$ sudo strat debian apt install vlc
$ # install vlc from ubuntu
$ sudo strat ubuntu apt install vlc
$ # run default vlc
$ vlc /path/to/video
$ # run arch's vlc
$ strat arch vlc /path/to/movie
$ # run debian's vlc
$ strat debian vlc /path/to/video
$ # run ubuntu's vlc
$ strat ubuntu vlc /path/to/video

To avoid conflicts, processes from one stratum may see its own stratum's instance of a given file. For example, Debian's apt and Ubuntu's apt must both see their own instance of /etc/apt/sources.list. Other files must be shared across strata to ensure they work together, and thus all strata see the same file. For example, /home. Such shared files are referee to as "global". Which stratum provides a file in a given context can be queried by brl which:

$ # which stratum is my shell from?
$ brl which --pid $$
gentoo
$ # that query is common enough the PID may be dropped
$ brl which
gentoo
$ # which stratum provides ~/.vimrc
$ brl which --filepath ~/.vimrc
global
$ # global indicates all stratum seem the same file; not specific to any
$ # stratum.
$ brl which --filepath /bin/bash
gentoo
$ brl which --bin pacman
arch

If you would like to specify which non-global file to read or write, prefix /bedrock/strata/<stratum>/ to its path.

$ brl which --filepath /bedrock/strata/debian/etc/apt/sources.list
debian
$ brl which --filepath /bedrock/strata/ubuntu/etc/apt/sources.list
ubuntu
$ # edit debian's sources.list with ubuntu's vi
$ strat ubuntu vi /bedrock/strata/debian/etc/apt/sources.list

brl provides much, much more functionality. See brl --help.

Things to test

Known issues

Here is a list of known issues and other to-do items. Given the current beta testing phase, there are likely more issues to be discovered.