Rebuild a Pop!_OS package from sources
I don’t like the 50/50 tiling ratio of xfwm. I have cooked a patch to modify that ratio to my likings and already applied it to my OpenBSD local port tree. But the spare laptop runs Pop!_OS. And Debian / Ubuntu based Linux distribution comes with prebuild packages ; and that’s usually great!
Getting and patching the software source to build a custom deb package is quite easy when you have the recipe. And here it is.
Fetch sources & tools
All the following was done on Pop!_OS ; because this is what’s running on that laptop right now. But the directions should work for any Debian derived distro.
Start with getting the package source and its debian-related stuff. Also get the required building environment:
$ apt source xfwm4 Reading package lists... Done NOTICE: 'xfwm4' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/xfce-team/desktop/xfwm4.git Please use: git clone https://salsa.debian.org/xfce-team/desktop/xfwm4.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 1214 kB of source archives. Get:1 http://apt.pop-os.org/ubuntu jammy/universe xfwm4 4.16.1-1 (dsc) [1908 B] Get:2 http://apt.pop-os.org/ubuntu jammy/universe xfwm4 4.16.1-1 (tar) [1202 kB] Get:3 http://apt.pop-os.org/ubuntu jammy/universe xfwm4 4.16.1-1 (diff) [10.4 kB] Fetched 1214 kB in 0s (30.5 MB/s) $ /bin/ls -1d xfwm* xfwm4-4.16.1 xfwm4_4.16.1-1.debian.tar.xz xfwm4_4.16.1-1.dsc xfwm4_4.16.1.orig.tar.bz2 $ sudo apt-get build-dep xfwm4
Patch & build
From now, get into the source tree. Make the changes you want. And finally build the Debian package:
$ cd xfwm4-4.16.1/ $ cp -p ./src/client.c ./src/client.c.orig $ vi ./src/client.c (...) $ diff -u2 ./src/client.c.orig ./src/client.c \ > ~/patch-xfwm4_4.16.1-src_client_c.diff $ dpkg-buildpackage -rfakeroot -uc -b dpkg-buildpackage: info: source package xfwm4 dpkg-buildpackage: info: source version 4.16.1-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Yves-Alexis Perez <firstname.lastname@example.org> dpkg-buildpackage: info: host architecture amd64 dpkg-source --before-build . debian/rules clean (...) dpkg-deb: building package 'xfwm4' in '../xfwm4_4.16.1-1_amd64.deb'. dpkg-deb: building package 'xfwm4-dbgsym' in 'debian/.debhelper/scratch-space/build-xfwm4/xfwm4-dbgsym_4.16.1-1_amd64.deb'. Renaming xfwm4-dbgsym_4.16.1-1_amd64.deb to xfwm4-dbgsym_4.16.1-1_amd64.ddeb dpkg-genbuildinfo --build=binary -O../xfwm4_4.16.1-1_amd64.buildinfo dpkg-genchanges --build=binary -O../xfwm4_4.16.1-1_amd64.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) $ /bin/ls -1d ../ ../xfwm4-4.16.1 ../xfwm4-dbgsym_4.16.1-1_amd64.ddeb ../xfwm4_4.16.1-1.debian.tar.xz ../xfwm4_4.16.1-1.dsc ../xfwm4_4.16.1-1_amd64.buildinfo ../xfwm4_4.16.1-1_amd64.changes ../xfwm4_4.16.1-1_amd64.deb ../xfwm4_4.16.1.orig.tar.bz2
Install & run
Time has come to install the new patched package:
$ sudo dpkg -i ../xfwm4_4.16.1-1_amd64.deb (Reading database ... 384562 files and directories currently installed.) Preparing to unpack xfwm4_4.16.1-1_amd64.deb ... Unpacking xfwm4 (4.16.1-1) over (4.16.1-1) ... Setting up xfwm4 (4.16.1-1) ... Processing triggers for bamfdaemon (0.5.6+22.04.20220217-0ubuntu1) ... Rebuilding /usr/share/applications/bamf-2.index... Processing triggers for desktop-file-utils (0.26-1ubuntu3) ... Processing triggers for gnome-menus (3.36.0-1ubuntu3) ... Processing triggers for hicolor-icon-theme (0.17-2) ... Processing triggers for man-db (2.10.2-1) ...
And this is all about it! Happy patching && packaging.