Difference between revisions of "Packaging"

From GalliumOS Wiki
Jump to: navigation, search
(Package Version Corrections!)
(All Packages)
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Current State of Packaging ==
 
 
 
For documentation and discussion. Design is still in flux.
 
For documentation and discussion. Design is still in flux.
  
=== Repositories and Distributions ===
+
== Repositories and Distributions ==
  
 
We have one apt repository at https://apt.galliumos.org/ which serves three "distributions" (confusing name, but there it is).
 
We have one apt repository at https://apt.galliumos.org/ which serves three "distributions" (confusing name, but there it is).
  
We have a second apt repository at https://apt-dev.galliumos.org/ which will be retired.
+
The current distributions are:
 +
 
 +
* '''<code>vivid-galliumos</code>''' ("release" or "stable")
 +
** contains fully released, production packages, and is the (only) default repodist for all users, installed by <code>galliumos-base</code>
 +
** priority pinned at 9999
 +
*** trumps Canonical's <code>vivid</code> repodist for all package versions
 +
*** trumps GalliumOS's <code>vivid-galliumos-prerelease</code> repodist only with newer versions
 +
* '''<code>vivid-galliumos-prerelease</code>''' ("prerelease", "staging", or "unstable")
 +
** contains prerelease packages (expected to be stable and ready for general use)
 +
** priority pinned at 9999
 +
*** trumps Canonical's <code>vivid</code> repodist for all package versions
 +
*** trumps GalliumOS's <code>vivid-galliumos</code> repodist only with newer versions
 +
* '''<code>vivid-galliumos-testing</code>''' ("testing", "experimental", "current", or "development")
 +
** contains testing packages (very possibly broken, '''not''' ready for general use)
 +
** priority pinned at 10090
 +
*** trumps all other repodists (Canonical and GalliumOS) for all package versions
 +
 
 +
=== To enable or disable repodists ===
  
The current distributions are:
+
The <code>galliumos-repodist</code> script is included in the <code>galliumos-base</code> package.
 +
 
 +
Usage is straightforward:
 +
 
 +
<div style="margin-left:2em;">
 +
* <code>galliumos-repodist --enable prerelease</code>
 +
* <code>galliumos-repodist --disable prerelease</code>
 +
* <code>galliumos-repodist --status</code>
 +
</div>
 +
 
 +
See <code>galliumos-repodist --help</code> for more.
 +
 
 +
 
 +
== Development and Packaging Workflow (proposed) ==
 +
 
 +
Debian/Ubuntu has a fairly complex system for creating `deb` packages for use in `apt` repositories and distributions. There are many approaches and sets of tools to choose from.
 +
 
 +
=== Development ===
 +
 
 +
All packages distributed by GalliumOS are maintained at https://github.org/GalliumOS.
 +
 
 +
==== GalliumOS Origin Packages ====
 +
 
 +
Code for GalliumOS origin packages (e.g. <code>galliumos-base</code>) is committed to the git repo as a regular project tree
 +
 
 +
* We include a <code>debian</code> directory and associated config files for packaging
 +
 
 +
==== Upstream Origin Packages ====
 +
 
 +
Code for upstream origin packages is committed as an expanded copy of the upstream archive
 +
 
 +
*  If upstream is Ubuntu or Debian or Debian-via-Ubuntu
 +
**  The tree will already include a <code>debian</code> directory tree
 +
**  A <code>debian/galliumos/upstream</code> file is added containing the full URL of the upstream <code>dsc</code> file
 +
*  If upstream is another source
 +
**  We will create a <code>debian</code> directory tree
 +
*  GalliumOS patches to the upstream tree go into <code>debian/patches</code>
 +
*  When we move to a new upstream version
 +
**  Upstream changes are applied directly onto the existing tree
 +
**  Our patches are updated if necessary to apply against the updated tree
 +
**  <code>debian/galliumos/upstream</code> is updated with the new URL of the upstream <code>dsc</code> file
  
; vivid-galliumos
+
==== All Packages ====
: STABLE / RELEASE (default)
 
: priority pinned at 9999, will trump Canonical's <code>vivid</code> repo for all package versions
 
; vivid-galliumos-prerelease
 
: prerelease / staging / unstable
 
: priority pinned at 10050, will also trump our <code>vivid-galliumos</code> repo for all package versions
 
; vivid-galliumos-testing
 
: testing / experimental / current / development / etc
 
: priority pinned at 10090, will also trump our <code>vivid-galliumos-prerelease</code> repo for all package versions
 
  
General users will only have our <code>vivid-galliumos</code> distribution enabled (and Canonical's <code>vivid</code> distribution, of course).
+
Development changes should be performed on git branches, to allow multiple or parallel development efforts
  
=== Packages ===
+
However, changes will not be included in nightly package updates unless they:
  
Our package version naming convention descends from upstream Ubuntu packages, where applicable.
+
*  Are merged back to master
 +
*  Add a new entry to <code>debian/changelog</code> with an updated version string
 +
**  If changes are not final and release-ready, update version <code>3.2.1-4galliumos1</code> to, e.g.: <code>3.2.1-4galliumos1+dev1</code>
  
e.g. for <code>packagename (1.2.3-0ubuntu1)</code>, our patches should be packaged as <code>packagename (1.2.3-0ubuntu1-galliumos1)</code>. Some upstream packages will not have an <code>-ubuntuX</code> suffix, which means that they are unchanged from the Debian up-upstream. We still need to add our <code>-galliumosX</code> suffix.
+
Additionally, we should always:
  
==== Package Version Discrepancies! ====
+
*  Update the distribution name in <code>debian/changelog</code> to <code>vivid-galliumos</code>
  
We have some existing packages which do not follow this naming convention, and are versioned '''ahead''' of their upstreams (e.g. <code>1.2.3</code> in upstream to our <code>1.2.4</code>). This causes a few issues:
+
=== Packaging (nightly builds) ===
  
# It's confusing for us and gives users the impression that our code is a release ahead of the upstream.
+
Packages are built nightly by an automated process:
# When the upstream releases a <code>1.2.4</code>, it will have different code than our <code>1.2.4</code>.
 
# <code>debootstrap</code> builds will fail to update to our pkgs when version numbers collide.
 
  
==== Package Version Corrections! ====
+
#  Code for each repo is pulled from the GitHub master branch
 +
#  Packages (both binary and source) are built
 +
#*  WIP: Some source packages are presently skipped
 +
#** Some because they require a copy of the upstream source package tar file
 +
#** Some others because the manually-presented upstream is inconsistent with our current tree, which will require manual adjustment to our repo to fix
 +
#  Packages are signed with the <code>contact@galliumos.org</code> signing key
 +
#  Signed packages are pushed to <code>apt.galliumos.org</code>
 +
#  Signed packages are imported in to distribution <code>vivid-galliumos-testing</code>
  
There are a few ways we might fix this issue:
+
=== Packaging (release builds) ===
  
# '''Make a hard break sometime between current (BETA1) and 1.0''' (simple, guaranteed to work)
+
When preparing packages for a formal GalliumOS release, the master branch of each active GitHub repository is tagged with the release label (e.g. <code>1.0beta2</code>, <code>1.0</code>, etc)
#* Update packages with corrected version numbers, existing systems will not update to new packages.
 
#* All users have to reinstall to move forward. :(
 
# '''Add a new "pkgversionfix" repodist, via inclusion in a required package''' (more complex, needs testing)
 
#* This could be done to require no user intervention (aside from the standard `apt-get` process)
 
#* Populate new repodist with corrected packages, populate primary (stable) repodist with corrected packages+1. Force a "downgrade" via "pkgversionfix" repodist to the corrected packages, then disable the new repodist.
 
#* '''UPDATE''' I don't think this will work in an automated fashion (was hoping to use a postinstall script), but since the apt database is locked it will probably fail
 
# '''Create a manual update script''' (simpler, less surprising)
 
#* Similar to option 2, but requires user intervention (e.g. running a <code>galliumos-upgrade</code> script).
 
#* '''UPDATE''' I think this is the best plan as long as we can accept the manual step. I don't think we need the special new repodist to handle the "downgrades".
 
# '''Hardwire version dependencies in existing galliumos-star packages''' (and maintain them!)
 
#* For an indeterminate length of time...until substantially all users have updated.
 
  
I think we should correct the package versioning at the same time as the release of beta 2. We should also try to update our source package publishing at the same time.
+
== Package Versioning ==
  
===== More about Option 3 =====
+
Our package version naming convention descends from upstream Ubuntu packages, where applicable. Ubuntu's package versioning works like this:
  
Here's how a manual <code>galliumos-upgrade</code> script might work:
+
=== Sample Package Version Strings ===
  
# In preparation, we publish packages with corrected versions to <code>vivid-galliumos</code>
+
* <code>3.2.1</code>          Packages from original sources, without Debian or Canonical patches
#* Existing systems will not automatically update to these packages due to "lower" revision numbers
+
* <code>3.2.1-1</code>       Packages patched by Debian (v1) but not Canonical
# We also update an existing package (<code>galliumos-base</code>?) to a higher rev (no conflict here, that package doesn't require version correction), which includes the <code>galliumos-upgrade</code> script
+
* <code>3.2.1-0ubuntu1</code> Packages patched by Canonical (v1) but not Debian (Canonical adds the implicit zero)
# The script does a few things:
+
* <code>3.2.1-1ubuntu2</code> Packages patched by Debian (v1) ''and'' Canonical (v2)
## Confirms that existing packages need updating to "lower" corrected versions
 
## Forces the "downgrade" and purges the old versions
 
## Possibly recommends a reboot
 
  
From the user's perspective, the instructions for upgrading to beta 2 will be:
 
  
    apt-get update
+
=== GalliumOS Package Version Strings ===
    apt-get dist-upgrade
 
    galliumos-upgrade beta2
 
    reboot
 
  
I will test the plan to be certain I'm not missing anything, but I think it's our best bet. Any other ideas?
+
Our version string might include a <code>galliumosN</code> tag (N=version), depending on the source of the packaged material:
  
==== Deviant package versions ====
+
* '''Original to us''' e.g <code>galliumos-base</code>
 +
** <code>3.2.1</code>, no tag needed
 +
* '''From original sources, not patched by us'''
 +
** <code>3.2.1</code>, no changes; reuse the version from the original source
 +
* '''From original sources, and patched by us'''
 +
** <code>3.2.1</code>          becomes <code>3.2.1-0galliumos1</code>, add the implicit <code>-0</code> first, if necessary!
 +
* '''From Debian ''or'' Canonical (patched or not), ''not'' patched by us'''
 +
** <code>3.2.1</code>, no changes; reuse the upstream version string
 +
** <code>3.2.1-4</code>
 +
* '''From Debian (patched or not), ''and'' patched by us'''
 +
** <code>3.2.1-4</code>        becomes <code>3.2.1-4galliumos1</code>, add our tag.
 +
** <code>3.2.1</code>          becomes <code>3.2.1-0galliumos1</code>, add the implicit <code>-0</code> first, if necessary!
 +
* '''From Canonical (patched or not), ''and'' patched by us'''
 +
** <code>3.2.1</code>          becomes <code>3.2.1-0galliumos1</code>, add the implicit <code>-0</code> first, if necessary!
 +
* '''From Canonical ''via'' Debian (patched or not), ''and'' patched by us'''
 +
** <code>3.2.1-0ubuntu1</code> becomes <code>3.2.1-0ubuntu1-galliumos1</code>, just add a hyphen and our tag
 +
** <code>3.2.1-4ubuntu1</code> becomes <code>3.2.1-4ubuntu1-galliumos1</code>
  
These packages are currently problematically versioned:
+
==== More Examples ====
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! scope="col"| package
+
! scope="col"| package version
! scope="col"| upstream fork point
+
! scope="col"| vendor version
! scope="col"| upstream current
+
! scope="col"| patches?
! scope="col"| galliumos uncorrected
 
! scope="col"| galliumos corrected
 
 
|-
 
|-
| xfce4-settings
+
| 3.2.1
| 4.12.0-ubuntu1
+
| 3.2.1
| 4.12.0-0ubuntu1
+
| (none)
| 4.12.9-0ubuntu1
 
| 4.12.0-0ubuntu1-galliumos7
 
 
|-
 
|-
| slim
+
| 3.2.1-4
| 1.3.6-4
+
| 3.2.1
| 1.3.6-4
+
| Debian v4, <strike>Ubuntu</strike>, <strike>GalliumOS</strike>
| 1.3.7.4-1
 
| 1.3.6-4-galliumos13
 
 
|-
 
|-
| xfwm4
+
| 3.2.1-0ubuntu5
| 4.12.1-1ubuntu1
+
| 3.2.1
| 4.12.3-1ubuntu1~ubuntu15.04.1
+
| <strike>Debian</strike>, Ubuntu v5, <strike>GalliumOS</strike>
| 4.12.2-1ubuntu6
 
| 4.12.2-1ubuntu1-galliumos5
 
 
|-
 
|-
| pasystray
+
| 3.2.1-0galliumos6
| 0.4.0-1
+
| 3.2.1
| 0.4.0-1
+
| <strike>Debian</strike>, <strike>Ubuntu</strike>, GalliumOS v6
| 0.4.0.3-2
 
| 0.4.0-1-galliumos1
 
 
|-
 
|-
| xorg-server
+
| 3.2.1-4ubuntu5
| 2:1.17.1-0ubuntu3.1
+
| 3.2.1
| TBD
+
| Debian v4, Ubuntu v5, <strike>GalliumOS</strike>
| 2:1.17.1-0ubuntu4
 
| 2:1.17.1-0ubuntu3.1-galliumos1
 
 
|-
 
|-
| xfce4-panel
+
| 3.2.1-4galliumos6
| 4.12.0-0ubuntu1
+
| 3.2.1
| 4.12.0-0ubuntu1
+
| Debian v4, <strike>Ubuntu</strike>, GalliumOS v6
| 4.12.1-0ubuntu1
 
| 4.12.0-0ubuntu1-galliumos1
 
 
|-
 
|-
| xubuntu-default-settings
+
| 3.2.1-4galliumos6+dev1
| 15.04.5
+
| 3.2.1
| 15.04.5
+
| Debian v4, <strike>Ubuntu</strike>, GalliumOS v6, GalliumOS dev
| 15.04.22
 
| 15.04.5-galliumos16
 
 
|-
 
|-
| dmz-cursor-theme
+
| 3.2.1-4ubuntu5-galliumos6
| 0.4.4ubuntu1
+
| 3.2.1
| 0.4.4ubuntu1
+
| Debian v4, Ubuntu v5, GalliumOS v6
| 0.4.5ubuntu1
 
| 0.4.4ubuntu1-galliumos1
 
 
|-
 
|-
| galliumos-meta
+
| 0git20151003.be882ef2
| xubuntu-meta 2.190
+
| (unversioned, git date.hash)
| TBD
+
| (none)
| 2.201
 
| 2.190-galliumos11
 
 
|-
 
|-
| xfce4-session
+
| 0git20151003.be882ef2-galliumos6
| 4.12.1-1ubuntu2
+
| (unversioned, git date.hash)
| 4.12.1-1ubuntu2
+
| GalliumOS v6
| 4.12.1-1ubuntu9
 
| 4.12.1-1ubuntu2-galliumos5
 
|-
 
| cups-filters
 
| 1.0.67-0ubuntu2.4
 
| 1.0.67-0ubuntu2.5 (!)
 
| 1.0.67-0ubuntu2.5
 
| 1.0.67-0ubuntu2.4-galliumos1
 
|-
 
| ubiquity
 
| 2.21.26
 
| 2.21.26
 
| 2.21.31
 
| 2.21.26-galliumos4
 
|-
 
| casper
 
| 1.360
 
| 1.360
 
| 1.360-2
 
| 1.360-galliumos2
 
|-
 
| zram-config
 
| 0.3.1
 
| 0.3.1
 
| 0.3.2-1
 
| 0.3.1-galliumos3
 
|-
 
| xubuntu-artwork
 
| 15.04.4
 
| 15.04.4
 
| 15.04.18
 
| 15.04.4-galliumos13
 
|-
 
| xkeyboard-config
 
| 2.12-1ubuntu1
 
| TBD
 
| 2.12.1-1ubuntu1
 
| 2.12-1ubuntu1-galliumos1
 
|-
 
| xfce4-panel
 
| 4.12.0-0ubuntu1
 
| 4.12.0-0ubuntu1
 
| 4.12.1-0ubuntu1
 
| 4.12.0-0ubuntu1-galliumos1
 
|-
 
| libnotify
 
| 0.7.6-2svn1
 
| TBD
 
| 0.7.7-1
 
| 0.7.6-2svn1-galliumos1
 
|-
 
| ubuntu-meta
 
| 1.334
 
| TBD
 
| 1.336
 
| 1.334-galliumos2
 
|-
 
| systemd
 
| 219-7ubuntu6
 
| 219-7ubuntu6
 
| 219-7ubuntu29
 
| 219-7ubuntu6-galliumos3
 
|-
 
| procps
 
| 1:3.3.9-1ubuntu8
 
| 1:3.3.9-1ubuntu8
 
| 1:3.3.9.3-1ubuntu9
 
| 1:3.3.9-1ubuntu8-galliumos3
 
|-
 
| libdrm
 
| 2.4.60-2
 
| TBD
 
| 2.4.65-1-9.22.15.git-1
 
| 2.4.60-2-galliumos2
 
|-
 
| kmod
 
| 18-3ubuntu1
 
| 18-3ubuntu1
 
| 18-3ubuntu2
 
| 18-3ubuntu1-galliumos1
 
|-
 
| hexchat
 
| 2.10.1-2
 
| 2.10.1-2
 
| 2.10.1-5
 
| 2.10.1-2-galliumos1
 
|-
 
| deadbeef
 
| 0.6.2-1
 
| 0.6.2-1
 
| 0.6.2-1<br>(no mods, this is correct!)
 
| 0.6.2-1-galliumos1<br>(if we patch in the future!)
 
|-
 
| xfce4-power-manager
 
| 1.4.3-0ubuntu1
 
| 1.4.3-0ubuntu1
 
| 1.4.8-0ubuntu11
 
| 1.4.3-0ubuntu1-galliumos12
 
|-
 
| base-files
 
| 7.2ubuntu9
 
| 7.2ubuntu9
 
| 7.2ubuntu10
 
| 7.2ubuntu9-galliumos1
 
|-
 
| compton
 
| 0.1~beta2-1
 
| 0.1~beta2-1
 
| 0.1~beta3-git-9.22.15-9
 
| 0.1~beta2-1-galliumos11
 
|-
 
| xorg
 
| 1:7.7+7ubuntu4
 
| 1:7.7+7ubuntu4
 
| 1:7.7+7ubuntu5
 
| 1:7.7+7ubuntu4-galliumos1
 
|-
 
| shimmer-themes
 
| 1.9.4-0ubuntu2
 
| 1.9.4-0ubuntu2
 
| 1.9.4-1ubuntu1
 
| 1.9.4-0ubuntu2-galliumos1
 
 
|-
 
|-
 +
| 0.1~beta2-1git20150920.d7f95b5-galliumos6
 +
| 0.1~beta2 (plus git date.hash)
 +
| Debian v1, GalliumOS v6
 
|}
 
|}
 +
 +
The hyphenation rules are due to Debian's complicated sort logic. See below for a demonstration.
 +
 +
  # These version strings are Debian-ordered from oldest to newest
 +
  #
 +
  3.2.1
 +
  3.2.1-0galliumos1
 +
  3.2.1-1
 +
  3.2.1-1galliumos1
 +
  3.2.1-1ubuntu1
 +
  3.2.1-1ubuntu2
 +
  3.2.1-2galliumos1
 +
  3.2.1-10
 +
  3.2.1-10galliumos1
 +
  3.2.1-1ubuntu1-galliumos1
 +
  3.2.1-1ubuntu2-galliumos1
 +
  3.2.1-1ubuntu2-galliumos1+dev1
 +
  3.2.1-1ubuntu2-galliumos1+dev1.1
 +
  3.2.1-1ubuntu2-galliumos1+dev1.2
 +
  3.2.1-1ubuntu2-galliumos1+dev1.10
 +
  3.2.1-1ubuntu2-galliumos1.1
 +
  3.2.1-1ubuntu2-galliumos1.2
 +
  3.2.1-1ubuntu2-galliumos1.10
 +
  3.2.1-1ubuntu2-galliumos2
 +
  3.2.1-1ubuntu2-galliumos10
 +
  3.2.1-1ubuntu10-galliumos1
 +
  3.2.1.1
 +
 
 +
  # These do not sort as expected, and are visually ambiguous: do not use!
 +
  3.2.1-0-galliumos1            ## DO NOT USE; ambiguous
 +
  3.2.1-0-ubuntu1                ## DO NOT USE; ambiguous
 +
  3.2.1-0-ubuntu0-galliumos1    ## DO NOT USE; ambiguous
 +
  3.2.1-0-ubuntu1-galliumos1    ## DO NOT USE; ambiguous
 +
  3.2.1-1-galliumos1            ## DO NOT USE; ambiguous
 +
  3.2.1-10-galliumos1            ## DO NOT USE; ambiguous

Latest revision as of 03:09, 18 January 2016

For documentation and discussion. Design is still in flux.

Repositories and Distributions

We have one apt repository at https://apt.galliumos.org/ which serves three "distributions" (confusing name, but there it is).

The current distributions are:

  • vivid-galliumos ("release" or "stable")
    • contains fully released, production packages, and is the (only) default repodist for all users, installed by galliumos-base
    • priority pinned at 9999
      • trumps Canonical's vivid repodist for all package versions
      • trumps GalliumOS's vivid-galliumos-prerelease repodist only with newer versions
  • vivid-galliumos-prerelease ("prerelease", "staging", or "unstable")
    • contains prerelease packages (expected to be stable and ready for general use)
    • priority pinned at 9999
      • trumps Canonical's vivid repodist for all package versions
      • trumps GalliumOS's vivid-galliumos repodist only with newer versions
  • vivid-galliumos-testing ("testing", "experimental", "current", or "development")
    • contains testing packages (very possibly broken, not ready for general use)
    • priority pinned at 10090
      • trumps all other repodists (Canonical and GalliumOS) for all package versions

To enable or disable repodists

The galliumos-repodist script is included in the galliumos-base package.

Usage is straightforward:

  • galliumos-repodist --enable prerelease
  • galliumos-repodist --disable prerelease
  • galliumos-repodist --status

See galliumos-repodist --help for more.


Development and Packaging Workflow (proposed)

Debian/Ubuntu has a fairly complex system for creating `deb` packages for use in `apt` repositories and distributions. There are many approaches and sets of tools to choose from.

Development

All packages distributed by GalliumOS are maintained at https://github.org/GalliumOS.

GalliumOS Origin Packages

Code for GalliumOS origin packages (e.g. galliumos-base) is committed to the git repo as a regular project tree

  • We include a debian directory and associated config files for packaging

Upstream Origin Packages

Code for upstream origin packages is committed as an expanded copy of the upstream archive

  • If upstream is Ubuntu or Debian or Debian-via-Ubuntu
    • The tree will already include a debian directory tree
    • A debian/galliumos/upstream file is added containing the full URL of the upstream dsc file
  • If upstream is another source
    • We will create a debian directory tree
  • GalliumOS patches to the upstream tree go into debian/patches
  • When we move to a new upstream version
    • Upstream changes are applied directly onto the existing tree
    • Our patches are updated if necessary to apply against the updated tree
    • debian/galliumos/upstream is updated with the new URL of the upstream dsc file

All Packages

Development changes should be performed on git branches, to allow multiple or parallel development efforts

However, changes will not be included in nightly package updates unless they:

  • Are merged back to master
  • Add a new entry to debian/changelog with an updated version string
    • If changes are not final and release-ready, update version 3.2.1-4galliumos1 to, e.g.: 3.2.1-4galliumos1+dev1

Additionally, we should always:

  • Update the distribution name in debian/changelog to vivid-galliumos

Packaging (nightly builds)

Packages are built nightly by an automated process:

  1. Code for each repo is pulled from the GitHub master branch
  2. Packages (both binary and source) are built
    • WIP: Some source packages are presently skipped
      • Some because they require a copy of the upstream source package tar file
      • Some others because the manually-presented upstream is inconsistent with our current tree, which will require manual adjustment to our repo to fix
  3. Packages are signed with the contact@galliumos.org signing key
  4. Signed packages are pushed to apt.galliumos.org
  5. Signed packages are imported in to distribution vivid-galliumos-testing

Packaging (release builds)

When preparing packages for a formal GalliumOS release, the master branch of each active GitHub repository is tagged with the release label (e.g. 1.0beta2, 1.0, etc)

Package Versioning

Our package version naming convention descends from upstream Ubuntu packages, where applicable. Ubuntu's package versioning works like this:

Sample Package Version Strings

  • 3.2.1 Packages from original sources, without Debian or Canonical patches
  • 3.2.1-1 Packages patched by Debian (v1) but not Canonical
  • 3.2.1-0ubuntu1 Packages patched by Canonical (v1) but not Debian (Canonical adds the implicit zero)
  • 3.2.1-1ubuntu2 Packages patched by Debian (v1) and Canonical (v2)


GalliumOS Package Version Strings

Our version string might include a galliumosN tag (N=version), depending on the source of the packaged material:

  • Original to us e.g galliumos-base
    • 3.2.1, no tag needed
  • From original sources, not patched by us
    • 3.2.1, no changes; reuse the version from the original source
  • From original sources, and patched by us
    • 3.2.1 becomes 3.2.1-0galliumos1, add the implicit -0 first, if necessary!
  • From Debian or Canonical (patched or not), not patched by us
    • 3.2.1, no changes; reuse the upstream version string
    • 3.2.1-4
  • From Debian (patched or not), and patched by us
    • 3.2.1-4 becomes 3.2.1-4galliumos1, add our tag.
    • 3.2.1 becomes 3.2.1-0galliumos1, add the implicit -0 first, if necessary!
  • From Canonical (patched or not), and patched by us
    • 3.2.1 becomes 3.2.1-0galliumos1, add the implicit -0 first, if necessary!
  • From Canonical via Debian (patched or not), and patched by us
    • 3.2.1-0ubuntu1 becomes 3.2.1-0ubuntu1-galliumos1, just add a hyphen and our tag
    • 3.2.1-4ubuntu1 becomes 3.2.1-4ubuntu1-galliumos1

More Examples

package version vendor version patches?
3.2.1 3.2.1 (none)
3.2.1-4 3.2.1 Debian v4, Ubuntu, GalliumOS
3.2.1-0ubuntu5 3.2.1 Debian, Ubuntu v5, GalliumOS
3.2.1-0galliumos6 3.2.1 Debian, Ubuntu, GalliumOS v6
3.2.1-4ubuntu5 3.2.1 Debian v4, Ubuntu v5, GalliumOS
3.2.1-4galliumos6 3.2.1 Debian v4, Ubuntu, GalliumOS v6
3.2.1-4galliumos6+dev1 3.2.1 Debian v4, Ubuntu, GalliumOS v6, GalliumOS dev
3.2.1-4ubuntu5-galliumos6 3.2.1 Debian v4, Ubuntu v5, GalliumOS v6
0git20151003.be882ef2 (unversioned, git date.hash) (none)
0git20151003.be882ef2-galliumos6 (unversioned, git date.hash) GalliumOS v6
0.1~beta2-1git20150920.d7f95b5-galliumos6 0.1~beta2 (plus git date.hash) Debian v1, GalliumOS v6

The hyphenation rules are due to Debian's complicated sort logic. See below for a demonstration.

 # These version strings are Debian-ordered from oldest to newest
 #
 3.2.1
 3.2.1-0galliumos1
 3.2.1-1
 3.2.1-1galliumos1
 3.2.1-1ubuntu1
 3.2.1-1ubuntu2
 3.2.1-2galliumos1
 3.2.1-10
 3.2.1-10galliumos1
 3.2.1-1ubuntu1-galliumos1
 3.2.1-1ubuntu2-galliumos1
 3.2.1-1ubuntu2-galliumos1+dev1
 3.2.1-1ubuntu2-galliumos1+dev1.1
 3.2.1-1ubuntu2-galliumos1+dev1.2
 3.2.1-1ubuntu2-galliumos1+dev1.10
 3.2.1-1ubuntu2-galliumos1.1
 3.2.1-1ubuntu2-galliumos1.2
 3.2.1-1ubuntu2-galliumos1.10
 3.2.1-1ubuntu2-galliumos2
 3.2.1-1ubuntu2-galliumos10
 3.2.1-1ubuntu10-galliumos1
 3.2.1.1
 
 # These do not sort as expected, and are visually ambiguous: do not use!
 3.2.1-0-galliumos1             ## DO NOT USE; ambiguous
 3.2.1-0-ubuntu1                ## DO NOT USE; ambiguous
 3.2.1-0-ubuntu0-galliumos1     ## DO NOT USE; ambiguous
 3.2.1-0-ubuntu1-galliumos1     ## DO NOT USE; ambiguous
 3.2.1-1-galliumos1             ## DO NOT USE; ambiguous
 3.2.1-10-galliumos1            ## DO NOT USE; ambiguous