Latest Posts (20 found)
neilzone 2 days ago

Enabling a user's processes to continue after the user disconnects their ssh session, using loginctl enable-linger

I set up Immich over the weekend , using rootless podman. An annoyance was that, when I disconnected from ssh, podman stopped running too. On an interim basis, I fudged it by opening a new session, and running podman within that. The “correct” solution, as far as I can tell, is to use for that user : Having done this, I can now disconnect from ssh, and the podman containers continue to run.

0 views
neilzone 3 days ago

My initial thoughts about Immich, a self-hosted photo gallery

I am looking to move away from Nextcloud (another blogpost at another time), and one of the things that I wanted to replace was a tool for automatically uploading photos from my phone (Graphene OS) and Sandra’s phone (an iPhone). At the moment, they are uploaded automatically to Nextcloud, although I’m not sure how well that works on Sandra’s iPhone. I also take a backup, using rsync to copy photos from the phones to an external drive , when I remember, which frankly is not often enough. But I did one of these backups ahead of installing Immich, which was useful. Lastly, I have a load of photos from the last 20 years, including our wedding photos, saved onto two different drives, and I wanted to add those to the hosted backup. I had heard a lot about Immich , with happy users, so I decided to give it a go. I did not really look around for alternatives. I already had a machine suitable to run Immich, so that was straightforward. Immich is, to my slight annoyance, only available via docker. I’m not a fan of docker, as I don’t understand it well enough. I can just about use it, but if there is a problem, I don’t have many skills beyond “bring it down then bring it up again”. I certainly haven’t mastered docker’s networking. But anyway, it is available via docker. So, naturally, I used and . I followed the official instructions , substituting “podman” for “docker”, and it worked fine. Since I am using an external drive to store the photo library, I configured that in the file. And there we go. Immich was running. For TLS termination, I use nginx, which I already had running on that machine anyway. The official suggested nginx configuration worked for http, but for whatever reason, I could not get it to work with to sort out a TLS certificate. I didn’t spend too much time debugging this, as I was not convinced I’d be able to get it to work. Instead, I started from the default nginx config, then used certbot, then put bits back in from the Immich-suggested config. I tested it with , to make sure I hadn’t somehow messed it up, and it was working, so fingers crossed. I set up an admin user, and then two normal users, for Sandra and me. I didn’t do any other specific configuration. Immich does not offer multi-factor authentication, which I find surprising, but ho hum, since it is an internal-only service, it is not a big deal for me. Perhaps I need to make Authelia or similar a future project. I set up the Android app, via F-Droid , and the iPhone app from the App Store. I decided to upload my Camera library without getting into albums, so there was no particular configuration other than choosing the Camera directory. Uploading ~3000 photos from my phone took a while, but it worked fine. For Sandra’s iPhone, I set it up, and set up the directory to sync, but I didn’t wait for it to upload. Instead - and for the other photos which I wanted to upload to Immich - I used the backup copy I had on an external drive. I used the command line tool immich-go for this. After creating both a user API key and an admin API key, I just left it to do its thing. I had to restart it a few times (and switch user API key for Sandra’s photos, to upload them to her account), but after a few runs, I had uploaded everything. I managed to upload all of my photos before I went to bed last night and, this morning, the server had created all the thumbnails, and done the facial recognition (not sure how I feel about this). I expect Sandra’s to be ready tomorrow. I have quite a few photos without a location, because they were taken many years ago on an old-fashioned digital camera. Batch replacement of location is reasonably straightforward, and I have not gone for the exact specific location, but at least the right town / city. I have fixed the date on some photos, but I need to go through more of them. 1 January is a very popular date. As far as I know, there is no way to fix incorrect orientation right now , but I think that that is coming pretty soon. So far, I am impressed. Despite docker, it was pretty straightforward to get running, and I am willing to chalk my problems with nginx down to me. I will probably use the web interface rather than the app, and that seems pretty good. Sandra will probably use the iOS app and, again, that seems fine. As long as it uploads photos automatically - which is something to test / keep an eye on - I suspect that we will be happy with it.

2 views
neilzone 1 weeks ago

Dealing with apt's warning 'Policy will reject signature within a year, see --audit for details'

I’ve noticed an increasing number of s result in a warning that: Running (as suggested), results in something like: My understanding is that - as the last line suggests - there has been a change in key-handling policy by apt, and that keys which were previously acceptable are (or, rather, will be) no longer acceptable by default. The “correct” way of solving this is for the repository provider to update their signing key to something which is compliant. However, I have no control over what a repository provider does, or when they will do it. For instance, the warning message above suggests to me that I will have a problem on 1 February 2026, so under a month away. I can suppress this warning - and tell apt to accept the key - by adding to : Or, to avoid having to add that each time, I can added a slightly-tweaked version of it to an apt config file, in . For instance, I can put this into : Hopefully though, repository providers will update their keys (which will then need re-importing).

0 views
neilzone 1 weeks ago

Removing .m4v files from my media server when an equivalent .mp4 file exists

For some reason, some of the directories on my media server have both .mp4 and .m4v versions of the same thing. I blame Past Neil for this. To save space, I wanted to delete the duplicate .m4v files. “Duplicate” here just means that the files have the same name but different extensions. This does not do anything clever/safe in terms of checking the .mp4 file is valid, is the right length etc. I was willing to take this risk. It might be possible to do all of this with a one-liner, of course. But this worked for me, and gave me a chance to eyeball the list of files at each point. I saved about 100GB of space :) One with .mp4 files, one with .m4v files, in each of the directories in : Because, to compare the lists, these need to be removed, to make the strings identical i.e. the files which exist as both .mp4 and .m4v. So that you have a list of the .m4v files, which are to be deleted.

0 views
neilzone 1 weeks ago

yt-dlp's --download-archive flag

Today, I learned about the flag for . From the readme : For instance: This means that, if the download stops working for whatever reason, you have a list of the files from the playlist which have been downloaded already. When you re-run the command, yt-dlp will not attempt to download the files, for which the IDs are already listed in archive.txt. Very handy! But what if you have already started downloading a playlist, and did not use the flag? You can create a suitable file, from the list of the directory of your downloads, although exactly how you do this will depend on your preferences for interacting with a computer. In the directory of the downloaded files, I used to get a file with the list of downloaded files. I then used vim’s integrated search-and-replace function to get the format right. This involved: (Yes, I could have down it with sed or awk, without vim. I did not.) downloads the files as usual adds the ID of each downloaded file to archive.txt (which is probably specific to archiving from YouTube)

0 views
neilzone 1 weeks ago

From proxmox to Raspberry Pi 4s again

I’ve been experimenting with proxmox for a few months now. And it was going pretty well, until Something Happened (as yet undiagnosed), which means that I cannot access the proxmox interface or ssh in. The containers on it are still running though. While I’d like to fix it - if only to understand why it crashed - I decided to move the things I cared about back onto Raspberry Pis (because that’s the hardware that I had to hand) for the time being. Restoring the services was easy, thanks to restic backups. This blog is now back onto a Pi, so if you can see this blogpost, it is working. I have one more service to move, and then I can start exploring the proxmox issue. Annoyingly, I have most of the hardware to run up a second instance of proxmox, with a plan for some basic level of failover, but I had not got around to setting it up.

0 views
neilzone 3 weeks ago

#FreeSoftwareAdvent 2025

Here are all the toots I posted for this year’s #FreeSoftwareAdvent. Today’s #FreeSoftwareAdvent - 24 days of toots about Free software that I value - is a off to a strong start, since you get not one, not two, not three, but four pieces of software: yt-dlp: command line tools for downloading from various online sources: https://github.com/yt-dlp/yt-dlp Handbrake: ripping DVDs you’ve bought: https://handbrake.fr/ SoundJuicer: ripping CDs you’ve bought: https://gitlab.gnome.org/GNOME/sound-juicer Libation: downloading audiobooks you’ve bought: https://github.com/rmcrackan/Libation Each is a useful starting point for building your own media library. Today’s #FreeSoftwareAdvent is Libreboot. Libreboot is a Free and Open Source BIOS/UEFI boot firmware. It is much to my chagrin that I do not have a Free software BIOS/UEFI on my machines :( https://libreboot.org/ Today’s #FreeSoftwareAdvent is Cryptomator. I use Cryptomator for end-to-end encryption of files which I store/sync on Nextcloud. It means that, if my server were compromised, all the attacker would get is encrypted objects. (In my case, my own instance of Nextcloud, which is not publicly accessible, so this might be overkill, but there we go…) https://cryptomator.org/ Today’s #FreeSoftwareAdvent is tmux, the terminal multiplexer. I know that tmux will be second nature to many of you, but I’ve been gradually learning it over the last year or ( https://neilzone.co.uk/2025/06/more-tinkering-with-tmux/) , and I find it invaluable. Although I had used screen for years, I wish that I had known about tmux sooner. I use tmux both on local machines, for a convenient terminal environment (from which I can do an awful lot of what I want to do, computing-wise), and also on remote machines for persistent / recoverable terminal sessions. https://github.com/tmux/tmux Today’s #FreeSoftwareAdvent is the Lyrion Music Server. While there are plenty of great FOSS media services out there, Lyrion solves one particular problem for me: it breathes life back into old Logitech Squeezebox units. What’s not to love about a multi-room music setup using Free software and reusing old hardware! :) https://lyrion.org/ Today’s #FreeSoftwareAdvent is forgejo, a self-hostable code forge. Although I use a headless git server for some things, I’ve been happily experimenting with a public, self-hosted instance of forgejo this year. I look forward to federation functionality in due course! https://forgejo.org/ Today’s #FreeSoftwareAdvent is Vaultwarden. Vaultwarden is a readily self-hosted alternative implementation of Bitwarden, a password / credential manager. It works with the Bitwarden clients. Sandra and I use it to share passwords with each other, as well as keeping our own separate vaults in sync across multiple devices. https://github.com/dani-garcia/vaultwarden Today’s #FreeSoftwareAdvent is all about XMPP. Snikket ( https://snikket.org/ ) is an easy-to-install, and easy-to-administer, XMPP server. It is designed for families and other small groups. The apps for Android and iOS are great. Dino ( https://dino.im/ ) is my desktop XMPP client of choice. Profanity ( https://profanity-im.github.io/ ) is a terminal / console XMPP client, which is incredibly convenient. Why not have a fun festive project of setting up an XMPP-based chat server for you and your family and friends? Today’s #FreeSoftwareAdvent is a double whammy of shell-based “checking” utilities. linkchecker ( https://linux.die.net/man/1/linkchecker; probably get it from your distro) is a tool for checking websites (recursively, as you wish) for broken links. shellcheck ( https://www.shellcheck.net/; available in browser or as a terminal tool) is a tool for checking bash and other shell scripts for bugs. Today’s #FreeSoftwareAdvent (better late than never) is “WG Tunnel”, an application for Android for bringing up and tearing down WireGuard tunnels. I use it to keep a WireGuard tunnel running all the time on my phone. I don’t do anything fancy with it, but if one wanted to use different tunnels for different things, or when connected to different networks, or wanted a SOCKS5 proxy for other apps, it is definitely worth a look. https://wgtunnel.com/ (And available via a custom F-Droid repo.) Today’s #FreeSoftwareAdvent is another bundle, of four amazing terminal utilities for keeping organised: mutt, an incredibly versatile email client: http://www.mutt.org/ vdirsyncer, a tool for synchronising calendars and address books: https://vdirsyncer.pimutils.org/en/stable/ khard, for interacting with contacts (vCards): https://github.com/lucc/khard khal, for interacting with calendars: https://github.com/pimutils/khal Use with tmux to get all you want to see on one screen / via one command :) Today’s #FreeSoftwareAdvent is LibreOffice. I know that I’ve included this in previous #FreeSoftwareAdvent toots, but I use LibreOffice, particularly Writer, every day. Better still, this one isn’t just for Linux users, so if you are thinking about moving away from your Microsoft or Apple office suite, you can give LibreOffice a try, for free, alongside whatever you use currently, and give it a good go before you made a decision. Today’s #FreeSoftwareAdvent is Kimai, a self-hostable time tracking tool, which I use to keep records of all the legal work that I do, as well as time spent on committees etc. It has excellent, and flexible, reporting options - which I use for generating timesheets each month - and there is an integrated invoicing tool (which I do not use). https://www.kimai.org/ Today’s #FreeSoftwareAdvent is another one which might appeal for ##freelance work: InvoicePlane which is - you’ve guessed it - an invoicing tool. I have used InvoicePlane for decoded.legal’s invoicing for coming up ten years now, and it has been great. Dead easy to back up and restore too, which is always welcome. I think that it is designed to be exposed to customers (i.e. customers interact with it), but I do not do this. Kimai (yesterday’s entry) also offers invoicing, but for whatever reason - I don’t remember - I went with a separate tool when I set things up. (I’ve also heard good things about InvoiceNinja, but I have not used it myself.) https://www.invoiceplane.com/ Today’s #FreeSoftware advent is EspoCRM, a self-hostable customer relationship management tool. I use it to keep track of my clients, their matters, and the tasks for each matter, and I’ve integrated various regulatory compliance requirements into different steps / activities. It took me a fair amount of time to customise to my needs, and I’m really pleased with it. https://www.espocrm.com/ Today’s #FreeSoftwareAdvent is espanso, a text expansion tool. You specify a trigger word/phrase and a replacement, and, when you type that trigger, espanso replaces it automatically with the replacement text. So, for instance, I have a trigger for “.date”, and whenever I type that, it replaces it with the current date (“2025-12-16”). It also has a “forms” tool, so I can trigger a form, fill it in, and then espanso puts in all the content - so great for structured paragraphs with placeholders, basically. I would be absolutely lost without espanso, as it saves me so many keystrokes. https://espanso.org/ Today’s #FreeSoftwareAdvent is text-mode web browser, links. Because, sometimes, you just want to be able to browse without all the cruft of the modern web. You don’t have to stop using your current GUI browser to give elinks, or another text-mode browser, a try. I find browsing with links more relaxing, with fewer distractions and annoyances, although it is not a good choice for some sites. Bonus: no-one is trying to force AI into it. https://links.twibright.com/user_en.html Today’s #FreeSoftwareAdvent is reveal.js, my tool of choice for writing presentations. I write the content in Markdown, and… that’s it. Thanks to CSS, tada, I have a perfectly-formatted, ready-to-go, presentation. It has speaker view, allows for easy PDF exports, and, because it is html, css, and JavaScript, you can upload the presentation to your website, so that people can click/swipe through it. Plus, no proprietary / vendor lock-in format. I have used reveal.js for a few years now, and I absolutely love it. I can’t imagine faffing around with slides these days. https://revealjs.com/ Today’s #FreeSoftwareAdvent is perhaps a very obvious one: Mastodon. I’ve used Mastodon for a reasonably long time; this account is coming up 8 years old. I run my own instance using the glitch-soc fork ( https://glitch-soc.github.io/docs/) , and it is my only social networking presence. “Vanilla” Mastodon instructions are here: https://docs.joinmastodon.org/admin/install/ If you want your own instance but don’t want to host it, a few places offer managed hosting. Today’s #FreeSoftwareAdvent is greenbone/OpenVAS, a vulnerability scanner. I use it to help me spot (mis)configuration issues, out of date packages (even with automatic upgrades), and vulnerabilities. It is, unfortunately, a bit of a pain to install / get working, but this script ( https://github.com/martinboller/gse ) is useful, if you don’t mind sticking (for now, anyway) with Debian Bookworm. https://greenbone.github.io/docs/latest/index.html Today’s #FreeSoftwareAdvent is F-Droid, a Free software app store for Android. I use the GrapheneOS flavour of Android, and F-Droid is my app installation tool of choice. https://f-droid.org/ / @[email protected] Today’s #FreeSoftwareAdvent are some extensions which I find particularly useful. For Thunderbird: For Firefox: Today’s #FreeSoftwareAdvent is Elementary OS. If I were looking for a first-time Linux operating system for a friend or family member, I’d happily give Elementary OS a try, as I have heard nothing but good things about it. Plus, supporting small projects doing impressive things FTW. https://elementary.io/ / @[email protected]. Today’s #FreeSoftwareAdvent is paperless-ngx, a key part of keeping us, well, paperless. It is a document management tool, but I use it in a very basic way: it is hooked up to our scanner, and anything we scan gets automatically converted to PDF and OCRd. We then shred the paper. It is particularly useful around tax return time, as it means I can easily get the information I need from stuff which people have posted to us. https://github.com/paperless-ngx/paperless-ngx yt-dlp: command line tools for downloading from various online sources: https://github.com/yt-dlp/yt-dlp Handbrake: ripping DVDs you’ve bought: https://handbrake.fr/ SoundJuicer: ripping CDs you’ve bought: https://gitlab.gnome.org/GNOME/sound-juicer Libation: downloading audiobooks you’ve bought: https://github.com/rmcrackan/Libation mutt, an incredibly versatile email client: http://www.mutt.org/ vdirsyncer, a tool for synchronising calendars and address books: https://vdirsyncer.pimutils.org/en/stable/ khard, for interacting with contacts (vCards): https://github.com/lucc/khard khal, for interacting with calendars: https://github.com/pimutils/khal F-Droid is an app, which provides an app store interface F-Droid, the project, also runs the default repository used by the F-Droid app But anyone can run their own repository, and users can add that repo and install apps from there (e.g. Bitwarden does this) Quick Folder Move lets me file email (including into folders in different accounts) via the keyboard. I use this goodness knows how many tens of times a day. https://services.addons.thunderbird.net/en-US/thunderbird/addon/quick-folder-move/ Consent-o-matic automatically suppresses malicious compliance cookie banners: https://addons.mozilla.org/en-GB/firefox/addon/consent-o-matic/ uBlock Origin blocks all sorts of problematic stuff, and helps make for a much nicer browsing experience: https://addons.mozilla.org/en-GB/firefox/addon/ublock-origin/ Recipe Filter foregrounds the actual recipe on recipe pages: https://addons.mozilla.org/en-GB/firefox/addon/recipe-filter/ Shut Up is a comments blocker, which makes the web far more pleasant, with fewer random people’s opinions: https://addons.mozilla.org/en-GB/firefox/addon/shut-up-comment-blocker/

0 views
neilzone 1 months ago

Bringing up a WireGuard tunnel automatically on boot using nmcli

I use WireGuard as my VPN protocol of choice. I want an always-on connection, from my laptop, to one of my WireGuard servers. To do this using , first list all connections: Then modify the relevant connection to enable autoconnect: This will bring the WireGuard tunnel up on boot.

0 views
neilzone 1 months ago

Calibre, AI, and one size not fitting all

I have used the eBook management tool Calibre for many years, supplementing its core functionality (of which I probably use only a tiny amount) with various plug-ins. In the release notes for 8.16.2 , Calibre introduced: Allow asking AI questions about any book in your calibre library. Right click the “View” button and choose “Discuss selected book(s) with AI” AI: Allow asking AI what book to read next by right clicking on a book and using the “Similar books” menu AI: Add a new backend for “LM Studio” which allows running various AI models locally I have found the various reactions to the introduction of “AI” most interesting. Some have been accepting, even supportive, liking the idea of being able to search using natural language. Some have welcomed the support for “local” AI, running on a user’s machine, without some of the privacy implications of the as-a-service tools. Others have been of the view that there’s no harm done anyway, since it requires enabling, without which it just appears in a few menus. Others have been… far less supportive. I’ve seen concerns about “normalising” AI, and concerns from creators who have been burnt by the appropriation of their works for training data. Someone has created a fork of Calibre called Clbre (“because the AI is stripped out”) . If nothing else, one has to admire the naming brilliance. Honestly, I wasn’t particularly keen either. I don’t really see why one would want “AI” in calibre, but that is quite a selfish perspective for a number of reasons, including that others may well have uses cases for which “AI” is beneficial to them (as opposed to my relatively simple use of calibre, and my preference for tools which do one thing, well), and, frankly, simply because I am not the author, and it is the author’s choice. I would also have preferred that, if AI support was to be implemented, it would be by way of a plug-in, so that users who do not want any kind of AI or AI-related language in Calibre do not get it, while those who want AI do. But, again, I’m not the developer. Adding “AI” to stuff is a divisive thing, and perhaps one cannot please all the people, all the time, but I’d have thought that keeping it separate from core code might have been a worthwhile approach. I wonder if there is a language aspect to this too, with more care needed to distinguish between different use cases and types of “AI”. Would that have made a different here? I don’t know.

0 views
neilzone 1 months ago

Adding a button to Home Assistant to run a shell command

Now that I have fixed my garage door controller , I wanted to see if I could use it from within Home Assistant, primarily so that I can then have a widget on my phone screen. In this case, the shell command is a simple invocation to a remote machine. (I am not aware of a way to add a button to an Android home screen to run a shell command or bash script.) Adding a button to run a shell command or bash script in Home Assistant was pretty straightforward, following the Home Assistant documentation for shell commands . To my configuration.yaml file, I added something like: The quirk here was that reloading the configuration.yaml file from within the Home Assistant UI was insufficient. I needed to completely restart Home Assistant to pick up the changes. Once I had restarted Home Assistant, the shell commands were available. To add buttons, I needed to create “helpers”. I did this from the Home Assistant UI, via Settings / Devices & services / Helpers / Create helper". One helper for each button. After I had created each helper, I went back into the helper’s settings, to add zone information, so that it appeared in the right place in the dashboard. Having created the button/helper, and the shell command, I used an automation to link the two together. I did this via the Home Assistant UI, Settings / Automations & scenes. For the button, it was linked to a change in state of the button, with no parameters specified. The “then do” action is the shell command for the door in question.

0 views
neilzone 1 months ago

Using gpioset and gpioget to control the gpio pins on a Raspberry Pi with a relay board under Debian Trixie

A couple of years ago, I bodged a web-controlled garage door opener with a Raspberry Pi . It worked fine, until I upgraded the Raspberry Pi in question to Debian Trixie. I noted that the relevant files in were no longer present, and some further research showed that this was an intentional change: In the upstream kernel, /sys/class/gpio (the sysfs interface) has been deprecated in favor of a device interface, /dev/gpiochipN. The old interface is gone from the kernel in the nightly Debian builds (bookworm/sid) for Raspberry Pi. So, unsurprisingly, my old way of doing things was not working. The documentation for the relay board has not been updated. Fortunately, after a bit of experimentation, I could get it working again using and . I could not find a way of stopping after a fixed period of time (I was expecting to do it, but it did not), so I ended up wrapping it in , which is also a bodge. Anyway, this is now what I am using:

0 views
neilzone 1 months ago

Using a2dismod apache2's mod_status which exposed information via a .onion / Tor hidden service

Earlier this week, I received a vulnerability report. The report said that, when accessing the site/server via the .onion / Tor hidden service URL, it was possible to view information about the server, and live connections to it, because of . is an apache2 default module, which shows information about the apache2 server on /server-status. It is only available via localhost but, because of the default configuration of a Tor .onion/hidden service, which entails proxying to localhost, it was available. The report was absolutely valid, and I am grateful for it. Thank you, kind anonymous reporter. It was easily fixed, made all the more annoying because I knew about this issue (it has been discussed for years) but forgot to disable the module when I moved the webserver a few months ago. One to chalk up to experience I have had a security.txt file in place on the decoded.legal website for quite a while now, but I’ve never had anyone use it. I asked the person who reported it to me if they had contacted me via it, but no, they had not.

0 views
neilzone 2 months ago

Perhaps I just stop reading the news?

I have been looking for a while for a reliable, online, text-based, source of important (subjective, I know, but to me that doesn’t include sport or celebrities or what is on TV) UK and world news, with a focus on reporting rather than analysis. At this point, I’ve basically given up; I don’t think that what I want exists, paid or free. But do I need to read “the news” anyway? I wonder what I really get from it, other than an increasing sense of despair and frustration. I get updates from key primary sources, through a combination of RSS and to monitor websites. I’m not concerned about missing a key regulatory or legislative update, which is important to me from a work point of view. I subscribe to 404Media, which I enjoy, although a more UK-focussed version would be amazing. I occasionally look at our local news site, when I can stomach the clickbait headlines. I think I’ve got more uBlock Origin filters set up for that site than for any other, in an attempt to make it usable. I’d rather hoped that there was a subscription option which does away with all the advertising, gives actually informative headlines and like, but no - it is an app-based offering, with an “ad-lite … experience”. I can see what people are discussing in the fediverse, where my filters for most party politics are pretty effective. But predominantly I enjoy the fediverse as a place to chat and have fun, not to be exposed to “news”. Having an appreciation of what is going on in the world, in a geopolitical sense, is also useful for my work, and that is a bit trickier. It is primarily for this that I’ve continued to read the BBC news, despite my increasing dissatisfaction with it. But perhaps it is time - even for just a test period - for me to stop reading “news sites”, and see how I fare.

0 views
neilzone 2 months ago

Downgrading Debian from testing to stable (trixie)

I have some machines running Debian testing. However, it looks questionable whether I would get through Cyber Essentials running testing (or sid/unstable) rather than stable. So I can either try to downgrade the machines, or else reinstall the OS. The official guidance is not to downgrade: No, it isn’t supported Instead, to wipe and reinstall. I am fully prepared to wipe and reinstall if needed - in other words, I’ve taken and tested backups - so I didn’t really have much to lose by trying a downgrade. The worst case scenario is that I end up wiping and reinstalling anyway. I took, and tested, backups first. I reverted my sources.list entry: I then pinned the stable repos: And then I did the downgrade, which took a few minutes: I actually ran it twice. And… it mostly worked. On one machine, I had to fix a few bits by hand: On another machine, it finished cleanly. I also had to set up my accounts in Thunderbird again, because of a change in profile syntax. Overall, this went a lot more smoothly than I had expected. (Obviously, perhaps, YMMV…)

0 views
neilzone 2 months ago

Migrating Mastodon (glitch-soc fork) to another Intel NUC

Some brief notes on a successful migration of my Mastodon server, running the glitch-soc fork) from one Intel NUC to another. Mostly in case I need to do it again! I set up the machine with Debian 13 stable with LVM and LUKS, and then ran my usual set-up / hardening script. I followed the official Mastodon installation instructions to get started. Once I had created the mastodon user, I then rsync’d the directory from my old server to my new server, rather than going through the installation. I also dumped and rsync’d from my old machine the postgresql database, and the redis database, following the Mastodon migration instructions . I moved across the nginx config, and the entirety of , although I could have generated new certs easily enough. I used the new systemd unit files. I then followed the glitch-soc update instructions . I finally adjusted DNS and added some temporary NAT rules to redirect traffic while DNS changes were propogating. When I set up my Mastodon server in early 2018, I started with a Raspberry Pi 3. I moved to a Raspberry Pi 4 ( some brief notes ) in 2021, I think. When I had about 5,000 followers, my Raspberry Pi-based setup started to struggle, and I moved to an old Intel NUC (i5-3427U, 8GB RAM). I don’t recall exactly when that was. That was great, but it has started to struggle recently (just over 9,000 followers, and a busy feed), and I have been running out of disk space on it, even with regular media purge cycles. So now it is running on a bit less old Intel NUC (i7-5557U CPU @ 3.10GHz, 16GB RAM), with some more space for my bad jokes.

0 views
neilzone 2 months ago

Using vimwiki as a personal, portable, knowledge base

A while back, I was looking for a tool to act as basically a semi-organised dumping ground for all sorts of notes and thoughts. I wanted it to be Free software, easy to keep in sync / use across multiple devices, I can use it offline / without a LAN connection, and it should render Markdown nicely. I looked at logseq, which looked interesting, but decided to give vimwiki a go. I spend a lot of my time in vim already, so this seemed like it would fit into the way I work very easily. And I was right. Since it is “just” a collection of .md files, it appeals to me from a simplicity point of view, and also makes synchronisation and backing up very easy. There are [multiple ways to install vimwiki]. I went for: and then adding the following to my (although I already had one of them): To add a new wiki with support for Markdown (rather than the default vimwiki syntax), I put the details into Then, I opened vim, and used to open the wiki. On the first use, there was a prompt to create the first page. The basic vimwiki-specific keybindings are indeed the ones I use the most to manage the wiki itself. For me, “ ” is “". Otherwise, I just use vim normally, which is a significant part of the appeal for me. The wiki is just a collection of markdown files, in the directory specified in the “path” field in the configuration. This makes synchronisation easy. I sync my vimwiki directory with Nextcloud, so that it propogates automatically onto my machines, and I can also push it to git, so that I can grab it on my phone. This works for me, and means that I don’t need to configure, secure etc. another sync tool or a dedicated sync system. There is support for multiple wikis, although I have not experimented much with this. Each wiki gets its own line in . You can use in vim to select which wiki you want to use. I really like vimwiki. It is simple but effective, and because it runs in vim, it does not require me to learn a different tool, or adjust my workflow. I just open vim and open my wiki. Prior to vimwiki, I was just dropping .md or .txt files into a directory which got synchronised, so this is not massively different, other than more convenient. Everything is still file-based, but with an increased ease of organisation. For someone who didn’t already use vim, it is probably a more challenging choice.

1 views
neilzone 2 months ago

Upgrading our time recording system from Kimai v1 to Kimai v2

I have used Kimai as a FOSS time recording system for probably the best part of 10 years. It is a great piece of software, allowing multiple users to record the time that they spend on different tasks, linked to different customers and projects. I use it for time tracking for decoded.legal, recording all my working time. I run it on a server which is not accessible from the Internet, so the fact that we were running the now long outdated v1 of the software did not bother me too much. But, as part of ongoing hygiene / system security stuff, I’ve had my eye on upgrading it to Kimai v2 for a while now, and I’ve finally got round to upgrading it. Fortunately, there is a clear upgrade path from v1 to v2 and It Just Worked. The installation of v2 was itself pretty straightforward, with clear installation instructions . I then imported the data from v1, and the migration/importer tool flagged a couple of issues which needed fixing (e.g. no email address associated with system users, which is now a requirement). The documentation was good in terms of how to deal with those. All in all, it took about 20 minutes to install the new software, and sort out DNS, the web server configuration, TLS, and so on, and then import the data from the old installation. I used the export functionality to compare the data in v2 with what I had in v1, to check that there were no (obvious, anyway) disparities. There were not, which was good! One of the changes in Kimai v2 is the ability to create customised exportable timesheets easily, using the GUI tool. This means that, within a couple of minutes, I had created the kind of timesheet that I provide to clients along with each monthly invoice, so that they can see exactly what I did on which of their matters, and how long I spent on it. For clients who prefer to pay on the basis of time spent, this is important. This is nothing fancy; just a clear summary on the front page, and then a detailed breakdown. I have yet to work out how to group the breakdown on a per-project basis, rather than a single chronological list, but I doubt that this will be much of a problem. I have yet to investigate the possibility for some automation, particularly around the generation of timesheets at the end of each month, one per customer. I’ll still check each of them by hand, of course, but automating their production would be nice. Or, even if not automated, just one click to produce them all. As with v1, Kimai v2 stores its data in MariaDB database, so automating backups is straightforward. Again, there are clear instructions , which is a good sign.

0 views
neilzone 2 months ago

Using LibreOffice and other Free software for documents as a lawyer

I was asked recently about how I get on using LibreOffice for document-related legal work, and I promised to write down some thoughts. The short answer is that I use a mix of LibreOffice and other FOSS tools, and I’m very positive about what I do and how I do it, with no particular concerns. (I’ve written more broadly about how I use Free software for legal work ; this blogpost is more specific.) This is about my experience. Yours might be different. You might not want to, or be able to, use, or try, LibreOffice (or vim, or git, or whatever). And that’s fine. I’m not trying to convert or persuade anyone. I do a lot of work which entails producing and amending, documents, and exchanging documents with others. This includes contracts, policies and procedures, and collaborative report writing. Occasionally, it means filling in other people’s forms. I use LibreOffice’s Writer for this. I use Writer pretty much every day, and have done for several years, with a wide range of clients and counterparties, including large law firms, small companies, and government departments, and I have no concerns, or significant gripes. I have made templates for my most common types of document, and I have styles set up to make formatting easy and consistent. (I don’t know why people produce documents without styles, but that’s just a personal gripe.) I have exchanged complex documents, usually with lots of tracked changes and comments, with many, many recipients, and I have had no problems with tracked changes, or people not being able to open documents or see what I have done. I’ve had a document recently where automatic numbering had gone wrong, and one where formatting was been messed up, but these were both documents which started life 5+ years ago, and I have not been able to identify whether this was a LibreOffice Writer issue, or a Word (or whatever tool others involved have been using) issue, or something else. In both cases, I fixed them rapidly and got on with things. I don’t know what Word is like recently, but when I last used it a few years ago, I found automatic numbering and formatting were mostly fine but occasionally a pain back then too, so perhaps this is just par for the course. I found Writer’s recent change to dark mode / theming a bit of a pain, but I seem to have resolved it now. For version control and documents, I don’t do anything fancy. I have a script which appends a date and timestamp to the beginning of the file’s name, and this works well. I get a directory of drafts, with clear naming / sequencing. I’ve experimented with git and documents, and while it sort of works to a point, it is not the right approach for me at the moment. Factors which might aid my positive experience: I do a lot of advisory work, where I produce reports, advice notes, and briefing notes. I don’t tend to use LibreOffice for this, preferring instead to use vim, writing in Markdown. For instance, this is how I prepared the new terms of service for mastodon.social / mastodon.online , and, on a friendly basis outside work, a draft vendor agreement for postmarketOS . This means none of the cruft of a document filetype, and it means that I can use git for version control in a way that actually works (unlike with documents). It also makes it easy to produce diffs. But it doesn’t work well for things like cross-referencing; it is not the right tool for the job. If the output needs to be a nicely-formatted PDF, I use pandoc and typst to convert the Markdown using a template . This makes producing a formatted document very easy, while letting me focus on the content. Some clients send and receive plain text / .md files (and, yes, you, who likes LaTeX files :)) and share .diffs, others prefer documents. Both are fine with me and I go with whichever works better for each client or each situation. I do not use Impress, the presentation tool, other than for viewing presentations which are sent to me. Instead, I use reveal.js for presentations , writing in markdown and presenting in my browser. I really like reveal.js. I can easily upload my presentations for people to view , and I can convert them to .pdf for distribution. I’ve not had to work on a collaborative presentation in the last 5+ years; I imagine that I’d have to use Impress, or a client’s hosted tool of choice, if someone wanted that. I use the spreadsheet tool, Calc, when I need a spreadsheet, which is not very often. It is mostly basic accountancy. For my limited uses, Calc has been absolutely fine, and I’m certainly not qualified to comment on it in any detail. Some clients want me to use their choice of hosted tools - Microsoft, Google Docs, Cryptpad, Nextcloud, etherpad, and so on. That’s fine; if a client wants to use them, and gives me access, I use them. All the ones that I’ve tried so far work fine in Firefox. I’m also happy to make PRs to, or commit directly into, a client’s git repositories. Over the past few years, I’ve hosted instances of Collabora (via Nextcloud), Cryptpad, and etherpad. All have had their pros and cons, and perhaps that’s something for a different blogpost. Most recently, I hosted etherpad, but right now, I’m not hosting any of these. I just don’t use them enough. I don’t depend on any third party plug-ins or integrations. I imagine that someone whose work depends on that kind of thing, then Writer might not be a good fit. I don’t do litigation, or anything which requires court filings.

0 views
neilzone 2 months ago

Stopping a kernel module from loading on boot in Debian Trixie using /etc/modules-load.d/

I am going through, upgrading my Debian machines from bookworm to trixie. On the whole, so far anyway, it has been pretty painless. But here’s something which needed some manual intervention. I have a couple of virtual machines still using VirtualBox. Yes, I know, but now was not the time to solve that part of the problem. They ran fine on a hypervisor running bookworm. After I had upgraded the hypervisor to trixie and started the virtual machine, I got an error: Sure enough, when I ran , the kernel module was loaded: Temporarily unloading it with did the trick. But that does not survive a reboot. Previously, I would have done something like . But says: It seems that the new (I don’t know how new) way to do things is to put a simple config file in : (It is a shame that the command uses “blacklist” in 2025.) And then I rebuilt the initramfs: . On rebooting the machine, that kernel module no longer loads automatically, and I can start my virtual machine.

0 views
neilzone 2 months ago

What goes on at a meeting of the Silicon Corridor Linux User Group in 2025

What goes on at a meeting of the Silicon Corridor Linux User Group in 2025 I found this post in my drafts, half completed. I am not really sure why I started it, but I did start it, some point earlier this year, so now I will finish it. I am a long time member of our local Linux user group, the curiously named Silicon Corridor Linux User Group (SCLUG) . (Its website looks much how you might expect the website of a Linux user group to look.) Given that we’ve only met in Reading for as long as I can remember, I guess that it is really the Reading And Thereabouts Linux User Group. RATLUG. I first went to a SCLUG meeting in around 2005, when I was back in the area after university. The group had an active email list, which was the primary means of communication. We met at the seating area in the front of a Wetherspoons (urgh). I think because the food was cheap. It certainly wasn’t because it was good. Or a pleasant place conducive to a good chat, given how loud and crowded it was. But it was fun , and it was enjoyable to chat with people developing, supporting, and using Linux (and BSD etc.). Meetings were well attended, and we often struggled for space. I stopped going for a quite a few years, both because I really wasn’t a fan of Wetherspoons, and also life got in the way. I started to go again just before the first Covid lockdown. It was still in Wetherspoons, but oh well. I think that I managed one meeting before everything was shut down. We moved online during the covid lockdowns, using jitsi as a platform for chatting. I rather enjoyed it. I particularly liked the convenience, of being able to join from home, rather than travel all the way to Reading for a couple of hours. But it was not a success from a numbers point of view, and while I liked the idea of people proposing mini-talks (as I like the idea of using the LUG as a place to learn things), that did not catch on. So now we are in 2025, and SCLUG keeps going. Times have changed, though. The mailing list is almost silent; we have a Signal group instead, but there is relatively little chat between meetings. We still meet in person, once a month, of a Wednesday evening. We have, finally, moved from Wetherspoons to another pub, thank goodness. The fact that meetings were in Wetherspoons were a significant factor in me not bothering to go, so I was keen to encourage a move to somewhere… better. At the moment, we meet in the covered garden area of The Nag’s Head and in the warmer and lighter months, it is quite pleasant. We’ve acknowledged that this is not going to be viable for much longer because of the weather, and the pub itself is small and noisy, so I suspect that we are back to looking for another venue. It is not a big group. I reckon that, on average, there are probably six or seven of us at most meetings. Visitors / drop-ins are very welcome; the Signal group is a good way of finding us, else look for the penguin on the table if I remember to bring it. “Meetings” sounds a bit formal, since it is just us sitting and chatting. There is no formality to it at all, really; turn up, have a chat, and leave whenever. I tend to be there a bit earlier than the times on the website, and leave not too late in the evening. The conversation tends to be of a technical bent, although not just Linux by any means. Self-hosting comes up a fair amount, as do people’s experiments with new devices and technologies, and chats about tech and society and politics etc. While I doubt that anyone who didn’t have an interest in such things would enjoy it, there’s certainly no expectation of knowledge/experience/expertise, nor any elitism or snobbery. I can’t say that I learn a huge amount - for me, it is definitely more social than educational. Even with a small number of people, I have to have enough social spoons left to persuade myself to go into Reading of a Wednesday evening for a chat. We have not done anything like PGP key signing, or helping people install Linux, or anything similar, for as long as I can remember. Yes, I think so. There are, of course, so many online places where one can go to chat about Linux, and to seek support, that an in-person group is not needed for this. To me, SCLUG is really now a social thing. A pleasant and laid back evening, once a month, to chat with people with complementary interests. It strikes me as of those things that will continue for as long as there are people willing and able to turn up and chat. Perhaps that will wane at some point…

0 views