New LiveCD ISO

Within the next hour or so, I’ll be uploading a new livecd to the downloads section of the site. It is a rather clean and faithful production of an LFS system, with overlayfs added as a dracut module so that the livecd can actually be used as a system with a writable root filesystem.

Changes won’t be persistent, but, this is a much better proof of work than what was up before it.

At this point I do encourage people to try it by downloading it and firing it up in an emulator and provide feedback. I’d be thrilled to hear someone got it running on a physical machine.

While cool in and of itself, this paves the way for transitioning the image to an installer ISO, where Pyrois copies the sysroot to a subdirectory in itself to put on to a target machine to boot from local disk after some basic configuration prompts.

ISO Image file size is still an issue at 8GB. I’ll have to depart from LFS to fix that. So, this might be the “goodbye LFS” post I’ve been building up to. Not sure yet.

Progress Update

I am excited to announce a milestone in the Dark Horse Linux project.

The code in the repo has finished creating the initial target system, including the kernel compilation using the default Fedora Linux kernel config.

There is an exception, the fstab file, which has a chicken-egg problem to resolve but I consider this to be minor and can be resolved during the ISO file generation, which is the next piece.

I should be able to use grub-mkrescue or genisoimage/xorriso or some combination of these with a thought out init ram disk to complete that part.

Once complete, I’ll start polishing the codebase for Pyrois up, branding a fork of it for ALFS-NG, and tag and release that for now.

For the long term, the `ALFS-NG` spinoff is just a side project that got spawned by this effort. I haven’t decided if this is something I want to give to the LFS folks to revive/modernize their seemingly abandoned ALFS project, or if it should remain wholly separate due to the Darcy infection. I have a desire to “play well with others”, but, that can’t occur in a vacuum, and I need to be certain it stays shielded from Canonical based on previous behaviours.

On the other hand, it’s likely to go very stale if I keep it under my thumb as it’s not a priority for me to keep it up to date more than to facilitate it as an instructional device. I suppose that begs the consideration that they’ve already abandoned that project once, so, it may not be a priority for them either. They likely wouldn’t want it.

I will then want to decide whether I want to introduce librpm for the next phase, or whether I want to create an installer disk, presumably with something like `anaconda`, though, I am hesitant about introducing an upstream dependency on the RH ecosystem based on the goals of the DHLP project.

I will want this system to be very familiar to RH-based distro users for many reasons, but, all cooperation with external projects must be a voluntary effort that can be easily severed for this mission to work. This is, after all, a contagion firewall. I’m already going the librpm route, which is maintained by RH, but, many distros use librpm. Not many use anaconda, so, their maneuvreability is different with that piece. Not that I think anything would happen there, but, it’s a risk surface that needs gaurded.

I suppose I’ve answered my own question thinking it out — anaconda is a package-based distro installer, so, if I’m going the librpm route I need to do that first before anaconda.

I suppose one approach might be to build my own basic installer that is a modification of the sysroot I’ve created that just copies the unmodified sysroot to a target system after the user selects and mounts all their target mounts. That’s a thought. Copy it off, when it’s done in the build, then engage in a 6th stage that turns one of the copies into an installer that puts the intact copy onto the target system.

I may do that first to move forward on a known working path, and then do my reductionist cross-reference with other similar projects to synthesize a new process. It’s a bit of a longer path but it’s one that can provide consistent progress.

Of course, things are always subject to pivot based on what I learn as I go through this. I have no experience with this aspect of things, so, I’m certainly open to ideas.

Entering Chapter 9

Automation of the 11.3-systemd rc1 has been successful on a Fedora build system up to Chapter 9.

At this point what’s left is:

  • populate some of the system config files (/etc/*)
  • set up udev
  • set up the timezone
  • some minor systemd disablement
  • set the system locale
  • compile the kernel
  • set up kernel module load orders
  • configure grub to be on an iso and install the bootloader to that iso (this will require deviation from the LFS book)

The fun part is that I’m not going to be using stock values for these. It’ll give you curses dialogs asking for input on alot of the stuff you’d normally configure on your OS, though, I may be reserving alot of that implementation for an “installer ISO” so that the values aren’t baked into the ISO in future versions.

After that, it’s an RPM variant.

After that it’s a reductionist rewrite cross-referenced with other unrelated projects to create a more minimal system without sacrificing on the core components.

All in all, looking back through the work, this process would have only taken a couple days, maybe a few hours for someone who’s done it before, but, automating it — I think that’s where this project’s value is.

I would like to see someone fork it, containerize the process, and then use pull requests with automated unit tests to accelerate OS development.

In the meantime once this ALFS-NG baby project is wrapped up, I’ll rebrand it as that, and then use the Dark Horse Linux label to build out the real deal.

Project Direction Changes

After some review of the dual licensing of LFS, it’s occured to me I need more segmentation in my planning for how to get to a new distro that I can offer commercial support for and distribute for commercial use.

That’s not the core reason for doing this, but, I’d like to be compensated eventually for all the hard work, and perhaps hire people and build a company around it.

I think in order to get there, I’ll need to make some pivots on approach on this.

To get around the non-commercial shit in LFS’ licensing, I’ll probably, once I get to a releasable state, release this build as a project called “ALFS- NG” that inherits the crap they snuck in there and have DHLP be a non-derivative rewrite.

I’m still thinking about it, but, if that’s the direction, once ALFS-NG is good to a certain point, I’ll be able to apply what I’ve learned to Dark Horse Linux. I feel as I’m going through this process that LFS has many, many unnecessary steps to do something like this.

I may even do a second build with one of the RPM variants of LFS/BLFS to get an idea of what I’m in for in terms of introducing binary package management cleanly.

Progress Report

I’m at about Chapter 8, section 26 of the LFS build.

At this point there’s a sysroot, you can enter the chroot with `make enter_chroot`, and browse around after getting through a `make all`.

You’ll probably see in the git commit logs for Pyrois that I’m adding units to “master.plan” and testing there, before moving them to “stage4.plan” after they’re worked out.

That’s by design. I use “make backup” and “make restore” all through the process as this allows me to work out kinks in the scripts before vetting them and moving them over to their “forever homes”.

So what’s this project all about?

It’s occured to me that even someone technical may see all the movement here and just not really understand what this project is, so, I thought I’d write a brief to catch folks up to speed.

So, what’s the Dark Horse Linux Project?

The Dark Horse Linux Project (DHLP) is a new Linux Distribution.

You’ve likely heard of Linux, already. What you may not know is that the term “Linux” actually includes many different kinds of operation systems.

If you’re not sure what an Operating System is, you may have heard of Microsoft Windows. You get a little compact disc and install it on the machine, and it gives you things to click on and do your work, and, for the more nerdly, to write your own software or host your own services.

In the Linux space, the term “Linux” is really just referring to the kernel itself and in some crowds includes the gnu toolchain as well. What you might not know is that there are many providers of unique operating sytems that fall under the category of “Linux”. Each of those providers gives you a different variation of what Linux is and comes with different pieces that make up the operating system. Here are some famous examples:

  • Fedora Linux
  • RedHat Linux
  • Ubuntu
  • Debian
  • Slackware
  • CentOS
  • Mint
  • Arch Linux

You’ve likely already heard of these, and there are lots to choose from, each with unique properties. RedHat Linux and Ubuntu, for example, have attributes that make them prime selection candidates for an enterprise computing environment (think of servers, cloud, etc).

Indeed, the various communities surrounding Linux are myriad, and this diversity is critical to the continued existence of the Free and Open Source Systems movement.

However, there are some complex problems, and always have been in those communities. Some can’t be addressed simply by the introduction of a new contender, but some issues can.

Diversity in the Linux Ecosystem

If those communities were to homogenize it would become vulnerable to interference from entities that sell proprietary systems — all of which stand to gain a great deal financially from the elimination or control of a sizable portion of Linux communities and their internal development pipelines. The best thing that can happen for those cooperative adversaries is the unification of all Linux distribution communities into 3-5 distributions, as this would allow them to steer those projects into directions that are financially beneficial for those companies, but, not so great for us.

Check out the latest upcoming Linux distributions for this year. If you go through the list, you’ll see an exemplification of one of the issues this project exists to address. Every single one of these new Linux distributions is, in fact, not a new Linux distribution at all. They are rebranded releases of already existing Linux distributions.

In fact, if you look closer at the “famous” list I provided earlier, you’ll notice a few oddities that parallel this: CentOS is a rebranded RedHat. Ubuntu is a rebranded Debian. Mint is a rebranded Ubuntu (twice over on that one!).

In the list I linked to for this year’s new contenders, you’ll see that about half of them are based on Arch Linux, while the rest are based on others on the list I typed out above.

Almost all “truly new” or “parent leaf” distributions die out pretty soon after release.

Of those that don’t, there are serious issues that serve as barriers to widespread adoption, such as a non-standard libc variant, or using busybox as the userland toolchain, or missing multilib support, preventing a desktop market, etc. They have serious missing pieces that Linux communities expect to see.

That is a large part of why this project exists.

Most Established Distro Communities are Toxic

The other part of it is that, as someone who’s been participating in the Linux community since the mid-90s, I’ve found that the non-commercial communities have categorically toxic cultures. I had been involved in and even led numerous campaigns to try to address that over the years, and was seeing some progress, but I found that after all that work, one kind of toxicity was simply being exchanged for another. I wanted to create something better. So I decided to.

While researching this issue quite a few years ago, I came across a project called “Linux From Scratch”. This is such an impressive project! They tediously list out, step by step, a process to create a bespoke installation to their own specifications of a new Linux system. It’s not quite a distribution, as there is no downloadable OS, but a set of instructions that can easily serve a large part in the genesis of a fully equipped new parent leaf Linux distribution with all of the pieces those users look for.

When I said that the process is tedious, I mean that in every sense of the word. It’s alot of work and takes a lot of skill to do it by hand. So, I got to thinking:

What if I unitized all the steps that create a new distribution into separate automations represented in an object notation that allowed me to automate the entire process with selectable components?

The thinking behind this is that this would allow more people to have access to the tools they need to create fully capable Linux distributions, and that if this took on momentum it could help to facilitate the diversity of the Linux ecosystem, either directly, or by inspiring a competitor project who can do it better.

There was the ALFS project (Automated Linux From Scratch) but it had gone stale and didn’t, in my impression, fully unitize the steps — though it did automate them. Even if it had, it did not appear to be terribly receptive to customization, and the project appeared to be abandoned. I believe it still is.

So, I probed around for a few years, knowing I was about to start building a new Linux distribution.

Initially I was going to call it SURRO Linux, as I was trying to figure out how to create a new “parent leaf” linux distribution anyway, and, there was initially some interest. I created an IRC channel for the project, and a couple of the LFS crew even helped out. Until…I joined their channel to ask some questions about making some changes to the compile options.

It turned out, someone from the Ubuntu Linux community had figured out a way to gain rank in the LFS project and my access to LFS resources was immediately terminated by that person when I explained the scale of what I was attempting to do, despite being a year into the process already with another LFS developer.

As a result of Matt’s deliberate efforts to starve the project of critical resources, though, it inspired me to create an entirely new thing: A distro that helps other distros be created, as an example of how this should work — both technically and at a human level.

So I guess you could say, in a way, Matt played an important role in the creation of SURRO Linux by demonstrating that the problems I was concerned about on many levels were not just further along than I believed, but closing the gaps on one of the last bastion projects in the F/OSS world that gauranteed the perpetuity of the Linux operating system by facilitating diversity– by infecting the LFS project with his presence and compromising the decision authority in it in order to prevent the genesis of a product intended to compete with Canonical’s (Ubuntu).

I recall being profoundly disappointed at this turn of events, as, I had been learning so much from the LFS project’s other members, quite quickly, and am immensely grateful of the feedback they were providing in the early stages before that. I will always be appreciative of that learning period.

Galvanized in determination, over the years since, and in between other projects, I picked at SURRO Linux, the hard way, and had to develop some custom tools to implement what I could extract from the LFS documentation.

You may have seen some mentions of these. Rex. Examplar.

Examplar is the original name of the tool. It was recently rebranded as Rex. Rex is an automation tool that reads a libary of json objects, each representing the necessary parts of a largely idempotent automation. It then reads another json file whose contents represent steps in a plan to carry out, which reference the automations in the library. This method allows me to do large chains of automations with each step in a fully controlled context, including environment, whether a pty is used, what user the automation runs as, as it captures STDOUT and STDERR of the automation to log files for review to ensure the build is clean without having to stop.

After some time, I ran into a technical barrier with Rex that prevented the continuation of the development of SURRO Linux until it was unkinked. I worked on other projects and campaigns for a while to get my head fresh on it.

Once that issue was finally solved, enough time had passed to where I needed to refresh the codebase used as the solution involved a full rewrite of Rex.

So, I renamed it to Dark Horse Linux and started over. With the new tools in place I was able to do what had previously taken 2 years to develop in just a few days, and now there seems to be some momentum behind it.

I’m hoping to have it generate a bootable image by July of this year finally, though, it won’t really be the release of Dark Horse Linux, so much as a snapshot of a working system for others to borrow from before I move on to building out an installer image. That’ll just be when the real work starts to build out the installer and package management infrastructure. Honestly, with my workload at my dayjobs, I think July is an ambitious target. Walking through LFS is only of moderate difficulty, automating the steps and extracting enough to create a new Distribution is another matter entirely. This is all just one person currently.

You’ve probably seen some mention of a repo called “Pyrois”. Pyrois is a Rex project that will compile the install images related to Dark Horse Linux and is where the majority of the work takes place.

I’m always receptive to people participating, and if you’d like to participate, feel free to email me at “““`dhlp@silogroup.org

Along the way, many things happened since I initially announced SURRO Linux was going to be a thing. My Dad died early on. I ran into access issues researching what I was trying to do. I have other projects. I have a whole other career besides this and the project is self-funded currently. I was involved into two activist campaigns in the open source community (RMS, Freenode). My personal blog has more details about those, though, I just wanted to make it clear that this is a slowly moving project for now — though I do have high hopes for it.