Packaging Overview
Prerequisites
To build packages, install the devscripts package: sudo apt install devscripts, which contains a lot of useful helpers for building Debian packages. Many build tools for building software in the package can be found in the package build-essential;
apt install build-essential devscripts
Having gbp available is also a good idea: sudo apt install git-buildpackage
Note that installing git-buildpackage (gbp) will pull in pbuilder. You can prevent this by using --no-install-recommends when you install, e.g.;
apt install --no-install-recommends git-buildpackage
This is not necessary but can be helpful if you don't want to install and configure pbuilder.
Building packages with git-buildpackage
PureOS is aiming to standardize around a git based workflow. Please follow this link for building packages with git-buildpackage
Building packages with Debspawn and pbuilder
All packages should be tested and built in a pristine PureOS landing chroot before being uploaded to PureOS repositories. The preferred method to do that is by using debspawn.
Debspawn quickstart
Debspawn uses a systemd-nspawn container to build packages. It is also the build environment used on the PureOS autobuild servers, so if you want to replicate a build as close as possible to what runs on our build servers, use debspawn.
To install debspawn, run sudo apt install debspawn first.
Then create a new build environment for landing: debspawn create landing.
For packages not managed in git, debspawn can be invoked via
debspawn build landing --sign
For packages using git as the source code management tool, gbp can be instructed to build with Debspawn via gbp buildpackage --git-builder='debspawn b landing --sign'
Don't forget to set your own email address for the Git repository, via git config user.email your.name@puri.sm.
Pbuilder quickstart
There is documentation on setting up a pbuilder environment using PureOS.
For packages not managed in git, pbuilder can be invoked via
DIST=landing pdebuild --auto-debsign
For git-managed packages, gbp provides options to build with pbuilder directly. Alternatively, pdebuild can be passed in like gbp buildpackage --git-builder='DIST=landing pdebuild --auto-debsign'
Don't forget to set your own email address for the git repository, via git config user.email your.name@puri.sm.
Version numbers
Please check out Package Version Numbers in PureOS for information on how to version PureOS packages properly.
Paying attention to the version numbers is important, because the PureOS archive tools will use the version number to make decisions about the package's state, which includes overriding it with a version from Debian or even removing it.
You might be able to use DEBEMAIL=first.last@puri.sm dch --distribution=landing --force-distribution --no-auto-nmu --local=pureos as a starting point.
Validating packages
Use lintian --profile=pureos -IE --pedantic <changes-file> to check a package for compliance with the Debian policy. Ensure it is warning and error-free.
If your Lintian is old and does not support the pureos profile, all warnings related to NMUs and invalid suites can be ignored, as those are different or don't exist in PureOS. (See https://bugs.debian.org/884408)
Mandatory debian/control file changes for PureOS
Maintainer address
Please add the team based maintainer address for PureOS packages;PureOS Maintainers <pureos-project@lists.puri.sm>. This ensures that more than one person will be able to help maintain the package in PureOS and is required.
Example: If the debian/control file had
Maintainer: Cool Package Maintainers <team-pkg@example.com>
it should be changed to:
Maintainer: PureOS Maintainers <pureos-project@lists.puri.sm> XSBC-Original-Maintainer: Cool Package Maintainers <team-pkg@example.com>
Note that the Uploaders: field remains untouched.
Version Control System fields
In addition to the maintainer address, please make sure to fill in the Vcs-Browser and Vcs-Git fields. This allows one to correlate releases with source code and is also required.
The original Vcs-* fields should be retained as XSBC-Original-Vcs-*:
Example:
Vcs-Git: https://salsa.debian.org/gnome-team/gnome-control-center.git Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-control-center
becomes:
Vcs-Git: https://source.puri.sm/pureos/packages/gnome-control-center.git Vcs-Browser: https://source.puri.sm/pureos/packages/gnome-control-center XSBC-Original-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-control-center.git XSBC-Original-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-control-center
This help to identify the repository where new Debian versions should be pulled from.
Closing bugs
At the moment, the service that automatically closes reports is not active, due to maintenance (the previous implementation had a few bugs and was very slow), so for now you will need to close bugs manually. However, for some packages the bug information is still used to e.g. determine package migration speed. To close bugs in the PureOS tracker with an upload (once it is re-enabled), please use either the PB: #<nnn> or PureOS: #<nnn> syntax in debian/changelog, with <nnn> being replaced with the number of the respective task in Maniphest on tracker.p.n (with the T prefix stripped).
Uploading packages
See the document on Development/Uploading Packages
Common baseline
In order to ease collaboration *new* packages introcued into PureOS should
- be based on Debian's upstream packaging from git when available. Those can usually be found on https://salsa.debian.org
- be maintained in a git repository at https://source.puri.sm/pureos/packages or https://source.puri.sm/Librem5/debs
- adhere to Debian policy
- have a pipeline for gitlab-ci at debian/pureos-ci.yaml that builds debs to ease testing (example)
- the main development branch should be called pureos/latest. It always targets the latest PureOS release and should be the default branch in the gitlab UI.
*Existing* packages can continue to use pureos/byzantium or pureos/master branch naming but should make sure the gitlab UI has the default branch set to the branch that carries most recent development (e.g. pureos/byzantium at the time of writing).
- Last Author
- mak
- Last Edited
- Nov 4 2021, 15:03
Event Timeline
Feel free to delete my draft which arouse out of confusion around the Uploaders: field ;)
I would delete it myself, but have no clue how :O
@evangelos.tzaras no idea how one drops drafts but i think i restored the original version.
the main development branch should be called debian/latest
I believe that should be pureos/latest instead.
So would that be pureos/latest (instead of pureos/byzantium) and pureos/amber or pureos/amber-phone then?
Confusing!
Using pureos/byzantium or pureos/amber with or without -phone is somewhat easier for me since it clarifies which branch is destined for which target suite. In my mind, pureos/latest points to the branch that you work from to create pureos/*.
- @guido Am I right in this thinking with pureos/latest?
- @evangelos.tzaras How can we make this less confusing?
I was mostly confused whether this would imply that we would have both pureos/latest and pureos/byzantium.
Might also have been a case of -ENOCOFFEE, so feel free to disregard the confusion ;)
@evangelos.tzaras you only have *both* `pueros/latest and pureos/byzantium once byzatium is no longer the current development version. See https://dep-team.pages.debian.net/deps/dep14/ . The upside of pureos/latest is that you'd not be constantly busy with switching the repos default branch and name. It's basically the same as we do within DebianOnMobile with debian/master.