[LEDE-DEV] Release Preparation Questions

David Lang david at lang.hm
Sun Nov 20 19:26:36 PST 2016


replying to details other than the feeds concept/

On Sun, 20 Nov 2016, James Feeney wrote:

> Ok - thanks for taking the time to explain this versioning process.  So now, I
> should take the time to "feed it back" and see if I understand.  Ha!
>
>> it does not require twenty different variables but it has to deal
>> with (currently) five independent repositories:
>> - feeds.conf.default: git://git.lede-project.org/feed/packages.git
>
> Hmm - try Google again:
>
> https://git.lede-project.org/

the git:// URL format isn't something you can put in a browser, it's the URL you 
can provide to git to most efficiently fetch (and otherwise interact) with the 
repository. Most repositories are also available via http:// and https:// at the 
same domain, but it's more efficient on both the server and client to use the 
git:// URL when cloning a repository.

> Ah ha.
>
> feed/packages.git	Mirror of packages feed		Git	119 min ago
> feed/routing.git	Mirror of routing feed		Git	2 weeks ago
> feed/telephony.git	Mirror of telephony feed	Git	4 months ago
> ...
> project/luci.git	Lua Configuration Interface...	Git	28 hours ago
>
> Ok.  I don't know what I'm seeing yet, but ok.

these are different repositories hosted at that URL

>> ... described in feeds.conf.default within the base repo.
>
> Hmm - still drawing a blank...

There is a file in the LEDE/OpenWRT repository that says what feeds it knows 
about

> Now, revisiting the concept of "version number":
>
> 1) "base" repository - https://git.lede-project.org/?p=source.git
> 2) "feeds" - described in feeds.conf.default within the base repo.
>   1 src-git packages https://git.lede-project.org/feed/packages.git
>   2 src-git luci https://git.lede-project.org/project/luci.git
>   3 src-git routing https://git.lede-project.org/feed/routing.git
>   4 src-git telephony https://git.lede-project.org/feed/telephony.git
> 3) release branch number - an input variable, major.minor version, usually
> year.month - or instead, the number of the build being produced from a branch.
> There were two different definitions offered.  I'm guessing that you meant the
> "build number" after the "major.minor" version number.

not quite

the branch would be Year.Month, tags/builds within that branch would be 
Year.Month.Build

so if a branch is made in November 2016, it would be the 16.11 branch, and 
everything along it would be 16.11.X

This way if there is a fix added in July 2017, it would still be 16.11.X with a 
higher X

This means that you can have a 16.11.x that's got some newer code in it thatn 
17.4.y, but there will be a lot of updates in any 17.5 that are not in anby 
16.11

> 4) git tags - exactly match the source state; "commit hash".

git tags are a human-readable shortcut to refer to a particular snapshot of a 
git repositry, but pointing at the unique hash that referrs to that state.

> 5) builds - the binary artifacts produced, branch release builds.
> 6) master - master branch of the "base" repository.
> 7) release branch - used for *all* builds within a major.minor version; "source
> branch".
> 8) subrelease - Any release within a base version; patch levels; security updates.
> 9) nickname - Symbolic name given to an entire release branch; all 16.11.*
> releases will carry the same nickname.

yes.

> Hmm - it is still not clear to me how the term "branch" will apply here,
> because: 1) the hierarchy of "base.feeds" is referencing four *other* git
> repositories, each of which has its *own* "head" branch name, each of which - I
> assume - may be changed or selected independently; and 2) the "feeds" link list
> does *not* have any version information within it, itself.

The branch is really based on the LEDE maintained git repository, ignoring the 
feeds that are not maintained by LEDE or OpenWRT.

There is an interesting question of how to refer to what state of each feed you 
use for a release. Currently OpenWRT doesn't even try to do this. The feed 
version you get is the feed version that exists at the time you last pulled from 
the feeds.

This hasn't been a big problem in practice, but it does mean that you don't 
really have a repeatable build. See my other e-mail about submodules for a 
discussion on this.

> It would be possible, I suppose, that each of these linked repositories could be
> *required* to use the *same* versioned naming scheme.

can't be done, these other repositories are not under our control. The most we 
can do is reference exactly which release we use..

>> If a builtin package or the kernel itself gain security fixes,
>> the images need to get rebuilt since people cannot update those
>> components with opkg.
>
> This is what is so unusual for me about LEDE/OpenWRT.  It is not a simple
> program package, where every component is versioned in lock-step.  But neither
> is it a traditional distribution, in which all of the components can be
> versioned and installed independently, especially as in a rolling distribution.
> And it is not a "glacial" distribution, like Debian, where the versioning
> measures time in years.  Perhaps it is more similar to Cyanogenmod, which has
> dated "nightly" and "snapshot" builds.  The term "release" is inappropriate in a
> fast moving environment like that.  The term "build" seems better suited.

actually, the LEDE/OpenWRT releases are long, they are trying to get them down 
to only a year or so.

What most people end up using is the roughly the equivalent of the nightly 
builds, but even more granular in that people grab the source code and compile 
it, so they get up-to-the-minute changes, not even nightly snapshots.

> Cyanogenmod uses the term "manifest" instead of "feed", and uses "repo", a
> specialized "repository management tool that we built on top of Git."  You are
> familiar?  In a sense, the top level of the build system is the "manifest" file
> "default.xml" with its own web page, https://github.com/CyanogenMod/android.
> Hmm - LEDE has a program "[source.git] / scripts / feeds", which serves the same
> function as "repo", yes?  Maybe I begin to understand.  And then, the term
> "feed" would actually mean one of several git source code repositories
> enumerated in the LEDE "manifest".  And "feeds" means a LEDE git repository
> management and build utility.

more or less. OpenWRT was stuck for a long time using subversion instead of git, 
so things developed differently, but you seem to be mapping the concepts more or 
less correctly.

> I think that, essentially, I must understand how a LEDE build version number can
> be related to an instantaneous version of four independent git repositories.

ignore the feeds for now, they are not part of the LEDE release.

> Would it be useful to version the manifest, and have the versioned manifest
> enumerate specific versions of the manifest components?  I assume that each
> component could specify an instantaneous snapshot version of each master branch
> of that component?  Perhaps git tags could be included inside the manifest, and
> no one would have to memorize or recognize or refer to these, because the
> manifest itself would have a human readable version number, as in
> "year-month-build".

that would be inventing another layer of abstraction, I don't think we need to 
do that. But this is the submodule discussion I raised in another branch of this 
thread.

>> Did you ever build the complete LEDE or OpenWrt from scratch?
>
> Ha!  NO! That's the issue for me.  The linux kernel - ok, I'm familiar with
> that.  LEDE/OpenWRT - I'm still trying to wrap my head around it!

The first thing to do is to ignore the feeds and all software involved in them..

> The terminology would make more sense to me if "base" referred to a "base
> package" which include the linux kernel and required utilities, unique to each
> hardware system,

it does.

> even though it were a "package" that could not be installed by
> opkg.  As I understand, the kernel and the root file system have to be installed
> together, as a matched set, though I cannot say why.

partly for historical reasons, partly because LEDE/OpenWRT are usually installed 
on systems that have very little storage, so you don't have a 'normal' 
filesystem that you can replace different parts of, you have a compressed 
filesystem where everything you are installing has to be combined into one blob 
and installed all at once.

Thus, while a normal linux distro creates a filesystem on the device, they loads 
the kernel and a bunch of other packages on there, and the build process creates 
a bunch of individual packages, the LEDE/OpenWRT build process takes a selection 
of the packages that are compiled and combines them into a compressed image 
(frequently even including the bootloader) that can be burned directly into the 
flash of the device.

>  The "version number" would
> imply the version of this LEDE "base package".  The LEDE "source" would refer to
> just the git repository "https://git.lede-project.org/", and the git directory
> "source.git" would instead be named "build.git". The file "feeds.conf.default"
> could be called "manifest.default", which would be a concept shared with
> Cyanogenmod.

I hate to disappoint you, but Cyanogenmod's terminology is pretty unique to it, 
it's not universal. It makes more sense to you because you ran across it first, 
but changing the terminology in LEDE would just add to the confusion of the 
exisiting LEDE/OpenWRT users and introduce incompatibilities with years of 
documentation and how-tos

The version does refer to the exact state of the LEDE maintained git repository 
(feeds are a different/complicating issue)

David Lang



More information about the Lede-dev mailing list