Difference between revisions of "Packaging"

From GalliumOS Wiki
Jump to: navigation, search
(Package Version Corrections!)
Line 25: Line 25:
 
=== Packages ===
 
=== Packages ===
  
Our package version naming convention descends from upstream Ubuntu packages, where applicable.
+
Our package version naming convention descends from upstream Ubuntu packages, where applicable. Ubuntu's package versioning works like this:
 +
 
 +
==== Sample Package Version Strings ====
 +
 
 +
* Packages from original sources (without Debian or Canonical patches): <code>1.2.3</code>
 +
* Packages patched by Debian but not Canonical: <code>1.2.3-1</code>
 +
* Packages patched by Canonical but not Debian: <code>1.2.3-0ubuntu1</code>
 +
* Packages patched by Debian ''and'' Canonical: <code>1.2.3-1ubuntu1</code>
 +
 
 +
==== GalliumOS Package Version Strings ====
 +
 
 +
We need to add our own tag to upstream packages.
 +
 
 +
; Packages original to us (galliumos-base, etc) ''do not'' need our tag
 +
: <code>1.2.3</code>
 +
; Packages from upstream original sources, unpatched, ''do not'' need our tag
 +
: <code>1.2.3</code>
 +
; Packages from Debian and patched by us, ''do'' need our tag, with ''no'' hyphen. Add a zero if Debian hasn't added a version of their own!)
 +
: <code>1.2.3-0galliumos1</code>
 +
; Packages from Canonical and patched by us ''do'' need our tag, ''with'' a hyphen.
 +
: <code>1.2.3-0ubuntu1-galliumos1</code>
 +
 
 +
The yes-hyphen/no-hyphen rules are due to Debian's (`apt`'s) complicated sort logic. See below for a demonstration of importance.
 +
 
 +
    # These version strings are in increasing order
 +
   
 +
    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-10galliumos1
 +
    3.2.1-galliumos1              ## this is wrong!
 +
    3.2.1galliumos1                ## this is wrong!
 +
    3.2.1galliumos2                ## this is wrong!
 +
    3.2.1galliumos10              ## this is wrong!
 +
    3.2.1-0-galliumos1            ## this is wrong!
 +
    3.2.1-1-galliumos1            ## this is wrong!
 +
    3.2.1-1ubuntu1-galliumos1
 +
    3.2.1-1ubuntu2-galliumos1
 +
    3.2.1-1ubuntu2-galliumos2
 +
    3.2.1-1ubuntu2-galliumos10
 +
    3.2.1-1ubuntu10-galliumos1
 +
    3.2.1-10-galliumos1            ## this is wrong!
 +
    3.2.1.1
 +
 
 +
 
 +
 
  
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.
 
  
 
==== Package Version Discrepancies! ====
 
==== Package Version Discrepancies! ====
Line 37: Line 87:
 
# <code>debootstrap</code> builds will fail to update to our pkgs when version numbers collide.
 
# <code>debootstrap</code> builds will fail to update to our pkgs when version numbers collide.
  
==== Package Version Corrections! ====
+
==== Package Version Corrections ====
 
 
There are a few ways we might fix this issue:
 
 
 
# '''Make a hard break sometime between current (BETA1) and 1.0''' (simple, guaranteed to work)
 
#* 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.
 
 
 
===== More about Option 3 =====
 
 
 
Here's how a manual <code>galliumos-upgrade</code> script might work:
 
  
# In preparation, we publish packages with corrected versions to <code>vivid-galliumos</code>
+
This is easy to fix! We just need to push corrected pkg versions to the stable repodist (`vivid-galliumos`).
#* Existing systems will not automatically update to these packages due to "lower" revision numbers
 
# 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
 
# The script does a few things:
 
## 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:
+
'''However''', when users run <code>apt-get upgrade</code>, they will be prompted to confirm "DOWNGRADED" packages, which we'll need to emphasize in the announcement.
  
    apt-get update
 
    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?
 
  
 
==== Deviant package versions ====
 
==== Deviant package versions ====

Revision as of 03:22, 18 December 2015

Current State of Packaging

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).

We have a second apt repository at https://apt-dev.galliumos.org/ which will be retired.

The current distributions are:

vivid-galliumos
STABLE / RELEASE (default)
priority pinned at 9999, will trump Canonical's vivid repo for all package versions
vivid-galliumos-prerelease
prerelease / staging / unstable
priority pinned at 10050, will also trump our vivid-galliumos repo for all package versions
vivid-galliumos-testing
testing / experimental / current / development / etc
priority pinned at 10090, will also trump our vivid-galliumos-prerelease repo for all package versions

General users will only have our vivid-galliumos distribution enabled (and Canonical's vivid distribution, of course).

Packages

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

Sample Package Version Strings

  • Packages from original sources (without Debian or Canonical patches): 1.2.3
  • Packages patched by Debian but not Canonical: 1.2.3-1
  • Packages patched by Canonical but not Debian: 1.2.3-0ubuntu1
  • Packages patched by Debian and Canonical: 1.2.3-1ubuntu1

GalliumOS Package Version Strings

We need to add our own tag to upstream packages.

Packages original to us (galliumos-base, etc) do not need our tag
1.2.3
Packages from upstream original sources, unpatched, do not need our tag
1.2.3
Packages from Debian and patched by us, do need our tag, with no hyphen. Add a zero if Debian hasn't added a version of their own!)
1.2.3-0galliumos1
Packages from Canonical and patched by us do need our tag, with a hyphen.
1.2.3-0ubuntu1-galliumos1

The yes-hyphen/no-hyphen rules are due to Debian's (`apt`'s) complicated sort logic. See below for a demonstration of importance.

   # These version strings are in increasing order
   
   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-10galliumos1
   3.2.1-galliumos1               ## this is wrong!
   3.2.1galliumos1                ## this is wrong!
   3.2.1galliumos2                ## this is wrong!
   3.2.1galliumos10               ## this is wrong!
   3.2.1-0-galliumos1             ## this is wrong!
   3.2.1-1-galliumos1             ## this is wrong!
   3.2.1-1ubuntu1-galliumos1
   3.2.1-1ubuntu2-galliumos1
   3.2.1-1ubuntu2-galliumos2
   3.2.1-1ubuntu2-galliumos10
   3.2.1-1ubuntu10-galliumos1
   3.2.1-10-galliumos1            ## this is wrong!
   3.2.1.1



Package Version Discrepancies!

We have some existing packages which do not follow this naming convention, and are versioned ahead of their upstreams (e.g. 1.2.3 in upstream to our 1.2.4). This causes a few issues:

  1. It's confusing for us and gives users the impression that our code is a release ahead of the upstream.
  2. When the upstream releases a 1.2.4, it will have different code than our 1.2.4.
  3. debootstrap builds will fail to update to our pkgs when version numbers collide.

Package Version Corrections

This is easy to fix! We just need to push corrected pkg versions to the stable repodist (`vivid-galliumos`).

However, when users run apt-get upgrade, they will be prompted to confirm "DOWNGRADED" packages, which we'll need to emphasize in the announcement.


Deviant package versions

These packages are currently problematically versioned:

package upstream fork point upstream current galliumos uncorrected galliumos corrected
xfce4-settings 4.12.0-ubuntu1 4.12.0-0ubuntu1 4.12.9-0ubuntu1 4.12.0-0ubuntu1-galliumos7
slim 1.3.6-4 1.3.6-4 1.3.7.4-1 1.3.6-4-galliumos13
xfwm4 4.12.1-1ubuntu1 4.12.3-1ubuntu1~ubuntu15.04.1 4.12.2-1ubuntu6 4.12.2-1ubuntu1-galliumos5
pasystray 0.4.0-1 0.4.0-1 0.4.0.3-2 0.4.0-1-galliumos1
xorg-server 2:1.17.1-0ubuntu3.1 TBD 2:1.17.1-0ubuntu4 2:1.17.1-0ubuntu3.1-galliumos1
xfce4-panel 4.12.0-0ubuntu1 4.12.0-0ubuntu1 4.12.1-0ubuntu1 4.12.0-0ubuntu1-galliumos1
xubuntu-default-settings 15.04.5 15.04.5 15.04.22 15.04.5-galliumos16
dmz-cursor-theme 0.4.4ubuntu1 0.4.4ubuntu1 0.4.5ubuntu1 0.4.4ubuntu1-galliumos1
galliumos-meta xubuntu-meta 2.190 TBD 2.201 2.190-galliumos11
xfce4-session 4.12.1-1ubuntu2 4.12.1-1ubuntu2 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
(no mods, this is correct!)
0.6.2-1-galliumos1
(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