2020-05-19 18:20:18 +02:00
|
|
|
+++
|
|
|
|
title = "Self Hosting Fedora Base"
|
|
|
|
date = 2014-01-14T16:15:52+00:00
|
2023-10-26 11:53:38 +02:00
|
|
|
[taxonomies]
|
|
|
|
tags = ["fedora", "bootstrap", "buildroot"]
|
2020-05-19 18:20:18 +02:00
|
|
|
+++
|
|
|
|
If you want to bootstrap a distribution or want to rebuild it from the sources (SRPMS) to get the same
|
|
|
|
binaries (think CentOS), you have to build the build tools and rebuild them with the built build tools,
|
|
|
|
which have to be built with other build tools…
|
|
|
|
|
|
|
|
My goal for a self-hosting Fedora Base is to reduce the number of packages to do such a rebuild.
|
|
|
|
|
|
|
|
<!-- more -->
|
|
|
|
|
|
|
|
The first step is to get the packages to build the most important component for a linux distribution - the kernel.
|
|
|
|
|
|
|
|
To get those packages, Phil Knirsch wrote a small python script, which calls `repoquery`.
|
|
|
|
I extended this script to output graphviz .dot formatted files.
|
|
|
|
|
|
|
|
The first run gives us [1806 packages](https://harald.fedorapeople.org/kernel-br-all.txt), with which you could build
|
|
|
|
the tools to build the tools to […] build the kernel, if you manage to break the dependency cycle, etc.
|
|
|
|
|
|
|
|
If you want to display this beast with e.g. "sfdp" and "gvmap" from the graphviz suite, this will give you a monster graph.
|
|
|
|
|
|
|
|
[<img alt="Self-Hosting kernel build requirements" src="https://harald.fedorapeople.org/kernel-br-all.png" height="333" width="800" />](https://harald.fedorapeople.org/kernel-br-all.svg)
|
|
|
|
Self-Hosting kernel build requirements
|
|
|
|
|
|
|
|
This was generated with the [kernel-br-all.dot](https://harald.fedorapeople.org/kernel-br-all.dot) file and the command:
|
|
|
|
```console
|
|
|
|
$ START=7; cat kernel-br-all.dot | \
|
|
|
|
sfdp -Gstart=$START -Goverlap=prism | \
|
|
|
|
gvmap -e -d $START | \
|
|
|
|
neato -Gstart=$START -n2 -Ecolor=#44444455 -Tsvg \
|
|
|
|
> kernel-br-all.svg
|
|
|
|
```
|
|
|
|
|
|
|
|
My next step was to identify the source of weird build requirements like `qt`, `kdelibs` or `wayland`.
|
|
|
|
So I build a list of packages, which might be removed from the build requirements, because they only build documentation
|
|
|
|
or willingly add a build requirement to a graphical component like X, wayland or a GUI.
|
|
|
|
|
|
|
|
After filtering those with [the python script](https://harald.fedorapeople.org/buildreq.py), the resulting graph was
|
|
|
|
mainly dominated by perl packages, so I just merged them in one "perl" node. The graph from this is almost readable.
|
|
|
|
|
|
|
|
[<img alt="Reduced Self-Hosting kernel build requirements" src="https://harald.fedorapeople.org/kernel-br-reduced.png" height="525" width="800" />](https://harald.fedorapeople.org/kernel-br-reduced.svg)
|
|
|
|
Reduced Self-Hosting kernel build requirements
|
|
|
|
|
|
|
|
`graphviz` comes with `tred`, which reduces the graph, so that at least one path leads from X to Y.
|
|
|
|
With this reduction we get a nice graph generated from
|
|
|
|
[kernel-br-reduced.dot](https://harald.fedorapeople.org/kernel-br-reduced.dot) by:
|
|
|
|
|
|
|
|
```console
|
|
|
|
$ START=7; tred kernel-br-reduced.dot | \
|
|
|
|
sfdp -Gstart=$START -Goverlap=prism | \
|
|
|
|
gvmap -e -d $START | \
|
|
|
|
neato -Gstart=$START -n2 -Ecolor=#44444455 -Tsvg \
|
|
|
|
> kernel-br-reduced-tred.svg
|
|
|
|
```
|
|
|
|
|
|
|
|
Now, most of the build requirements are missing, but one path, so you can at least find **one** package,
|
|
|
|
which requires a specific package. All the red nodes in the graph are the build requirements, for which no
|
|
|
|
build requirements were added. So the strategy should be to get rid of those, or make sure they don't pull in the #
|
|
|
|
complete distribution. We might want to use the pre-built documentation shipped with the package or have a separate
|
|
|
|
documentation build phase with the same source. For other packages, we might have to split out the GUI components.
|
|
|
|
If you have other ideas, I am happy to get to know them.
|
|
|
|
|
|
|
|
**Conclusion: 188 packages plus all the perl packages could form a basic buildroot to build itsself.
|
|
|
|
To achieve this, we have to take care of those 56 red packages, that these are not used.**
|
|
|
|
|
|
|
|
The list of the 65 spec files with the build requirements to ifdef can be found here:
|
|
|
|
[http://harald.fedorapeople.org/bootstrap-not-needed-deps.txt](https://harald.fedorapeople.org/bootstrap-not-needed-deps.txt)
|
|
|
|
|
|
|
|
[<img alt="" src="https://harald.fedorapeople.org/kernel-br-reduced-tred.svg" width="800" />](https://harald.fedorapeople.org/kernel-br-reduced-tred.svg)
|
|
|
|
Reduced Build Requirements for the package kernel
|