174 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. _repository-layout:
 | |
| 
 | |
| =================
 | |
| Repository Layout
 | |
| =================
 | |
| 
 | |
| The repository is based on the upstream Linux kernel tree. All branches
 | |
| except master, though, are downstream-only.
 | |
| 
 | |
| Branches
 | |
| --------
 | |
| 
 | |
| os-build, a.k.a "the development branch"
 | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| Frequency: Merges 'master' branch daily
 | |
| 
 | |
| The os-build branch is the development branch of the tree.  The os-build branch
 | |
| tracks the latest version of the kernel patches for RHEL and Fedora, as well as
 | |
| the kernel configuration and build scripts.  This is the branch to send
 | |
| merge request to.  When a new release is made, this branch is merged into the
 | |
| release branch.  Configuration and build scripts can be found in the
 | |
| ``redhat/`` directory. Refer to the `Configuration`_ section below for more
 | |
| details.
 | |
| 
 | |
| If this branch does not compile or boot, then please see `ark-latest`_ branch
 | |
| below.
 | |
| 
 | |
| master
 | |
| ~~~~~~
 | |
| 
 | |
| Frequency: Mirrors Linus's tree
 | |
| 
 | |
| The master branch tracks `Linus's master
 | |
| branch <git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git>`__
 | |
| (i.e. "mainline").
 | |
| 
 | |
| .. _ark-latest:
 | |
| 
 | |
| ark-latest
 | |
| ~~~~~~~~~~
 | |
| 
 | |
| Frequency: Reset daily after os-build branch merges 'master'
 | |
| 
 | |
| This branch points to the latest release branch.  This branch may differ
 | |
| slightly from os-build and contain critical patches that resolve compile or
 | |
| boot issues.  **This is not a development branch, do not base merge requests
 | |
| off this branch.**
 | |
| 
 | |
| Release branches
 | |
| ~~~~~~~~~~~~~~~~
 | |
| 
 | |
| Each time the kernel is rebased, a set of branches is created to track
 | |
| that release.
 | |
| 
 | |
| .. _arkpatchesvxy-rcn:
 | |
| 
 | |
| ark/patches/vX.Y[-rcN]
 | |
| ^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Branches in this format (e.g. ``ark/patches/v5.4-rc1`` or
 | |
| ``ark/patches/v5.3``) contain the kernel patches ARK carries for that
 | |
| particular kernel release. These are merged into the ``ark/vX.Y``
 | |
| release branches.
 | |
| 
 | |
| .. _arkvxy-rcn:
 | |
| 
 | |
| ark/vX.Y[-rcN]
 | |
| ^^^^^^^^^^^^^^
 | |
| 
 | |
| Branches in this format (e.g. ``ark/v5.4-rc1`` or ``ark/v5.3``) contain
 | |
| the set of patches that were added on top of the upstream kernel release
 | |
| along with the configuration and build scripts. They can be checked out
 | |
| and built into RPMs. The ``master`` branch points to the latest version
 | |
| of these branches.
 | |
| 
 | |
| Tags
 | |
| ----
 | |
| 
 | |
| .. _vxy-rcn:
 | |
| 
 | |
| vX.Y[-rcN]
 | |
| ~~~~~~~~~~
 | |
| 
 | |
| Tags in this format (e.g. ``v5.4-rc1`` or ``v5.3``) are the upstream
 | |
| Linux kernel tags from Linus's tree.
 | |
| 
 | |
| .. _kernel-xyz-ndist-and-kernel-xyz-0rcnyyyymmddgitshort-hashdist:
 | |
| 
 | |
| kernel-X.Y.Z-N.<dist> and kernel-X.Y.Z-0.rcN.YYYYMMDDgit<short-hash>.<dist>
 | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| Tags in this format (e.g. ``kernel-5.4.0-1.elrdy``,
 | |
| ``kernel-5.6.0-1.fc33``, or
 | |
| ``kernel-5.6.0-0.rc5.20200314gitabcd1234.fc33``) map to the RPM
 | |
| name-version-release tuple in the build system. These can be used to
 | |
| check out the source tree used to build that RPM. Tags with the
 | |
| ``elrdy`` dist are Always Ready kernel releases and tags with the
 | |
| ``fcNN`` dist are Fedora kernels.
 | |
| 
 | |
| The tags come in two varieties. The first is kernel builds based off an
 | |
| upstream tag. ``kernel-5.4.0-1.elrdy`` and ``kernel-5.6.0-0.rc6.fc33``
 | |
| fall into this category. The second variety, which includes a date and
 | |
| commit hash, is based off a snapshot of Linus's master branch for that
 | |
| particular day. The git commit hash included in the release is the
 | |
| commit in Linus's tree the build is based on, *not* the commit in the
 | |
| Fedora source tree.
 | |
| 
 | |
| Fedora RPM tagging in the ARK kernel began in May 2020 for fc33.  Previous
 | |
| RPM tags are not available in the ARK kernel tree.
 | |
| 
 | |
| .. _Configuration:
 | |
| 
 | |
| Configuration
 | |
| -------------
 | |
| 
 | |
| The configuration layout is somewhat complicated. All configuration is
 | |
| located on the ``os-build`` branch in ``redhat/configs/``. Inside this
 | |
| directory there are a number of scripts used to automatically generate
 | |
| complete configurations, along with a number of directories that contain
 | |
| configuration snippets. At this time, there are three main configuration
 | |
| directories: ``rhel``, ``common``, and ``fedora``. ``rhel`` and ``fedora``
 | |
| are configuration "flavors", while ``common`` is shared configuration
 | |
| across flavors.
 | |
| 
 | |
| A flavor is defined by:
 | |
| 
 | |
| 1. Adding the flavor name to ``redhat/configs/flavors`` on its own line.
 | |
| 2. Create a directory using your flavor name in ``redhat/configs/`` that
 | |
|    matches the layout of other flavors.
 | |
| 3. Defining a configuration priority by creating a file called
 | |
|    ``redhat/configs/priority.$flavorname``. This file needs to define a
 | |
|    number of bash variables that describe the priority of the various
 | |
|    configuration directories and should include the directory you
 | |
|    defined in step 2.
 | |
| 
 | |
| common and pending-rhel
 | |
| ~~~~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| The ``common`` directory contains configuration values that are shared
 | |
| across all configuration "flavors". For a configuration to be in
 | |
| ``common``, it MUST be reviewed and approved by one or more Red Hat
 | |
| subsystem maintainers since it affects RHEL. A flavor's configurations
 | |
| can override settings in ``common``, so it's not guaranteed settings in
 | |
| common are the same across all flavors. It's simply a good place to set
 | |
| common values across the flavors and use as a base for new flavors.
 | |
| 
 | |
| ``pending-rhel`` is where configuration options that have not been
 | |
| reviewed are placed. Automation creates snippets for all new
 | |
| configuration options exposed during a rebase of ARK in the
 | |
| ``pending-rhel`` directory, at which point subsystem maintainers
 | |
| review the options and set them as appropriate before moving them into
 | |
| ``common``.
 | |
| 
 | |
| New RHEL configurations are placed in ``pending-rhel`` because it is
 | |
| assumed that RHEL generally has the most conservative settings, whereas
 | |
| other flavors like Fedora will be (for the most part) a superset of the
 | |
| RHEL configuration.
 | |
| 
 | |
| fedora and pending-fedora
 | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| The ``fedora`` directory contains settings that have been reviewed by
 | |
| Fedora kernel maintainers for the Fedora Rawhide kernel.
 | |
| 
 | |
| Since Fedora tends to turn on more things than RHEL, it's common for a
 | |
| rebase to expose new configuration options that only apply to Fedora.
 | |
| For this reason, Fedora has a ``pending-fedora`` directory as well.
 | |
| ``pending-fedora`` contains settings that are not exposed by the
 | |
| ``common`` configuration set and only apply to Fedora. It is, like
 | |
| ``pending-rhel``, populated automatically during a rebase. A Fedora
 | |
| kernel maintain can review the settings at their leisure and move them
 | |
| over to ``fedora`` as they do so.
 |