summaryrefslogtreecommitdiffhomepage
path: root/blog
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2022-09-08 12:45:33 -0700
committerSean Whitton <spwhitton@spwhitton.name>2022-09-08 12:45:33 -0700
commitd169abcdd4890cbfc166dbd3af2c1b46080565fe (patch)
tree1307f20606ca6e3764c125d2b33587b76c1a0559 /blog
parent4e85530f9efc2b347870ef6603f55d5b2a279323 (diff)
downloadwiki-master.tar.gz
new blog entryHEADmaster
Diffstat (limited to 'blog')
-rw-r--r--blog/entry/reprepro-rebuilder.mdwn47
1 files changed, 47 insertions, 0 deletions
diff --git a/blog/entry/reprepro-rebuilder.mdwn b/blog/entry/reprepro-rebuilder.mdwn
new file mode 100644
index 0000000..7f7bc83
--- /dev/null
+++ b/blog/entry/reprepro-rebuilder.mdwn
@@ -0,0 +1,47 @@
+I've come up with a new [reprepro](https://manpages.debian.org/reprepro)
+wrapper for adding rebuilds of existing Debian packages to a local repository:
+[reprepro-rebuilder](https://git.spwhitton.name/dotfiles/tree/bin/reprepro-rebuilder).
+It should make it quicker to update local rebuilds of existing packages,
+patched or unpatched, working wholly out of git. Here's how it works:
+
+1. Start with a git branch corresponding to the existing Debian package you
+ want to rebuild. Probably you want `dgit clone foo`.
+
+2. Say `reprepro-rebuilder unstable`, and the script will switch you to a
+ branch `PREFIX/unstable`, where PREFIX is a short name for your reprepro
+ repository, and update `debian/changelog` for a local rebuild. If the
+ branch already exists, it will be updated with a merge.
+
+3. You can now do any local patching you might require. Then, say
+ `reprepro-rebuilder --release`. (The command from step (2) will offer to
+ release immediately for the case that no additional patching is required.)
+
+4. At this point, your reprepro will contain a source package coresponding to
+ your local rebuild. You can say `reprepro-rebuilder --wanna-build` to
+ build any missing binaries for all suites, for localhost's Debian
+ architecture. (Again, the command from step (3) will offer to do this
+ immediately after adding the source package.)
+
+Additionally, if you're rebuilding for unstable, reprepro-rebuilder will offer
+to rebuild for backports, too, and there are a few more convenience features,
+such as offering to build binaries for testing between steps (2) and (3). You
+can leave the script waiting to release while you do the testing.
+
+I think that the main value of this script is keeping track of the distinct
+steps of a relatively fiddly, potentially slow-running workflow for you,
+including offering to perform your likely next step immediately. This means
+that you can be doing something else while the rebuilds are trundling along:
+you just start `reprepro-rebuilder unstable` in a shell, and unless additional
+patching is required between steps (2) and (3), you just have to answer script
+prompts as they show up and everything gets done.
+
+If you need to merge from upstream fairly regularly, and then produce binary
+packages for both unstable and backports, that's quite a lot of manual steps
+that reprepro-rebuilder takes care of for you. But the script's command line
+interface is flexible enough for the cases where more intervention is
+required, too. For example, for my Emacs snapshot builds, I have another
+script to replace steps (1) and (2), which merges from a specific branch that
+I know has been manually tested, and generates a special version number. Then
+I say `reprepro-rebuilder --release` and the script takes care of preparing
+packages for unstable and bullseye-backports, and I can have my snapshots on
+all of my machines without a lot of work.