FAQ
My unsorted Ubuntu packaging and maintenance FAQ
(that incl. even more - somewhat related - topics)
Help
- Need to reach out to the SRU team?
- join IRC channel #ubuntu-release and ask, highlight 'SRU team'
- or reach out to the SRU team member on duty (Ubuntu SRU Shift tracker)
- Have question or need help on the current development release?
- join IRC channel #ubuntu-devel or better #ubuntu-release on Libera.Chat and highlight using 'plusone'
- +1 Maintenance duty
- Have a question or need help with universe packages?
Terms
Some important terms (with each more info below):
- transition
- multiple source packages must migrate together to keep the archive installable (and I would add 'and to keep the combo of such packages working')
- proposed migration
- migrating packages from -proposed to release
- sync
https://github.com/canonical/ubuntu-maintainers-handbook/blob/main/Syncs.md copies a source package verbatim from an external repository into Ubuntu, overwriting any package of the same name
- merge
https://wiki.ubuntu.com/UbuntuDevelopment/Merging is a three-way merge of a package which originated in an external repository. This is used when there is a newer version available from the external repository, but the package has also been modified in Ubuntu ( Merge-o-Matic assists)
- consistency checks:
- incorrect dependencies
uninstallable packages: https://people.canonical.com/~ubuntu-archive/proposed-migration/impish_uninst.txt
binary packages that are no longer built by a source package: https://wiki.ubuntu.com/UbuntuDevelopment/NBS
- source package:
- To be precise, the .dsc file (the 'Debian source control' file) only describes the source package.
- The .dsc file itself is part of the source package. The source package itself is a set of files, like in this example:
- the upstream (or orig) tar-ball "bash_4.2.orig.tar.gz"
- the tar-ball with all upstream changes and the debian packaging files "bash_4.2-2ubuntu2.diff.gz";
- depending on the used format this would nowadays be a "bash_4.2-2ubuntu2.debian.tar.gz"
- and the .dsc file, "bash_4.2-2ubuntu2.dsc"
- References:
- To be precise, the .dsc file (the 'Debian source control' file) only describes the source package.
+1 Maintenance
- ensures that the development release stays in an installable state
- and that the archive is usable throughout the cycle.
- primary goal is to maintain archive-level quality throughout the development cycle to minimize roadblocks
- for people developing features for the next release, and to ease the preparation of milestones.
- References:
- In case help is needed with the development release,
- got to #ubuntu-release on Libera.Chat and highlight the call sign 'plusone'.
Ubuntu Release Process
* References
* Each Ubuntu release cycle follows a similar pattern, with the phases listed below.
UbuntuDevelopers need to align their work to these.
* 8 Phases:
- Beginning a new Release (toolchain, seeds)
- Planning (specs, ideas)
- Merging with Upstream (syncs, merges until Debian Import Freeze)
- Feature Development (oerlap usually with mergig, spec implementation)
- Stabilization (Freeze) (greater caution towards release, queued uploads, FFe)
- Milestones (images for alpha, beta, RC)
- Finalization (only fixing showstopper/severe bugs, crashes, install issues)
- Stable Releases (SRU - stable release update process starts)
SRU / Stable Release Update process
- References:
- Once an Ubuntu release has been completed and published,
- updates for it are only released under certain circumstances, and must follow a special procedure called a "stable release update" or SRU.
- An important part of the SRU process is the (SRU) Verification.
SRU Verification
- References:
- find bugs that need a verification, by
viewing the Pending Ubuntu SRUs (http://people.ubuntu.com/~ubuntu-archive/pending-sru.html),
- asking aptitude from the command-line: "aptitude search ~i~Aproposed"
- querying Launchpad for a specific release (here lucid) and the bug tag verification-needed
- looking at bugs which the SRU verification team is subscribed
- pending SRUs are generated by parsing the changelogs of the packages in -proposed
more SRU related tags: https://wiki.ubuntu.com/QATeam/PerformingSRUVerification#Tagging_the_report
Freeze
- References:
https://wiki.ubuntu.com/UbuntuDevelopment/PackageArchive#Freezes
- types of freezes:
- There are two kinds of freezes, "soft" and "hard" freezes.
- 'soft'
- Soft freezes have no mechanism in the archive software to enforce them, they just rely on each developer to ensure that they only upload appropriate changes.
For instance, FeatureFreeze is a soft freeze, as you can still upload as before, you are just required to seek exceptions for new features.
- Soft freezes have no mechanism in the archive software to enforce them, they just rely on each developer to ensure that they only upload appropriate changes.
- 'hard'
- In contrast to soft freezes hard freezes flick a switch in the archive software such that all uploads are not immediately accepted, they instead end up in the UNAPPROVED Queue. Packages remain in this queue until they are explicitly accepted by an Archive Administrator. This means that your changes can be reviewed before they are accepted, so that extra review can be done, and it is not left to your discretion to enforce the rules of the freeze. The 'final freeze' is such a freeze.
- On IRC, the topic of #ubuntu-devel on Libera Chat is generally updated to indicate the current freeze status.
- And there are usually also mails send out to the appropriate -announce mailing lists, too.
FFe
- References:
- Example:
- [FFe] [UBUNTU 22.04] ibmca engine with libica = libica.so.4 - sshd dumps core (openssl-ibmca)
https://bugs.launchpad.net/bugs/1967141 > openssl-ibmca (2.2.3-0ubuntu1) jammy; urgency=medium
- New upstream release. LP: #1967141
- The difference between 2.2.2 and 2.2.3 includes just these two fixes:
- + "PKEY: Fix usage of ECX keys" + "use correct libica for ibmca_mechaList_test" Rather than adding these as quilt patches, raising the package to the bugfix-only version that incl. them is preferable.
- For "PKEY: Fix usage of ECX keys" a backport of
- "Fix compilation for OpenSSL 3.0" was needed: d/p/e59cce5-Fix-compilation-for-OpenSSL-3.0.patch
- For convenience reasons a generated sample config is now included in
- the package, but also the optional configuration generator Perl script 'ibmca-engine-opensslconfig'.
- d/control: add dh-autoreconf to Build-Depends to work around a Lintian
- regression on missing-build-dependency-for-dh-addon
- [FFe] [UBUNTU 22.04] ibmca engine with libica = libica.so.4 - sshd dumps core (openssl-ibmca)
Sponsoring / Sponsorship / Sponsors
- References:
- to the worked based on an LP bug
- attach a fix (or even debdiff)
- subscribe ubuntu-sponsors (or ubuntu-security-sponsors in case of security patches)
- don't assign the bug to anyone if it needs sponsorship
- (the sponsor usually assign it to him-/her-self in case he/she picks it up)
- pending (sponsorship) requests:
Package Uploads
- References:
- my prefered tool is 'dput'
- dput ubuntu foo_1.0-0ubuntu1_source.changes # for people with upload superpowers
- dput ppa:lpid/ppa-name foo_1.0-0ubuntu1_source.changes
- upload must be signed by a GPG key registered in Launchpad (otherwise upload will be silently ignored)
uploads will land in the upload queue https://launchpad.net/ubuntu/focal/+queue and will be checked and approved (or rejected) the the archive admins
- build will take minutes up to hours, depending on the package and architecture (arm kernel 10+h)
- after successful buils the next 'publisher' run that starts at 3 and 33 minutes past each hour makes it available
new packages will be announced at the appropriate mailing list, like: https://lists.ubuntu.com/archives/focal-changes/
The changelog are available here: http://changelogs.ubuntu.com/changelogs/ or better:
https://launchpad.net/ubuntu/+source/<package>/+changelog or even: apt changelog <package>
- Make source-only uploads, i.e. use "dpkg-buildpackage -S"
- If you need to include the orig tarball as well, use parameters -S -sa
Proposed migrations
- References about proposed migrations:
- '-proposed' is a partial suite, means it only contains packages that have not yet migrated
- hence it must must be used in combination or on top of the release pocket
- A package will migrate from proposed to release if:
https://wiki.ubuntu.com/ProposedMigration#Migrating_packages_from_-proposed_to_release
a) package must be built and published on all archs (like in release pocket)
b) all deps must be satisfiable with packages from release, or with packages that are going to be installed at the same time (probably in -proposed as well (transition)
c) all potential tests of the package, it's binaries or of it's reverse deps must must pass (or have never passed "Always failed")
d) no bugs with 'block-proposed' are opened against the package
e) moving the package to the release pocket must not break any packages that are already in release
- If a)-c) applies the package is a 'valid candidate', otherwise 'not considered'.
- main work (for me, atm) are that failed tests block the migration,
- and "Regression" is listed for the failed architecture(s)
- Further reasons that prevent a proposed migration:
- "main/universe binary mismatch" - a source package may have some binaries in main and others in universe, but this can get mixed up for various reasons. This is known as "component mismatches" (and is related to IR).
- "impossible depends" - in case the dependent and depending packages are in different areas of the archive (one in main and the other in universe)
- "migrating makes something uninstallable" - dependency to an old package version; no-change rebuild may help
- "depends: a [b] (not considered)" - 'a' is blocked because it depends on 'b', however 'b' is either invalid or rejected
- "implicit dependency: a [b]" - implicit dependency is a pseudo dependency where Breaks/Conflicts creates an inverted dependency
- "implicit dependency: a [b] (not considered)" - same than above, but 'b' is also either invalid or rejected
- "has no binaries on arch" - package has either failed to build or failed to upload the binaries for a build
- "has no binaries on any arch (- to x.y.z)" - package doesn't have a current version, this error can indicate the package is not (yet) in the archive, or it can mean its binaries were removed previously but not sync-blacklisted and thus reappeared
- "flaky tests, hardware instabilities, and intermittent network issues" -
- "test Dependency Irregularities" - issues in debian/tests/control
"test Framework Timeouts and Out of Memory" - big_packages / long_tests at https://code.launchpad.net/~ubuntu-release/autopkgtest-cloud/+git/autopkgtest-package-configs
- Disabling/skipping tests
- Disabling/skipping/customizing tests for certain architectures
- Skipping autopkgtesting entirely
- autopkgtest failed to download material from the internet (e.g. pip or Maven)
- proposed migrations are tracked at:
- for a release in development:
- for stable releases:
The above pages (and more: https://people.canonical.com/~ubuntu-archive/proposed-migration/)
- are frequently re-generated (about every 3h) by a tool called 'britney':
https://wiki.ubuntu.com/ProposedMigration#Additional_information
https://code.launchpad.net/~ubuntu-release/britney/britney1-ubuntu
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
- The 'update_excuses' pages are ordered newest to oldest, but Ctrl+f is your friend here.
- autopkgtest regressions are the main things to be fixed there, fixes can be manyfold, like:
- just re-trigger, add a fix, sync/merge a new version that incl. a fix (devel only), no-change rebuilds, increased resources (more RAM 'big_packages' more time 'long_tests'), etc. Tests that have always failed can also be skipped with the help of 'never_run'. For the last three cases see the README.md here:
https://git.launchpad.net/~ubuntu-release/autopkgtest-cloud/+git/autopkgtest-package-configs
- Example of an MP to add a modification for a package to 'autopkgtest-package-configs':
- just re-trigger, add a fix, sync/merge a new version that incl. a fix (devel only), no-change rebuilds, increased resources (more RAM 'big_packages' more time 'long_tests'), etc. Tests that have always failed can also be skipped with the help of 'never_run'. For the last three cases see the README.md here:
- Not everyone is able to re-trigger autopkgtests on 'update_excuses',
even if a re-trigger symbol is visible and clickable (--> LP#1953374). Ask ask core-devs in case an autopkgtest retrigger is needed (and you don't have the superpower to do that yourself). In case of an SRU, one usually needs to reach out to IRC #ubuntu-release, But since most of the core-devs are in #ubuntu-devel, it might be more promising to ask there, even in case of an SRU. It's a good habit to have the retrigger URLs well prepared and share with the help of pastebin, for example: "Please could someone from the core-devs re-trigger this autopkgtest for me: https://autopkgtest.ubuntu.com/request.cgi?release=jammy&arch=ppc64el&package=casync&trigger=zlib%2F1%3A1.2.11.dfsg-2ubuntu9.1 It failed with a timeout on one architecture only, hence it might be a flaky test and worth to re-try - thx!" (In case of multiple URLs to re-try, put them in a pastebin and share the link.)
- Is in case a fix is needed to solve a problem with a proposed migration,
- it's best to not add this package to fix to the existing bug (and mark it as also affects...), but always open a separate LP bug in such a case, otherwise getting the regressions solved can become very difficult... (imagine there is a block due to package A in LP bug X, but unblock is not easily possible, because it would count for all packages B, C,... that are marked as affected by a single LP bug X).
- If a (static) library was changed (and with that it's API/ABI) and a no-change rebuild is required,
- open a separate LP bug, always add the LP bug number as a reference to the changelog (even if this does not seem to done for all no-change rebuilds, otohs SRU bug/upload always require a bug reference) and add an update-excuse tag. Then get this sponsored and uploaded, once in -proposed retrigger autopkgtests accordingly.
- Changed dynamic libraries usually only require a re-trigger with pointing the the new/fixed version
- (see below).
- References on re-triggering tests:
- 'update_excuses' (aka 'britney') tests are by default done against the -release/-update pockets.
- Just the 'package that is under test' is taken from the -proposed pocket.
- But if a test should done entirely under -release/-update pocket conditions,
- especially including the 'package under test', this can be forced by adding the URL suffix:
"&trigger=migration-reference/0"
- especially including the 'package under test', this can be forced by adding the URL suffix:
- In case more dependencies/packages from -proposed are needed for a test,
- these need to be explicitly named by a suffix like this:
"&trigger=PKG_NAME/PKG_VER" (whereas with 'PKG_NAME' only and no 'PKG_VER', the package will be taken from -release/-update by default, but with 'PKG_VER' pointing to the version of 'PKG_NAME' as it is in -proposed, it will be taken from there) - example:
https://autopkgtest.ubuntu.com/request.cgi?release=focal&arch=s390x&package=htslib&trigger=zlib%2F1%3A1.2.11.dfsg-2ubuntu1.4 the 'package under test' is 'htslib' (package=htslib) on architecture 's390x' (arch=s390x) for Ubuntu release 'focal' (release=focal) that is tested with a dependent package 'zlib' (also triggered by 'zlib'). Since this 'zlib' package comes with an explicit version '1:1.2.11.dfsg-2ubuntu1.4' (aka 'zlib%2F1%3A1.2.11.dfsg-2ubuntu1.4'), this zlib is highly likely from proposed.
- these need to be explicitly named by a suffix like this:
- If one now wants to retry a test using another lib version from -proposed
- (rather than by default the one from -release/-update)
and additional "&trigger=PKG_NAME/PKG_VER" needs to be appended. Example: https://autopkgtest.ubuntu.com/request.cgi?release=focal&arch=s390x&package=libbio-samtools-perl&trigger=zlib/1%3A1.2.11.dfsg-2ubuntu1.4&trigger=htslib/1.10.2-3ubuntu0.1&trigger=libbio-samtools-perl/1.43-2build2
- (rather than by default the one from -release/-update)
- Notice that 'britney' schedules the jobs every couple of hours,
- so it may/will take some time until you see the changes reflected at the 'update_excuses' page.
- Sometimes it can happen by coincidence that in parallel to your new package upload,
- and the resulting proposed-migration, that larger changes for example in the tools-chain were done, too (like an upgrade to a new compiler). This may cause even more regressions, which may not be caused by your upload: Well, that's 'bad luck' :-/
For testing against a PPA a suffix like this is needed '&ppa=LPUSER/PPA&trigger=SRCPKG/VERSION'
- Example:
https://autopkgtest.ubuntu.com/request.cgi?release=RELEASE&arch=ARCH&package=SRCPKG&ppa=LPUSER/PPA&trigger=SRCPKG/VERSION The results of a completed tests are available here: https://autopkgtest.ubuntu.com/results/autopkgtest-RELEASE-LPUSER-PPA/?format=plain
- Example:
- Sometimes a proxy is needed in case a test behaves differently using a proxy, see here:
- In order to indicate some investigations or work on a regression
- or problem a package has to migrate off -proposed, one may open a bug and tag it with:
- with 'update-excuse' for the release currently in development
with 'update-excuse-<codename>' for stable releases (update-excuse-focal) This makes the tagged LP bug linked from the update excuses page under the package. Example of an update-excuse bug: https://bugs.launchpad.net/bugs/1988352
- or problem a package has to migrate off -proposed, one may open a bug and tag it with:
- One may see the autopkgtest job running here:
- One may find the autopkgtest test results here:
- And the initial proposed-migration ('zlib' here), that trigger the autopkgtest, will be updated:
- 'block-proposed' tag - a bug that should be held back from migrating into the release pocket (e.g. because build fails, causes an FTBFS, causes issue on dependent packages, requested by upstream -for whatever reason [liboqs])
'block-proposed-<series>' tag - a bug that should be held back being released into the updates pocket for the corresponding stable series (e.g. due to staging)
uploads providing only test fixes will generally be staged/phased using block-proposed-<series>
autopkgtests
- References:
- There can be several issues/regressions with autopkgtests:
- real regression: a real issue caused by the upload of the new package, set tag 'verification-failed'
- not a real regression: maybe just broken by some other deps; commenting on SRU bug; SRU team could add a badtest or reset-test
- flaky test: rerun, or analyze and argue that it's not related to the package
* it's the uploader's responsibility to make sure the package is in a releasable state and that all the autopkgtests triggered by the upload are either passing or badtested
lp-test-ppa from https://git.launchpad.net/~ubuntu-server/+git/ubuntu-helpers offers some help:
- lp-test-ppa --showurl ppa:kstenerud/postfix-postconf-segfault-1753470 --release bionic
- The '--showurl' parameter prints out the URL, so that they can be cut-and-paste into email or chat. * using KVM:
autopkgtest-buildvm-ubuntu-cloud -r focal -v --cloud-image-url http://cloud-images.ubuntu.com/daily/server
- autopkgtest -U -s -o dep8-mypackage mypackage/ -- qemu /var/lib/adt-images/autopkgtest-focal-amd64.img
- using LXD:
- autopkgtest-build-lxd images:ubuntu/impish/amd64
- autopkgtest -U -s -o dep8-mypackage mypackage/ -- lxd autopkgtest/ubuntu/focal/amd64
- using a PPA: --setup-commands="sudo add-apt-repository -y -u -s ppa:mylaunchpaduser/focal-mypackage-fixed-something-1234567"
- on Canonistack (which is closest to real autopkgtests)
- autopkgtest --no-built-binaries --apt-upgrade --setup-commands setup-testbed --shell-fail systemd_247.3-1ubuntu2.dsc -- ssh -s nova -- --flavor m1.small --image ubuntu/ubuntu-focal-daily-s390x-server-20221023-disk1.img --keyname fheimes_canonistack-bos01
- by default: est will run against all packages in release plus the new candidate from proposed:
'--apt-pocket=proposed=src:<yourpkg>' or '--apt-pocket=proposed=src:srcpkg1,srcpkg2'
- run against all packages that are in proposed:
- '--apt-pocket=proposed'
- in case a test requires a proxy one may add:
--env "http_proxy=http://squid.internal:3128" --env "https_proxy=http://squid.internal:3128" --env "no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24"
Phasing / Staging
- References:
- Once an package is released to -updates, the update is then phased so that the update is gradually made available to expanding subsets of Ubuntu users.
- This process allows us to automatically monitor for regressions and halt the update process if any are found. Complete details about the process can be found in a blog post by Brian Murray.
Merge proposals for package updates
- It's recommended to do a quick self review of your merge proposal for a package update or version bump
- before declaring it as 'needs review' or as ready to be reviewed and sponsored:
- Merge Proposal Reviewing
- Initial Review of the diff / debdiff
- Check the changelog:
- Contains bug pointer, like '(LP: #1234567)'
Proper version change: https://wiki.ubuntu.com/SecurityTeam/UpdatePreparation#Update_the_packaging
- Proper distribution: not unstable, not a Debian release name
- Lists ideally all files changed
- quilt patches with 'fuzz' are not allowed and need to be fixed/refreshed
- refresh of quilt patches to solve 'offsets' should be at done at max if working on '-devel'
- (so for PATCHES, not for SRUs) or to fix a fuzz
Proper author & email
- make the changelog clear and crisp - ideally "grep-able" with key words, file names, etc.
Following the dep-3 http://dep.debian.net/deps/dep3/ for quilt patches:
Description: <short description, required>
<long description that can span multiple lines, optional>
Author: <name and email of author, optional> Origin: <upstream|backport|vendor|other>, <URL, required except if Author is present> Bug: <URL to the upstream bug report if any, implies patch has been forwarded, > Bug-<Vendor>: <URL to the vendor bug report if any, optional> Forwarded: <URL|no|not-needed, useless if you have a Bug field, optional> Applied-Upstream: <version|URL|commit, identifies patches merged upstream, option> Reviewed-by: <name and email of a reviewer, optional> Last-Update: 2021-11-19 <YYYY-MM-DD, last update of the meta-information, option> --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
- Example(s): " Update Surface_X11.cxx Runtime selection of ARGB XImage byte order
Author: johnmartin-oracle <55413843+johnmartin-oracle@users.noreply.github.com> Origin: upstream, https://github.com/TigerVNC/tigervnc/pull/1084/commits/7ab92639848a6059e2b6b88499b008b9606f3af6 Bug-IBM: Bugzilla 192826 Bug-Ubuntu: https://bugs.launchpad.net/bugs/1929790 Applied-Upstream: v1.11.90 Reviewed-by: Frank Heimes <frank.heimes@canonical.com> Last-Update: 2021-09-20 " or this: " Description: EP11: Dilithium: Specify OID of key strength at key generation
- Newer EP11 firmware versions require that the OID of the desired Dilithium key strength is specified with attribute CKA_IBM_PQC_PARAMS at key generation. Older firmware versions ignore this attribute.
Author: Ingo Franzki <ifranzki@linux.ibm.com> Origin: backport, https://github.com/opencryptoki/opencryptoki/commit/6759faed4c7a2e154ca2f2c56a5b51aec68227fc Bug-IBM: Bugzilla 198153 Bug-Ubuntu: https://bugs.launchpad.net/bugs/1973296 Forwarded: not-needed Applied-Upstream: 3.18 Reviewed-by: Frank Heimes <frank.heimes@canonical.com> Last-Update: 2022-05-13 "
- Check the commits:
- Patches / changes are logically split into separate git commits (d/p)
- in case a package was never touched by Canonical for Ubuntu
- (hence has no 'ubuntu?' in its version), but now needs to be, the tool 'update-maintainer' tool needs ot be called which will modify debian/control which then needs to be committed as well (as separate commit) (d/control)
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> XSBC-Original-Maintainer: Debian S/390 Team <debian-s390@lists.debian.org>
- (hence has no 'ubuntu?' in its version), but now needs to be, the tool 'update-maintainer' tool needs ot be called which will modify debian/control which then needs to be committed as well (as separate commit) (d/control)
- changelog is usually the last commit (d/changelog)
- Check the files:
- Only files inside the debian directory must be modified!
- Review Template
[ https://github.com/canonical/ubuntu-maintainers-handbook/blob/main/MergeProposalReview.md ] The following template may come useful when submitting reviews:
- Changelog:
- [ ] old content and logical tag match as expected
- [ ] changelog entry correct version and targeted codename
- [ ] changelog entries correct
- [ ] update-maintainer has been run
- Actual changes:
- [ ] no upstream changes to consider
- [ ] no further upstream version to consider
- [ ] debian changes look safe
- Old Delta:
- [ ] dropped changes are ok to be dropped
- [ ] nothing else to drop
- [ ] changes forwarded upstream/debian (if appropriate)
- New Delta:
- [ ] no new patches added
- [ ] patches match what was proposed upstream
- [ ] patches correctly included in debian/patches/series
- [ ] patches have correct DEP3 metadata / header (incl. working URL for field Origin)
- Build/Test:
- [ ] build is ok
- [ ] verified PPA package installs/uninstalls
- [ ] autopkgtest against the PPA package passes
- [ ] sanity checks test fine
- Other:
- [ ] LP bug public
- [ ] LP bug affects the correct package(s)
- Changelog:
- If there is now everything is prepared:
- change the MP from "work in progress" to "needs review"
- (on change to 'needs review' you'll get a notification mail)
- and check (again) that the correct reviewer is set
- and check (again) that a 'Related bug(s)' is assigned
- change the LP bug status to "In Progress"
- a SRU template was added to the LP bug (not needed for development release patches)
- subscribe the "ubuntu-sponsors" LP group to the LP bugs (since sponsorship is needed)
- ask someone to review and sponsor (maybe informally)
- add a tag for the ubuntu release, like 'focal'
- crossing fingers that everything is okay ...
- If the reviewer / sponsor is happy and uploaded the changes,
- he/she usually adds a comment to the ticket, like: " Thanks. I fixed up a small lintian warning about the changelog entry being longer than 80 chars. Other than that, LGTM. Uploaded. "
- If the updated package has arrived at the ubuntu release unapproved queue:
- SRU package upload is stuck
- In case an SRU package upload is stuck in the upload queue for several days (e.g. 1+ week), join the IRC channel #ubuntu-release and ask the SRU team kindly for having a look at this specific package, by using the tag "ubuntu-sru", ideally adding the URL and ask for approval. But better double check the status before using rmadison:
- $ rmadison qclib | grep jammy
- qclib | 2.3.0-0ubuntu1 | jammy/universe | source, s390x
# https://launchpad.net/ubuntu/jammy/+queue?queue_state=1&queue_text=qclib
- qclib (source) 2.3.0-0ubuntu1.1 universe libs medium Proposed
- $ rmadison qclib | grep jammy
- Example, write:
- "@ubuntu-sru Hi SRU team, the qclib package is for quite a while in the jammy unapproved queue.
<https://launchpad.net/ubuntu/jammy/+queue?queue_state=1&queue_text=qclib> Would you be so kind to have a look at it and ideally approve?"
- "@ubuntu-sru Hi SRU team, the qclib package is for quite a while in the jammy unapproved queue.
- Don't forget to be thankful:
"@<SRU-team member> many thx (just received the notification ...)"
- So use the IRC channel: #ubuntu-release
- Highlight with "ubuntu-sru" - the SRU team member should have a notification enabled for this keyword (similar to "ubuntu-archive", "ubuntu-release", "ubuntu-sponsors", ...)
- In case an SRU package upload is stuck in the upload queue for several days (e.g. 1+ week), join the IRC channel #ubuntu-release and ask the SRU team kindly for having a look at this specific package, by using the tag "ubuntu-sru", ideally adding the URL and ask for approval. But better double check the status before using rmadison:
- Sometimes it might be needed to directly ping the SRU team member that's on duty directly
- (for example in urgent cases):
- In case of package for the development release that is stuck in the upload queue,
- use again #ubuntu-release (not necessarily #ubuntu-devel), since what's basically needed is approval from someone from the RT (release-team) or AA (archive-admins) to sign this up, and those hang out in '#-release'.
Package versioning
- Updating a package version:
- no-change rebuilds:
- similar to:
SRU: 1.43-3build2 ==> 1.43-3build2.1
PATCH: 1.43-3build2 ==> 1.43-3build3 (since it's 'no-change' do not add an Ubuntu specific version suffix 'XubuntuY')
- BUT it's more important to check that the upgrade patch of a package is never broken.
- Means the package versions of the different Ubuntu releases must be in an ascending order, like:
package version 'a' of Ubuntu release n-1 < package version 'b' of Ubuntu release n package version 'b' of Ubuntu release n < package version 'c' of Ubuntu release n+1 -- and so on so a < b < c In other words: ensure there is always a proper upgrade path
- Means the package versions of the different Ubuntu releases must be in an ascending order, like:
- a tilde ('~') in the version string usually indicates a backport, like: 1.2.3-3ubuntu1~20.04.1
Patch / Fix
- References:
- the recommended tool to handle fixes on a package level is quilt
- (especially with debian/source/format)
- build fixed package (in PPA)
- also test fixed package (autopkgtest or sometimes tests are executed as part of the build process)
- reference LP bug always in debian/changelog
- 'submittodebian'will take you through a series of steps to make sure the bug ends up in the correct place in Debian
- for Ubuntu fixes either create a debdif or a MP (depending on the team)
- think about incl. multiple fixes at once (if there are some)
- if the multiple fixes are big, think about sending individual patches or merge proposals
- (in case different LP bugs exist for them, this makes things easier)
- The 'ubuntu-dev-tools' incl. some useful tools like 'what-patch' and 'edit-patch'
Packaging
- Rename file during Debian install
possible with dh >= 9 and dh-exec make the .install file executable (chmod a+x debian/package.install) add '#!/usr/bin/dh-exec' to the top of debian/package.install and use "source => dest", like this: #!/usr/bin/dh-exec debian/default.conf => /etc/my-package/start.conf
- Upload issues with dput:
- Sometimes dput does not work for me in case VPN is active. If a dput upload hangs, retry with company VPN disabled.
- Check source and deb packages with lintian using:
- 'lintian -EvIL +pedantic' Make sure that at least all errors are solved, and ideally the warning, too.
- "${shlibs:Depends}" in debian/control is expanded to:
- ldd on binaries + dpkg -S on the library files (+ symbols files for finer-grained dependency)
- In case it's not possible to git-ubuntu clone a package, like:
- $ git-ubuntu clone zhmcclient
fatal: could not read Username for 'https://git.launchpad.net': terminal prompts disabled 03/12/2021 14:04:29 - ERROR:Unable to find an imported repository for zhmcclient. Please request an import by e-mailing usd-import-team@lists.launchpad.net.
- there are a few option options:
- sometimes the corporate vpn is causing issues,
- so disable VPN (in case it's active) and retry
Send a request by eMail to usd-import-team@lists.launchpad.net to get scapy imported.
https://lists.launchpad.net/usd-import-team/ That may take some time.
- To get it permanently imported an entry in the whitelist is needed:
https://git.launchpad.net/usd-importer example: Merge ~fheimes/usd-importer:MIR-mdevctl into usd-importer:master
- Git lp:~fheimes/usd-importer MIR-mdevctl Merge into master
https://code.launchpad.net/~paelzer/usd-importer/+git/usd-importer/+merge/395767
- Git lp:~fheimes/usd-importer MIR-mdevctl Merge into master
- Or for the time being it can be manually imported by my-/yourself:
- Example: git ubuntu import libbackuppc-xs-perl -d libbackuppc-xs-perl --no-push --no-fetch applied to scapy: git ubuntu import scapy -d scapy --no-push --no-fetch
- $ git-ubuntu clone zhmcclient
- Sometimes the Origin URL of a quilt DEP3 header, that usually points to the upstream commit,
- can be broken:
Origin: upstream, https://github.com/ibm-s390-linux/qclib6e8a1b640daa787d4ba1361c8fb90c1cfb3874df # it needs to be: Origin: upstream, https://github.com/ibm-s390-linux/qclib/commit/6e8a1b640daa787d4ba1361c8fb90c1cfb3874df Notice the "/commit/" - add this manually of course BEFORE building the source package and doing the dpkg-buildpackage, dput and debdiff !!!
- can be broken:
New packages
- References:
- always check if there is an ITP (intent to package) bug filed against the wnpp package in Debian
- file a LP bug
- check that it meets the Ubuntu License Policy, means copyright / licensing requirements
- tag with 'needs-packaging'
- explain where the source is hosted (and coming from)
- explain how it is licensed
- packages that meet the requirements of the Debian Free Software Guidelines
- should also be requested within Debian's Work-Needing and Prospective Packages (WNPP) process by filing a Request for Package (RFP)
Follow http://www.debian.org/doc/manuals/developers-reference/pkgs.html#newpackage
to get a new package into Debian (https://ftp-master.debian.org/new.html).
- Submitting new packages through Debian is the preferred path.
- But if your package is Ubuntu-specific or can't go into Debian for some other reason, you can submit it directly to MOTU. (Like the s390x maintainer are vacant in Debian, but it's an s390x specific package.)
- Build (and test) new package in PPA.
- package requires debian/watch file
- package must not have any known bugs or security issues
- package should have sane debian/ content
- changelog must reference the "needs-packaging" bug
- package should be lintian clean
- package should have the homepage referenced in debian/control header
- package must be advocated by at least two ubuntu-dev members (packager can be one)
- New packages need two MOTU sign-offs (or core-devs).
- New packages are screened in detail and are finally (after upload) reviewed by an archive admin.
- Feature Freeze is the latest approval date for a new package.
Autobuilders / Builds
- References
Sync / Merge
- References:
https://wiki.ubuntu.com/UbuntuDevelopment/PackageArchive#SyncingAndMerging
https://wiki.ubuntu.com/UbuntuDevelopment/ReleaseProcess#Merging_with_Upstream
https://github.com/canonical/ubuntu-maintainers-handbook/blob/main/PackageMerging.md
https://github.com/canonical/ubuntu-maintainers-handbook/blob/main/Syncs.md
MoM (Merge-o-Matic): https://wiki.ubuntu.com/MergeOMatic
- General
A sync copies a source package verbatim from an external repository into Ubuntu, overwriting any package of the same name. This is used when a newer version of it is available, and should be included in Ubuntu, and happens automatically during some phases of the release cycle. To request a sync, follow the SyncRequestProcess.
- A merge is a three-way merge of a package which originated in an external repository. This is used when there is a newer version available from the external repository, but the package has also been modified (branched) in Ubuntu. Merge-o-Matic assists with this work, and the Merging page explains how and when to merge. Packages which are maintained in Bazaar can and should be merged using Bazaar itself.
- Merge (as in ubuntu-maintainers-handbook)
- Server team does merges using git-ubuntu - similar to a git rebase, where commits from one point are replayed on top of another.
- also splitting larger commits into smaller logical units,
- one commit per logical unit (per bug/fix, d/changelog, d/c) (old-style commits that lumped multiple changes)
- Start a rebase: git rebase -i lp1234567/old/debian
- Change the commit(s) you're going to split from pick to edit.
- git reset to get your changes back: git reset HEAD^
- Now add the commits of a logical unit each, let's say some patches, d/rules, d/control, d changelog
- and end the rebase with 'git rebase --continue'
- add tag split (git ubuntu tag --split --bug 1234567)
- harmonizing d/changelog commits into two commits: a changelog merge and a reconstruction.
- Sync (as in ubuntu-maintainers-handbook)
- "For other sync situations, you can review this. Outside of the server team process the common way is to request for an explicit sync via filling a Launchpad Bug or using the 'requestsync' tool."
https://manpages.ubuntu.com/manpages/impish/man1/requestsync.1.html in case one has permissions to upload the package to Ubuntu: 'syncpackage' (copy source packages from Debian to Ubuntu)
- "For other sync situations, you can review this. Outside of the server team process the common way is to request for an explicit sync via filling a Launchpad Bug or using the 'requestsync' tool."
- merge: debdiff of NEW Debian package and NEW Ubuntu package
- some general MERGE/SYNC notes to remember:
- always to a test build (e.g. in PPA) on all relevant architectures (as usual)
- if tests are available, run them as well
- also do an package install and update test
and check the package content (dpkg -c <package>)
- look for upstream bugs that can be fixed at the same time
check for any "reverse-depends -a source src:<package>" (esp. with libs)
and test build them as well, pointing to the <package> test PPA (or using the same)
do the source package build using -v<previous version>, like:
- dpkg-buildpackage -S -d -v7.6.0-4ubuntu1 --sign-key=... this causes the 'in-between changelog items' to appear in the .changes file (means all changelog entries from previous to new version)
- make sure the LP bug for the merge is referenced in the changelog
- (since lot's of things are needed to create and populate the LP bug, I start the work w/o having a LP bug number; so don't forget to add it later!)
- if working based on the Merge-o-matic files there is usually a proposed changelog file
- either update this properly or create a new/current entry using 'dch -i'
- check if the version is correct (MERGES and SYNCS aren't SRUs!)
- update the version from UNSTABLE (or so) to the current development release (kinetic)
- update the urgency (should usually be medium, and not low as in the 'mom' template)
- if reusing the 'mom' template overwrite the mom mail with yours
- and update the date to the current one! (not needed is using 'dch -i')
- Examples for MERGE:
- 'ferret-vis' - MERGE
- LP#1986565 - "Please merge ferret-viz 7.6.0-5 into kinetic"
https://bugs.launchpad.net/bugs/1986565 ferret-vis (7.6.0-5ubuntu1) kinetic; urgency=low
- Merge from Debian unstable, remaining change:
- + Build without lto. lto-disabled-list can't be used (d/rules), because
- dpkg-buildflags is called after changing the package base directory.
- + Build without lto. lto-disabled-list can't be used (d/rules), because
- LP#1986565 - "Please merge ferret-viz 7.6.0-5 into kinetic"
- 'libgcrypt20' - MERGE
- LP#1974277 - "Please merge libgcrypt20 1.10.1-2 (main) from Debian unstable (main)"
https://bugs.launchpad.net/bugs/1974277 > libgcrypt20 (1.10.1-2ubuntu1) kinetic; urgency=low
- Merge from Debian unstable. (LP: #1974277) Remaining changes:
- + d/p/disable_fips_enabled_read.patch
- Disable the library reading /proc/sys/crypto/fips_enabled file and going into FIPS mode. libgcrypt is not a FIPS certified library.
- + d/p/disable_fips_enabled_read.patch
- Removed d/p/0001-Always-include-config.h-in-cipher-assembly-codes.patch
- since it's already included in the new version.
- Removed d/p/0001-poly1305-fix-building-with-arm-linux-gnueabihf-gcc-1.patch
- since it's already included in the new version.
- Refreshed d/p/12_lessdeps_libgcrypt-config.diff
- and d/p/disable_fips_enabled_read.patch due to offsets.
- LP#1974277 - "Please merge libgcrypt20 1.10.1-2 (main) from Debian unstable (main)"
- 'atlas' - MERGE
- LP#1961518 - "Please merge atlas 3.10.3-12 into jammy"
https://bugs.launchpad.net/bugs/1961518 > atlas (3.10.3-12ubuntu1) jammy; urgency=low [ Frank Heimes ]
- Merge from Debian unstable. (LP: #1961518)
- Solved merge conflict in d/control. Remaining changes: + debian/libatlas-base-dev.install + debian/libatlas3-base.install + debian/patches/000?-*.patch + debian/rules + debian/source/include-binaries
- Sponsored upload
https://launchpadlibrarian.net/587063572/atlas_3.10.3-10ubuntu3_3.10.3-12ubuntu1.diff.gz
- LP#1961518 - "Please merge atlas 3.10.3-12 into jammy"
- 'ferret-vis' - MERGE
- Examples for SYNC:
- 'tigervnc' - SYNC
- LP#1960814 - "Sync tigervnc 1.12.0+dfsg-2 (universe) from Debian unstable (main)"
https://bugs.launchpad.net/bugs/1960814 tigervnc (1.12.0+dfsg-2) unstable; urgency=medium
- Re-upload as-is (and source-only).
https://launchpad.net/~fheimes/+archive/ubuntu/tigervnc/+packages
- LP#1960814 - "Sync tigervnc 1.12.0+dfsg-2 (universe) from Debian unstable (main)"
- 'nettle' - pushed for a SYNC
LP#1959469 - "[22.10 FEAT] Upgrade nettle to latest version >= 3.7.4 (crypto)" https://bugs.launchpad.net/bugs/1959469 a bit tricky, since the symbols files have architecture-specific entries so just merging the deltas that are spat out on a sample build does not work one needs to merge all entries for all architectures at the same time - that's what I did but since Debian supports even more architectures than Ubuntu I think this should be merged from Debian Hence I've opened a Debian bug, asked to upgrade, pointed to the merge I already did, and offered my help ... https://launchpadlibrarian.net/613585238/debdiff_nettle_3.7.3-1build2_to_3.8-0ubuntu1.diff Magnus updated the package on the Debian side and it got auto-synched !
- 'tigervnc' - SYNC
Backports
- References:
- Backports work 'roughly' similarly to syncs, but have somewhat different requirements.
To request a backport, follow the UbuntuBackports process.
- backports have a tilde ('~') in their version string, like: 1.2.3-3ubuntu1~20.04.1
Transition
- A transition occurs when changes in a package A require further changes to other packages B, C, ..., that depend on A.
- To solve this, the packages B, C, ... that use or depend on package A, either need to be updated to a new version or recompiled. (Packages blocking a transition might be postponed from testing so that the transition can complete.)
- To handle a transitions, all affected (source) packages must migrate together to keep the archive installable (and the deps satisfied)
<and I would add 'and to keep the combo of such packages working'> https://people.canonical.com/~ubuntu-archive/transitions/
Examples are SONAME bumps (libfoo[n] changes to libfoo[n+1])
- or also renamed package.
reverse-depends -a source src:libica
Reverse-Build-Depends
opencryptoki (for libica-dev)
openssl-ibmca (for libica-dev)
example: reverse-depends -a source src:zlib (zlib and htslib) with:
- 55 'Reverse-Testsuite-Triggers'
- 1435 'Reverse-Build-Depends'
- 9 'Reverse-Build-Depends-Indep'
- 23 'Reverse-Build-Depends-Arch'
Transition for renamed package (https://wiki.debian.org/RenamingPackages)
- define a new binary dummy package with the same name as the old package in the control file of the new package. The new source package takes over the binary dummy package, and the old source package, which is then binaryless, can be cleaned up
- If build dependencies (e.g. of a library) change significantly,
- or are updated with a new version that comes with API/ABI changes, a rebuild of all packages that need that lib as build dependency is needed (as well as testing, e.g. autopkgtests).
- To find all reverse dependencies use: reverse-depends -a source src:libica
- Example:
- LP#1959421 - "[22.04 FEAT] Upgrade libica to latest version (crypto) (v4.0)" incl. transition
https://bugs.launchpad.net/bugs/1959421 > libica (4.0.1-0ubuntu1) jammy; urgency=medium
- New upstream release LP: #1959421
- transition from libica3 to libica4
- + adjust d/control + migrate d/libica3.* to d/libica4.* + extended symbols file
- adjusting d/copyright
- + change tabs to spaces + update relevant copyright years
- LP#1959421 - "[22.04 FEAT] Upgrade libica to latest version (crypto) (v4.0)" incl. transition
MIR (main inclusion report)
- References:
- Packages in Ubuntu main (and restricted) are officially maintained,
- supported and recommended by the Ubuntu project. Security updates are provided for them as necessary by Canonical, and Canonical's standard support services apply to these packages.
- Therefore, special consideration is necessary before adding new packages to these components.
- The Ubuntu MIR Team reviews packages for promotion from universe to main.
- One team at Canonical needs to own the package (will be responsible for it).
- Of course all dependencies also need to be in mail ('check-mir').
- A successul MIR will cuase a dependency/Seed change to pull the package into Main.
- Data-only packages (like fonts) do not need to follow the entire MIR process.
- The MIR-bug reporter is the driver of the MIR process.
- Only binary packages should be promoted to main.
- Sometimes source packages have binary packages that aren't actually needed in main, like -doc or -dbgsym, these can stay in universe.
Package Removal
- References:
- Only upon request, via LP bug tht must include:
- which Ubuntu release to remove it from
- remove both the source package and all binary packages?
- why they should be removed
- confirm that the binary packages have no rdepends (means no other package depends on them)
- if help if needed on the decision to whether a package should be removed or not,
- start a discussion on the 'ubuntu-devel' mailing
NBS
- References:
- Binary packages that are not built from any source (anymore)
- some reasons for such cases:
- a library gets a new SONAME (libfoo[n+1]) (due to an update),
- the previous version built libfoo[n]
- a package gets renamed by upstream and the renaming is reflected in the package name change
- a library gets a new SONAME (libfoo[n+1]) (due to an update),
- such packages are not automatically removed from the archive,
- since they still have reverse dependencies (packages depending on them)
- Sometimes one NBS package will depend on another, which can confuse a transition.
- In case a package has an alternate dependency, it will still show (but doesn't always need fixing).
- Remember that NBS removals are manual, which can confuse the results.
Symbols
- ABI/API compatibility is a special
- If a library breaks backward compatibility (i. e. changes existing API/ABI and introduces a new SONAME), then this always needs approval from the release team, since all reverse dependencies need to be adjusted and rebuilt.
http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html#sonameapiabi
- If a library breaks backward compatibility (i. e. changes existing API/ABI and introduces a new SONAME), then this always needs approval from the release team, since all reverse dependencies need to be adjusted and rebuilt.
- dpkg-gensymbols - generate symbols files (shared library dependency information)
- 'check-symbols' (cmd) - verify symbols exported by a new library version
Seeds
- References:
- Seeds are lists of packages which are considered important to have in the main component of the distribution,
- without explicitly listing all their dependencies and build-dependencies. They kind of define the content of an Ubuntu distribution.
- There are several (primary) seed, like minimal, boot, standard, desktop, ship, live, and supported,
- that define what goes into the archive's main component.
- Seeding a package pulls all of its dependencies into the appropriate part of the archive
- and ensures everything needed to build that package is at least placed in supported.
- Examples are server, server-minimal, desktop, cloud-image, live, wsl
- sometimes they incl. platform specific entries, like:
==> * s390-tools [s390x]
- germinate — expand dependencies in a list of seed packages
- It takes a list of (seed) packages and a mirror of the distribution, and produces outputs with the seed packages and their dependencies and build-dependencies expanded out in full.
The tool 'seeded-in-ubuntu <package>' can tell whether and how a given package is seeded
Bileto / former "CI Train"
- References:
Upload rights
https://github.com/canonical/ubuntu-maintainers-handbook/blob/main/MembershipInPackageSet.md
https://github.com/canonical/ubuntu-maintainers-handbook/blob/main/MembershipInMOTU.md
https://github.com/canonical/ubuntu-maintainers-handbook/blob/main/MembershipInCoreDev.md
Kernel bug fixing / pathing
- References:
https://wiki.ubuntu.com/KernelBugFixing (step-by-step guide)
- cherry-pick lines:
- (cherry picked from commit de5012b41e5c900a8a3875c7a825394c5f624c05 linux-next) or just: (cherry picked from commit de5012b41e5c900a8a3875c7a825394c5f624c05)
- backported lines:
- (backported from commit 1a82f6ab23659aa01a796d9d444ec9cc63ded26c linux-next) or just: (backported from commit 3d787b392d169d4a2e3aee6ac6dfd6ec39722cf2) [Frank Heimes: Resolve minor conflict due to additional includes.]
- In both cases add:
Signed-off-by: Frank Heimes <frank.heimes@canonical.com>
- for kernel pull-requests:
- for backports (applied with 'git am'):
+ <blank line> + <commit name> + <blank line> + ADD a "From: <original author>" line + <blank line> + BugLink: https://bugs.launchpad.net/bugs/1234567 + <blank line> + ... + (backported from commit 012a224e1fa31fc256aab921f691598e03db6018) + [Frank Heimes: Backport needs to use primary address space.] + Signed-off-by: Frank Heimes <frank.heimes@canonical.com>
+ <blank line> + <commit name> + <blank line> + DO NOT add a "From: <original author>" line, otherwise you'll get duplicate ones + BugLink: https://bugs.launchpad.net/bugs/1234567 + <blank line>
- .. + (cherry picked from commit 416e7f0c9d613bf84e182eba9547ae8f9f5bfa4c)
+ Signed-off-by: Frank Heimes <frank.heimes@canonical.com>
- for backports (applied with 'git am'):
Bugs / Triage
- References:
https://wiki.ubuntu.com/Bugs/Triage?action=show&redirect=Bugs%2FHowToTriage
bugs related to me: https://bugs.launchpad.net/people/+me/
expands (for me) to: https://bugs.launchpad.net/~fheimes
bugs I'm subscribed at: https://bugs.launchpad.net/~/+subscribedbugs
bugs I'm commendted on: https://bugs.launchpad.net/~/+commentedbugs
List of suggested bug responses: https://github.com/canonical/ubuntu-maintainers-handbook/blob/main/BugReportResponses.md
Further reading/references:
- Server team bugs (replace 'jj'J wit other codename abbreviations):
- Foundations team bugs (replace 'jj'J wit other codename abbreviations):
- Kernel (packages) bugs (replace 'jj'J wit other codename abbreviations):
Ubuntu OpenStack bugs (replace 'jj'J wit other codename abbreviations):
Full changelog of a package: https://launchpad.net/ubuntu/+source/<package>/+changelog
Full publishing history of a package: https://launchpad.net/ubuntu/+source/<package>/+publishinghistory