This is the web page of Andy Beverley, where I have put a variety of information that is either difficult to find on the web, or that I want as a handy reference for the future. There are also a couple of other pages at the end that do not fall into these categories! Feel free to email me [[andy@andybev.com]] ===== About me ===== Please either check out my [[http://uk.linkedin.com/pub/andy-beverley/15/162/941|LinkedIn]] page. ===== Build MariaDB with readline support ===== I've been frustrated with the use of editline (libedit) instead of readline that MariaDB is now built with in Debian 11. I have found editline to be buggy: its implementation of Ctrl-R and editing of wrapped lines do not work well, plus Ctrl-W not being mapping to delete a word by default is infuriating! As I understand it, Debian is no longer able to distribute MariaDB built against readline as the former is GPL2 and the latter GPL3, and apparently the 2 are incompatible for distribution. So I have written instructions for [[how to rebuild MariaDB against readline in Debian]]. ===== Building packages from later versions of Debian for earlier releases ===== I had a problem recently whereby [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=982998|a bug]] was fixed in a testing version of Debian (Bookworm) but had not been released to the current stable version (Bullseye). I decided to build the Bookworm version of the package for Bullseye: apt-get install dpkg-dev devscripts vim /etc/apt/sources.list # Enable source packages apt-get update apt source chkrootkit apt build-dep chkrootkit cd chkrootkit-0.55 dch --bpo # Update package version so as not to conflict debuild -uc -us ==== Example: building openarc package from experimental ==== Add experimental sources to ''/etc/apt/sources.list'': deb-src http://httpredir.debian.org/debian/ experimental main contrib apt-get build-dep openarc apt-get source openarc cd openarc-1.0.0~beta3+dfsg/ # Download additional patches cd debian/patches wget https://github.com/trusteddomainproject/OpenARC/pull/167.patch wget https://github.com/trusteddomainproject/OpenARC/pull/168.patch wget https://github.com/trusteddomainproject/OpenARC/pull/170.patch wget https://github.com/trusteddomainproject/OpenARC/pull/173.patch # Apply cd ../.. patch -p1 < debian/patches/167.patch patch -p1 < debian/patches/168.patch patch -p1 < debian/patches/170.patch patch -p1 < debian/patches/173.patch dch --bpo # Add letter to suggested version dpkg-source --commit debuild -uc -us ==== References ==== https://ostechnix.com/how-to-build-debian-packages-from-source/ https://unix.stackexchange.com/questions/112157/ Versioning info: https://www.debian.org/doc/debian-policy/ch-controlfields.html#version ===== Building Debian packages of Perl modules ===== On production servers, I much prefer to use Perl modules from Debian repositories, rather than installing from CPAN or using some sort of pinning technique. The advantage is that they are maintained upstream, are more stable, faster to install and easier overall to manage. Sometimes a Perl module is either not available in the main Debian repositories, or the version is too old (or I need a patch that has not made it upstream yet). In these circumstances I build my own Debian packages of Perl modules. Normally building a package is easy, but sometimes it can be a bit of an art. Read more about [[building Debian packages of Perl modules]]. ===== Disk performance tests ===== See https://askubuntu.com/a/991311 (regarding fio tool) Test for all-round read/write (worst performance): fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting Sequential read: fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting Sequential write: fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting Random read: fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting ===== JSON Web Tokens with Perl ===== Some examples of [[how to use JWTs with Perl]] ===== Bulk resizing images ===== # Maximum width 400px and max height 700px mogrify -resize '400x700>' *.png # Maximum width 400px mogrify -resize '400>' *.png ===== Comparing and normalising documents ===== Use this to compare PDF and word documents: * Same the word document as plain text * Use ''pdftotext'' to convert the PDF to plain text Use this Perl script to normalise each file: my $str = do { local $/; }; # Strip paragraph numbers $str =~ s/^[0-9.]+/\n\n/mg; # Remove wrapped lines that are not paragraph separators $str =~ s/(?