Page MenuHomeLubuntu Development

Packaging Tutorial
Updated 169 Days AgoPublic

This is a tutorial which hopes to make it easy for new contributors to figure out how to fix a bug in Lubuntu. Note that this is specific to repositories that Lubuntu hosts on Phabricator, i.e. those components that differentiate Lubuntu from other Ubuntu flavorsโ€” most notably, LXQt. Everything else is handled upstream in Ubuntu. The process there will be similar.

Packaging is a vast and complex subject, especially given the many upstreams (Ubuntu, Debian, the developer themselves) and the changing processes/requirements among them. We have our own guide that proves some links to further resources.

Long story short

WARNING: This is a high-level overview that is useful as a reference once you understand the process. If you are new, DO NOT just follow this but read the links below first.
NOTE: Anything in CAPS is to be considered a variable and not to be taken literally.

Some important variables:

  1. PACKAGE: name of the source package, e.g. calamares
  2. VERSION: version string of the package, e.g. 3.2.11-0ubuntu1
  3. CODENAME: adjective in the full codename, e.g. eoan
IMPORTANT: You must be using the current development version for the build process below to work.
IMPORTANT: You must use the ssh clone link or pushing your changes will not work. DO NOT USE THE http LINK!!!!
## make a place to contain your work
mkdir WORKDIR
cd WORKDIR

## get the packaging repository from Phabricator
git clone ssh://git@phab.lubuntu.me:2222/source/PACKAGE.git
cd PACKAGE

## make sure you're on the development branch
git checkout ubuntu/CODENAME

## get the upstream source code
uscan --download-current-version
tar -x --strip-components=1 -f ../PACKAGE_*.orig.tar.xz

## make a new patch
mkdir debian/patches # just in case it doesn't exist
quilt push -a  # just in case there are patches, we apply them all
quilt new NAME.patch
# this is where you actually make the changes you want
quilt edit PATH/TO/FILE 
quilt refresh
quilt header --dep3 -e

## update the changelog
dch # -i or -a, depending (see below)
dch -r --distribution CODENAME

## test build the package
sudo apt update; sudo apt build-dep PACKAGE -y
debuild -b --no-sign

## get rid of source
rm -rf !(debian) .pc/ # requires bash and `shopt -s extglob`

## push your changes
git add -A
arc diff
# fill out the template accordingly, starting with the commit message
# please add a reference to the associated task in the description e.g. T2
# don't forget to add @tsimonq2, @wxl, @kc2bez and @The_LoudSpeaker as reviewers.

## make additional changes if requested
# get a new working copy (git clone, git checkout)
# then apply the changes from your differential revision
# NOTE: not necessary if you already have the original working version
arc patch Dn --nobranch # here n is the number of your differential revision
# make changes then push
git add -A
arc diff
# this time you won't have to fill out the template, just a commit message

## now a developer merges your revision
# get a new working copy and arc patch as above
# merge!
arc land --onto ubuntu/CODENAME

## finally a sponsor (usually same as developer) uploads your revision
# get a new working copy or working with the aboveโ€ฆ
# build the source package
debuild -S -sa

# upload!
dput ubuntu ../PACKAGE_VERSION_source.changes

## after it is accepted into the archive, a developer will tag it
git tag ubuntu/VERSION
git push origin ubuntu/VERSION
## remenber the VERSION here should be the package version that you put in changelog. not focal or eoan or something like that.
NOTE: always ๐Ÿ‘ add ๐Ÿ‘ a ๐Ÿ‘ changelog ๐Ÿ‘ entry ๐Ÿ‘ ๐Ÿคฃ

Digging deeper

IMPORTANT: You must complete the packaging requirements if you want the above to work (don't skip this!)
IMPORTANT: The following is required reading if you want the above to make sense

Bonus points

Last Author
wxl
Last Edited
Feb 4 2021, 12:32 AM

Event Timeline

wxl edited the content of this document. (Show Details)
wxl edited the content of this document. (Show Details)
wxl edited the content of this document. (Show Details)
wxl edited the content of this document. (Show Details)