-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Simplify + Sustainability #334
Conversation
In order to make this a bit easier, I think some parts of this PR can be splitted to their own PRs, reducing the amount of changes introduced by this PR and hopefully making it easier to pinpoint the source of the problem. However, that would require rebasing this PR and conflicts are expected, but I can help with that. |
I'm in the process of cleaning up the commit history for this PR, and fixing little bits and pieces. I think I've split out everything from this PR that can be logically split out. We have as dependencies for this PR; |
Only large remaining error is fiwix -> linux not working. This is in the process of being fixed. |
5189a92
to
cdcc783
Compare
I'm fairly happy with this now. CI is obviously broken but I would still like to limit the scope of this PR. |
- This idea originates from very early in the project and was, at the time, a very easy way to categorise things. - Now, it doesn't really make much sense - it is fairly arbitary, often occuring when there is a change in kernel, but not from builder-hex0 to fiwix, and sysb is in reality completely unnecessary. - In short, the sys* stuff is a bit of a mess that makes the project more difficult to understand. - This puts everything down into one folder and has a manifest file that is used to generate the build scripts on the fly rather than using coded scripts. - This is created in the "seed" stage. stage0-posix -- (calls) --> seed -- (generates) --> main steps Alongside this change there are a variety of other smaller fixups to the general structure of the live-bootstrap rootfs. - Creating a rootfs has become much simpler and is defined as code in go.sh. The new structure, for an about-to-be booted system, is / -- /steps (direct copy of steps/) -- /distfiles (direct copy of distfiles/) -- all files from seed/* -- all files from seed/stage0-posix/* - There is no longer such a thing as /usr/include/musl, this didn't really make any sense, as musl is the final libc used. Rather, to separate musl and mes, we have /usr/include/mes, which is much easier to work with. - This also makes mes easier to blow away later. - A few things that weren't properly in packages have been changed; checksum-transcriber, simple-patch, kexec-fiwix have all been given fully qualified package names. - Highly breaking change, scripts now exist in their package directory but NOT WITH THE packagename.sh. Rather, they use pass1.sh, pass2.sh, etc. This avoids manual definition of passes. - Ditto with patches; default directory is patches, but then any patch series specific to a pass are named patches-passX.
Before they were just in / for no real reason
This is still fairly rough around the edges; but all of the core functionality I wanted has been implemented.
This does not create any meaningful change to the bootstrap path used. Rather this is a fairly significant refactor of live-bootstrap to make it easier to reason about, more sustainable to make changes to in the future, and fix a number of long-standing issues.
run.kaem
,run.sh
,run-after-fiwix.sh
,run2.sh
), which didn't actually convey any meaning. There were so many varied cases depending on chroot/kernel bootstrap/etc. I believe that this is the biggest barrier to understanding the project. Technical details;/init
's are generated files nowsteps/manifest
. The M2-Planet programseed/script-generator.c
transforms the manifest dynamically into a series of kaem/shell scripts that invoke one another. The syntax of the manifest is detailed in the manifest. All associated scripts required to get to the point where the manifest can be used (which is almost immediately after stage0-posix), live inseed/
./external
in the rootfs./external
is mounted from a disk, everything else comes from an initrd. Onceutil-linux
is built, everything transfers into that disk, moving off the initrd./steps/env
replaces.env
./steps/env
propagates throughout the entire filesystem./usr/lib/mes
and/usr/include/mes
, and no/usr/include/musl
.TODOS