Developers Planet

22 July 2025

Marcin Juszkiewicz

Arm desktop: emulation

Whenever people use a non-x86 system, sooner or later someone asks: “But can it run [name of x86-64 only binary]?”. So, let’s check how to make it possible.

Software stack

When you look for ‘how to run x86-64 apps on Fedora/Arm’, you usually end up with Asahi’s documentation about it.

It is a good thing to read to understand the stack. But if your Arm system runs a 4K page size kernel, then most of that documentation can be skipped. You would not need muvm nor binfmt-dispatcher packages.

What you need is FEX-emu, and nothing else, as it recommends all required components.

To make it easier, I recommend removing some of QEMU packages: dnf remove qemu-static-* so only FEX-emu will be used for running foreign architecture binaries.

Checking emulation

Installing FEX-emu should also install the Fedora/x86-64 rootfs. So, let check if emulation is working:

$ uname -m
aarch64

$ FEXBash "uname -m"
erofsfuse 1.8.9
<W> erofs: /usr/share/fex-emu/RootFS/default.erofs mounted on /run/user/1000/.FEXMount2262322-Fjd32T with offset 0
x86_64

If you have errors at this stage, then check what you have in the /usr/lib/binfmt.d/ directory. There should be only two files:

$ ls /usr/lib/binfmt.d/ -l
-rw-r--r--. 1 root root 198 07-13 02:00 FEX-x86_64.conf
-rw-r--r--. 1 root root 195 07-13 02:00 FEX-x86.conf

Geekbench 6

So, let me check speed of the emulated CPU. I ran Geekbench 6 on it:

CPU Information
  Name                  Neoverse N1
  Topology              1 Processor, 80 Cores
  Identifier            GenuineIntel Family 6 Model 166 Stepping 1
  Base Frequency        3.00 GHz
  L1 Instruction Cache  32.0 KB x 80
  L1 Data Cache         32.0 KB x 80
  L2 Cache              512 KB x 80
  L3 Cache              8.00 MB
  Instruction Sets      sse2 sse3 pclmul fma3 sse41 aesni avx avx2 shani vaes

Test results were awful:

  • Single core: 459
  • Multi core: 4110

That’s the level of an Intel Atom CPU from 2021. My AMD Ryzen 5 3600 has much better results.

Can it be better?

I asked FEX-Emu developers a few days ago with this kind of question. There are several Arm CPU features that can be used to make emulation faster:

Section Features
Crypto AES, CRC, SHA, PMULL
TSO emulation Apple Silicon TSO bit, LRCPC, LRCPC2, LSE2
Flags stuff AFP, FlagM, FlagM2
Atomic operations LSE
Misc FCMA, FRINTTS, RPRES, SVE, SVE_bitperm
Future RCPC3, CSSC, RAND

The Ampere Altra is an old, Arm v8.2 CPU. Its Neoverse-N1 cores are from 2019 and can support only a small subset of entries from the table above: all crypto ones + LSE and LRCPC.

Tips and tricks

After publishing post I got some additional hints from FEX-emu folks to make emulation a bit faster.

One is reducing precision of x86 FPU, second is disabling TSO. So my configuration file (“~/.fex-emu/Config.json”) looks like this now:

{
  "Config": {
    "RootFS": "/usr/share/fex-emu/RootFS/default.erofs",
    "X87ReducedPrecision": "1",
    "TSOEnabled": "0"
  },
  "ThunksDB": {
    "GL": 1,
    "Vulkan": 1
  }
}

This gave Factorio a visible speed-up. Cannot compare Geekbench results cause it crashes randomly after configuration changes.

Steam

Now that we have sorted out software, let’s start with games (because what else would you do with x86(-64) emulation?). Which usually means Steam.

First of all, we need Steam package. I took it from the RPM Fusion non-free page. The next step is installation. This is done without dependencies (those will be provided by the FEX-emu rootfs), and we need to tell RPM that the architecture of the package is not that important:

$ sudo rpm -i steam-1.0.0.82-3.fc42.i686.rpm --nodeps --ignorearch

The next step is the Steam installation, where we run it under emulation:

FEXBash steam

It can take some time, but at the end you should get the Steam window:

Steam
Steam

So now we are ready to play some games, right?

Factorio

As you may know from one of my previous posts, I am addicted to the the Factorio game. So how it goes on an Ampere Altra-based system?

Factorio
Factorio

Let me be honest: without tweaking FEX-Emu config it was unplayable. At least not with my saved games, in 3440x1440 resolution. What was 60/60 on a Ryzen 5 3600 went to 8-11/59.5 ;(

After tweaking FEX-Emu configuration Factorio started to be more playable. In areas with many robots it was running at 16-25 FPS and there were moments with close to 60/60 but it had to be close zoom to deserted area. I may consider attempt to finish game during 100 hours.

A funny story

A few days ago, @chenlin3 added Ninja build solution for EDK2 build system. I took a look at that change.

At first, I built the ALTRA8UD-1L2T firmware without using Ninja. It took 30 seconds (11 minutes of total CPU time). Then I did a run with Ninja. It took 2 minutes (72 minutes of total CPU time).

Hmm… It should be much faster. I retried and looked at the htop window. And I saw a lot of “FEXInterpreter” lines… So it was running in emulation.

I then replaced the x86-64 binary of Ninja with a symlink to the aarch64 one, and then it was a visible improvement.

I commented on the pull request with a NAK.

Is it worth using?

So, the final question is: “Is it worth using x86(-64) emulation at all?”…

I do not plan to use it much. I may try to play some older games like Torchlight II, which I managed to run once and then it stopped working.

by Marcin Juszkiewicz at 22 July 2025, 11:58

22 July 2025

Peter Czanik

Dealing with multiple syslog protocols in syslog-ng made easy

There are multiple syslog protocols with multiple variants. The new transport(auto) option of the syslog() source in syslog-ng allows you to support all TCP-based variants with a single source driver. When it comes to syslog, there are many transport options. RFC3164 describes the “legacy” or “BSD” syslog protocol, while RFC5424 refers to the “new” syslog protocol (which is also more than a decade old now… :-) ). RFC5424-formatted messages normally come with framing or octet counting (as per RFC6587), where messages are prefixed with the length of the message.

by Peter Czanik at 22 July 2025, 11:38

15 July 2025

Peter Czanik

POWER Is Not Just for Databases

The IBM POWER architecture is not just for database servers. While most people know it only for DB2 and SAP HANA, it is an ideal platform also for HPC or other high performance server applications, like syslog-ng. While all the buzz is around POWER 11 now, we have yet to see real-world testing results, as GA is still a few weeks away. You can learn more about POWER 11 at https://newsroom.

by Peter Czanik at 15 July 2025, 11:59

15 July 2025

Peter Czanik

FreeBSD audit source is coming to syslog-ng

Last year, I wrote a small configuration snippet for syslog-ng: FreeBSD audit source. I published it in a previous blog, and based on feedback, it is already used in production. And soon, it will be available also as part of a syslog-ng release. As an active FreeBSD user and co-maintainer of the sysutils/syslog-ng port for FreeBSD, I am always happy to share FreeBSD-related news. Last year, we improved directory monitoring and file reading on FreeBSD and MacOS.

by Peter Czanik at 15 July 2025, 11:20

07 July 2025

Marcin Juszkiewicz

Arm desktop: 2025 attempt, part one

Almost ten years ago, I tried to use an Applied Micro Mustang as a desktop. And it was painful.

Now, with my Altra-based system, I decided to try it again.

Hardware used

Compared to the Pinkiepie (the Mustang), Wooster (the current system) looks beefy:

component Pinkiepie Wooster
cpu model X-Gene 1 Altra Q80-30
core model X-Gene 1 Neoverse-N1
core arch v8.0 v8.2
core count 8 80
memory speed 1866 MHz 3200 MHz
memory amount 16 GB 128 GB
storage SATA SSD (500 MB/s) PCIe 4.0 NVME (6200 MB/s)
graphics card Radeon HD5450 Radeon RX6700XT
resolution 1920x1080 3440x1440

Both systems ran the latest, stable release of Fedora with the KDE desktop.

Generic use

I started by rsyncing my home directory from Puchatek (my x86-64 desktop) to Wooster (the AArch64 system). To have the same environment in both places. Of course, I had to replace a few binaries in the ~/.local/bin directory with their AArch64 equivalents. And I regenerated some Python virtual environments.

The desktop worked as before, Thunderbird fetched mail and sent it, files could be edited in Neovim-qt as before etc.

Films from the local NAS share worked just fine using the same “mpv” as on Puchatek.

Multimedia online

But then you realise that it would be nice to listen to some music. For several reasons, I am using Spotify for this. And their app is x86-64 only…

Firefox refused to play anything. So did Chromium. I Installed the “widevine-installer” package, ran one command and, thanks to binaries from ChromeOS, both web browsers started playing. But Firefox was stopping after each song, so I had to revert to Chromium for it. Widgets on the KDE Plasma desktop recognised it, and I had information and playback controls embedded in the top panel.

Films on streaming services

But what about films on streaming services? Well, let me create a table, as I was surprised by the results:

Streaming service Firefox Chromium
Amazon Prime Video Works Works
Disney Plus Works Works
Max Works Works
Netflix Fails (E100) Fails (E100)
YouTube Works, up to 4320p Works, up to 1440p*

Chromium

For Chromium it depends which build of it you are using. I used Fedora package and then was pointed to Flathub build of Chromium as better one.

Flathub’s Chromium plays 2160p videos on YouTube and does not have an option to choose higher resolutions so I could not test 4320p ones.

Again, let make a table of “Graphics Feature Status” information:

Entry Fedora build Flathub build
Canvas Software only Hardware accelerated
Direct Rendering Display Compositor Disabled Disabled
Compositing Software only Hardware accelerated
Multiple Raster Threads Enabled Enabled
OpenGL Disabled Enabled
Rasterization Software only Hardware accelerated
Raw Draw Disabled Disabled
Skia Graphite Disabled Disabled
TreesInViz Disabled Disabled
Video Decode Software only Hardware accelerated
Video Encode Software only Software only
Vulkan Disabled Disabled
WebGL Software only Hardware accelerated
WebGL2 Software only Hardware accelerated
WebGPU Disabled Disabled
WebNN Software only Disabled

WebGL

How does the 3D hardware acceleration situation look? I tested it with the WebGL Aquarium.

Amount of fish Firefox Chromium/Fedora Chromium/Flathub
1 75 18 75
1000 75 9 75
5000 42-71 4 29-37
10000 33-39 1 15-17

I do not remember numbers I got with the same graphics card in my x86-64 system.

To be continued…

I am planning to write a few more posts about using my Ampere Altra-based system as a desktop. So stay tuned.

by Marcin Juszkiewicz at 07 July 2025, 17:09

03 July 2025

Peter Czanik

openSUSE turned 20

Last week, I was in Nürnberg for the openSUSE conference. The project turned 20 years old this year, and I was there right from the beginning (and even before that, if we also count the S.u.S.E. years). There were many great talks, including a syslog-ng talk from me, and even a birthday party… :-) This year marks not just 20 years of openSUSE but also a major new SLES and openSUSE Leap release: version 16.

by Peter Czanik at 03 July 2025, 12:34

27 June 2025

Marcin Juszkiewicz

Bought myself an Ampere Altra system

In the hunt for a development machine, I got to the next phase. I did some shopping, and there it is: my own Ampere Altra-based system.

Why?

As you may have read in my previous post, I used several AArch64 systems for local development. And the latest one, an Apple MacBook Pro, is nice and fast but has some limits — does not support 64k page size. Which I need for my work.

Let’s go cheap

So I have decided to buy myself an Ampere Altra system. As cheap as possible.

AArch64 server parts

The only part I needed to buy brand new was a motherboard. And the only “affordable” one was AsrockRack ALTRA8BUD-1L2T, which was a product for data centres (so I was told).

Next, a used processor. At first, the idea was to buy a Q64-22 (64 cores, 2.2 GHz clock), but when the seller on eBay was not responding, one of my friends decided to upgrade his Altra systems and offered me a Q80-30 (80 cores, 3.0 GHz clock).

The CPU requires cooling. There are not many options for the LGA 4926 socket. I found an Arctic Freezer 4U-M in one of the online stores here in Poland and bought the only one they had.

Each computer needs memory, right? So I went with used ones again, as there is a huge market for used server parts. I bought eight sticks of 16GB each; the model is SK-Hynix HMA82GR7CJR8N-XN. It is not present on the official Ampere Altra memory Approved Vendor List.

Working fine (after re-seating three sticks):

DRAM populated DIMMs:
  SK0 MC0 S0: RDIMM[ad:80] 16GB 3200 ECC 2R x8 RCD[32:86] HMA82GR7CJR8N-XN
  SK0 MC1 S0: RDIMM[ad:80] 16GB 3200 ECC 2R x8 RCD[32:86] HMA82GR7CJR8N-XN
  SK0 MC2 S0: RDIMM[ad:80] 16GB 3200 ECC 2R x8 RCD[32:86] HMA82GR7CJR8N-XN
  SK0 MC3 S0: RDIMM[ad:80] 16GB 3200 ECC 2R x8 RCD[32:86] HMA82GR7CJR8N-XN
  SK0 MC4 S0: RDIMM[ad:80] 16GB 3200 ECC 2R x8 RCD[32:86] HMA82GR7CJR8N-XN
  SK0 MC5 S0: RDIMM[ad:80] 16GB 3200 ECC 2R x8 RCD[32:86] HMA82GR7CJR8N-XN
  SK0 MC6 S0: RDIMM[ad:80] 16GB 3200 ECC 2R x8 RCD[32:86] HMA82GR7CJR8N-XN
  SK0 MC7 S0: RDIMM[ad:80] 16GB 3200 ECC 2R x8 RCD[32:86] HMA82GR7CJR8N-XN

Ordinary parts

The rest of the parts are ordinary ones available in any random store.

Computer case

The case was a challenge. The ALTRAD8UD-1L2T is a “deep MicroATX” case which means I needed a case that can take an EATX motherboard (they are a bit deeper than ATX).

I looked through pictures in online stores and selected about 10 candidates. Then I started watching reviews and crossed several of them out. Usually because the holes for handling cables were too close to the edge of a board.

Finally, bought an Endorfy 700 Air case. It came with five 120mm fans (3 at the front, one at the rear, and one on the top). There was a lot of space behind the motherboard’s plate for cabling, and a fan splitter so I could connect all five case fans as one to the motherboard.

And the PSU compartment has an extra hole for PCIe power cables!

Power supply

The ALTRAD8UD-1L2T motherboard is expected to be powered by a 12V PSU only. There is no connection port for the ATX 24-pin plug. Instead, there is an adapter that takes only power-on and power-good signals from it and connects to the small 4-pin port on the motherboard.

There are three EPS12V connectors available. I used two of them. The MSI MPG A850G power supply I bought comes with two such cables and has an option for connecting the third one.

The rest

What else is needed? Some NVME for storage (Lexar LM790 2TB) and a random graphics card (Radeon Pro WX2100, remembering the old times).

And I was ready to build the system.

How does it look?

The motherboard feels small once the CPU cooler is mounted. And a low-profile graphics card is almost invisible:

Inside view
Inside view

The back side of the case shows where I hid the ATX 24-pin adapter and most of the cables.

Back side with cabling
Back side with cabling

Price

Of course, if I went cheap, then how cheap did it end up being?

Component Price in PLN
motherboard 4 068
CPU 1 341
CPU cooler 191
memory 696
case 395
power supply 529
NVME 522

In total: 7 732 PLN (around 1 800 EUR). About 500 EUR more than I anticipated at first.

The CPU upgrade to 80 cores was extra 100 EUR. Memory came from another seller, as the first one ended their sale before I was ready to buy, resulting in an extra 40 EUR to the cost.

At first, I wanted to have 2GB per core, but with the CPU upgrade, I would have needed to go to 256 GB, and that would have been another 250-300 EUR extra.

The case had a 30% discount due to a promotion, and the NVME came with 7% cashback.

Plans

My current plans for this system are:

  • install Fedora 42
  • create some VM instances:
    • RHEL 9/10
    • CentOS Stream 9/10
  • put a Radeon RX 6700XT inside and check whether it would work
  • try to use it as a desktop
  • do some crazy experiments

All Linux systems will have both 4k and 64k page size kernels.

by Marcin Juszkiewicz at 27 June 2025, 17:29

20 June 2025

Marcin Juszkiewicz

The hunt for a development machine

Since I started working on AArch64 in 2012, I had been searching for a hardware system capable of meeting my development needs at home.

Pinkie Pie

In 2014, I got Applied Micro Mustang for home use. I named it “pinkiepie” because I use cartoon-character names for all systems I manage. As both mustangs and ponies are types of horse, I decided that Pinkie Pie from My Little Pony was a good name.

This system served me for several years. With 8 cores, 32 GB RAM, and a SATA SSD for storage, it was enough to build RHEL, Fedora, Debian packages — both for AArch64 and 32-bit armhf.

It failed in 2020, was briefly operational again, but has remained non-operational since then.

Jagular

In 2021, I acquired Solidrun HoneyComb. With sixteen Cortex-A72 cores, 32 GB RAM, and SATA SSD from Pinkiepie, it served as my development machine.

Jagular’s name came from Winnie the Pooh, as this system was my own (unlike Mustang, which was Red Hat property).

Applejack

In 2023, I took a chance and replaced my work laptop with an Apple MacBook Pro. This gave me more modern Arm system with 10 fast CPU cores.

The system’s name came from My Little Pony again.

After the installation of Fedora Asahi Remix on the MacBook, I moved Jagular to storage. And sold it in 2025.

Radxa Orion C6

At the end of 2024, Radxa announced “World’s First Open Source Arm V9 Motherboard”. Several people sent me a link to it. I checked the details and decided to wait for any delivery of source code for this platform.

It took them months to release anything. An old (6.1.44) version of the Linux kernel, a copy of EDK2 sources with 23 megabytes of binary blobs.

The good part was that this SBC was capable of running mainline Linux in ACPI mode. Still, the situation regarding it was far from what their slogan promised…

There were “Arm V9” systems before it, so it was not “World’s First”. There were several blobs needed to run it, so it was not “Open Source”.

I was following discussions on their forum and had a feeling that the more I read, the more I postpone my order.

RHEL and 64k page size

After leaving Linaro, I started working on Red Hat Enterprise Linux (RHEL) again. And while most things can be tested in virtual machines on Applejack, some tasks require booting 64k page size kernels — which the Apple M1 Pro is not capable of doing.

As a temporary solution, I used remote boxes from the Red Hat lab, but it was not a good solution in the long term.

So I started searching again.

Ampere Altra?

In May 2024, I was one step from spending 3000 EUR on Ampere Altra-based workstation — the typical 64-core system with 128 GB of RAM.

I did not buy it because at that time I was looking at it as an Arm desktop. Which, at that time, it was far from — issues with AMD cards under Linux required patching the kernel with out-of-tree patches.

Time passed, and I looked at it from different perspective — as “a tool”.

You see — I split computer systems into two categories: tools and toys.

Tools

Computer systems that have to do their job are tools. My x86-64 desktop is a tool. The same with my x86-64 NAS, or my work laptop.

Those systems have their purposes and have to work. No tricks with firmware or operating systems, no self-built kernels.

Toys

Some of my computer systems are toys — I do not expect them to be stable, I do not keep any important data on them. This is where most of my Arm SBCs (Seriously Bad Computers) are.

FriendlyElec NanoPC-T6 LTS on my desk is a perfect example. At this moment, it is offline and waits for firmware reflashing because I flashed the wrong file two weeks ago. And many times I have run my own kernels on it to check some out-of-tree patches adding support for hardware features.

Ampere Altra then

In March, I decided to go and buy an Ampere Altra system. But this time, on a budget: a brand new motherboard, a used CPU, used RAM.

I got a few people interested, tried to find a way for some kind of discount and started ordering parts. During the next few weeks I will build myself yet another development machine. For my own use, at home.

But this will be another blog post.

by Marcin Juszkiewicz at 20 June 2025, 11:56

19 June 2025

Peter Czanik

The syslog-ng Insider 2025-06: arm64; PAM; testing

The June syslog-ng newsletter is now on-line: Installing nightly syslog-ng arm64 packages on a Raspberry Pi Working with One Identity Cloud PAM Linux agent logs in syslog-ng Testing the new syslog-ng wildcard-file() source options on Linux It is available at https://www.syslog-ng.com/community/b/blog/posts/the-syslog-ng-insider-2025-06-arm64-pam-testing syslog-ng logo

by Peter Czanik at 19 June 2025, 09:22

17 June 2025

Marcin Juszkiewicz

Using AI for language corrections

A few days ago, I was asked “Do you use AI?”. I also noticed some recent blog posts and emails about it.

So let me explain how I use AI on this blog.

Grammar stuff

If you look through this blog’s archives you may see how terrible my English grammar used to be (not that it is particularly good nowadays). Back in 2010 I started attending English lessons to improve both my grammar and vocabulary. And it paid off.

Still, my writing style can be described as ‘Hrw English’. I try to keep it British English rather than American (I learnt the British version throughout my formal education). My vocabulary includes words from American, Australian and other variants.

Let me ask ChatGPT

My previous post about my arm problem went through ChatGPT:

Take text below, fix grammar to British English and show changes side-by-side

So let take some examples from the result:

Original ChatGPT
Some time ago my right arm started to hurt. In the beginning it was a bit annoying but then got serious. So I went to orthopaedist. Some time ago, my right arm started to hurt. At first, it was a bit annoying, but then it became serious. So, I went to an orthopaedist.
MRI was the other thing. My daughter told me already that I need to be prepared for loud annoying noise. What I was not prepared was some shitty pop played over some shitty headphones. zOMG… The MRI was a different matter. My daughter had already told me to expect loud, annoying noise. What I wasn’t prepared for was some dreadful pop music played over equally dreadful headphones. zOMG…
I know that those headphones have to be as plastic as possible to survive inside of MRI machine but next time I will ask for not playing anything. I know the headphones have to be made entirely of plastic to survive inside the MRI machine, but next time I’ll ask them not to play anything.
BTW: Can anyone recommend some good Linux application for watching DICOM images (other than AlizaMS)? By the way, can anyone recommend a good Linux application for viewing DICOM images (other than AlizaMS)?
Most of cases are related to professional sport people. A group where I do not belong. Most cases are related to professional athletes—a group to which I definitely do not belong.
I promised my daughter some trips during summer vacations. One set of attractions will slip for 3rd time. I promised my daughter some trips during the summer holidays. One set of attractions will be postponed for the third time.

Review of suggestions

So what do we have here? Some vocabulary changes like “professional sport people” -> “professional athletes”, the usual missing “a/an/the”, more commas, work order changes etc.

I review the suggestions and choose some of them: vocabulary tweaks, missing articles and some word order changes. Most of the time I ignore punctuation related ones as I always had problems with commas — never mind which language I was writing in.

I am leaving several errors as they were — I wrote that text so let it show my mistakes instead of hiding them. And I prefer to use ‘some’ rather than ‘few/a few’ as I always forget when to use which ;D

Style variations

After some updates I got question:

Let me know if you’d like it shortened, rephrased in a more humorous or technical tone, or formatted for a specific blog engine like Hugo, Ghost, or WordPress.

Fun starts with mixing all of them:

updated text below. give me British English version, differences side-by-side and then more technical tone version and more causal one plus more humorous one. render markdown

Look how one sentence can change:

  • So, let me explain how I use AI on this blog.
  • In this post, I’ll outline how I integrate AI into the workflow of this blog.
  • So, here’s a quick explanation of how I use AI on this blog.
  • Yes, I use AI. But not for evil. Mostly.

Those are original, technical, causal, humorous versions.

I have to admit that the ‘more technical tone’ version was a bit too much for me. It looked completely different from my writing style. Anyway I read it twice and took some wording from it. The ‘more causal’ version looks what I could write but still not quite my style. And the humorous version is pure fun to read but nothing to copy from it.

Conclusion

Will I continue to use of AI on this blog? Probably yes. It gives me good suggestions and fixes some of my language/grammar mistakes. And I do not have to apply all the changes so text keeps my style.

Is it a way for other people? No idea but I recommend giving it a try and seeing it for yourself. The results can be interesting.

by Marcin Juszkiewicz at 17 June 2025, 11:04

11 June 2025

Marcin Juszkiewicz

I have a problem with arm

Some of my readers may say that I’ve always had a problem with Arm. The company, the architecture, the ecosystem etc.

But today I have some other problem. With arm.

Beginning

Some time ago my right arm started to hurt. At first, it was a bit annoying but then got serious. So I went to an orthopaedist.

Orthopaedist

Please stand up, please stand up” and then started moving my arms in various ways. We wrestled a bit, I did that “fasten your bra” move and the diagnosis was clear: I had a problem with my arm.

I received some sick leave and a list of imaging tests to do.

Imaging

I went through the standard imaging flow:

  • RTG (X-ray)
  • USG (Ultrasound)
  • MRI (Magnetic Resonance Imaging)

I visited a few places and received some optical media with images (and some in physical form).

The RTG and USG were simple. I have done them many times before.

The MRI was another matter. My daughter had already told me to be prepared for loud, annoying noise. What I was not prepared for was some awful pop music played through dreadful headphones. zOMG… I know that those headphones have to be as plastic as possible to survive inside the MRI machine but next time I will ask them to not play anything.

BTW: Can anyone recommend a good Linux application for watching DICOM images (other than AlizaMS)?

Second visit to orthopaedist

Looks like you have SLAP (Superior Labrum Anterior Posterior).” Yay…

Most cases are related to professional athletes — a group to which I definitely do not belong.

I think I need to rethink my life desk setup.

But first have to sort out stuff and how my summer time will look like. Rehabilitation, exercises, handling things with only one arm (not my dominant one).

So if you would like me to do something for you before September then consider postponing as I may not be ready for it.

Summer holidays

I promised my daughter some trips during summer break. One set of attractions will be postponed for 3rd time. We have some conventions to attend and they should be safe.

The trip to visit my mother will be more difficult. No way to drive a car means that I will have to rely on public transport. In area where it sucks. Should be fun (for some sick definition of “fun”).

by Marcin Juszkiewicz at 11 June 2025, 09:24

03 June 2025

Peter Czanik

Deprecating Java-based drivers from syslog-ng: Is HDFS next?

While most Java-based drivers have been deprecated in syslog-ng years ago, we have recently removed all of them in preparation to syslog-ng 4.9.0. Right now, the only Java-based driver remaining is HDFS, so we want to ask the syslog-ng community if the HDFS destination is still needed for them. Read more at https://www.syslog-ng.com/community/b/blog/posts/deprecating-java-based-drivers-from-syslog-ng-is-hdfs-next syslog-ng logo

by Peter Czanik at 03 June 2025, 10:43

27 May 2025

Peter Czanik

Testing the new syslog-ng wildcard-file() source options on Linux

Last year, syslog-ng 4.8.0 improved the wildcard-file() source on FreeBSD and MacOS. Version 4.9.0 will do the same for Linux by using inotify for file and directory monitoring, resulting in faster performance while using significantly less resources. This blog is a call for testing the new wildcard-file() source options before release. Read more at https://www.syslog-ng.com/community/b/blog/posts/testing-the-new-syslog-ng-wildcard-file-source-options-on-linux syslog-ng logo

by Peter Czanik at 27 May 2025, 13:20

21 May 2025

Peter Czanik

Working with One Identity Cloud PAM Linux agent logs in syslog-ng

One Identity Cloud PAM is one of the latest security products by One Identity. It provides asset management as well as secure and monitored remote access for One Identity Cloud users to hosts on their local network. Last year, I showed you how collect One Identity Cloud PAM Network Agent log messages on Windows and create alerts when somebody connects to a host on your local network using PAM Essentials. This time, I will show you how to work with the Linux version of the Network Agent.

by Peter Czanik at 21 May 2025, 13:16

19 March 2025

Mark Brown

Seoul Trail revamp

I regularly visit Seoul, and for the last couple of years I've been doing segments from the Seoul Trail, a series of walks that add up to a 150km circuit around the outskirts of Seoul. If you like hiking I recommend it, it's mostly through the hills and wooded areas surrounding the city or parks within the city and the bits I've done thus far have mostly been very enjoyable. Everything is generally well signposted and easy to follow, with varying degrees of difficulty from completely flat paved roads to very hilly trails.

The trail had been divided into eight segments but just after I last visited the trail was reorganised into 21 smaller ones. This was very sensible, the original segments mostly being about 10-20km and taking 3-6 hours (with the notable exception of section 8, which was 36km) which can be a bit much (especially that section 8, or section 1 which had about 1km of ascent in it overall). It does complicate matters if you're trying to keep track of what you've done already though so I've put together a quick table:

OriginalRevised
11-3
24-5
36-8
49-10
511-12
613-14
715-16
817-21

This is all straightforward, the original segments had all been arranged to start and stop at metro stations (which I think explains the length of 8, the metro network is thin around Bukhansan what with it being an actual mountain) and the new segments are all straight subdivisions, but it's handy to have it written down and I figured other people might find it useful.

by Mark Brown at 19 March 2025, 00:18

09 March 2025

Marcin Juszkiewicz

I built my first mechanical keyboard

About a year ago I wrote a post about a need for a good keyboard. And that I am thinking of making mechanical one.

During last week I built one.

Repetitive strain injury

Twenty years ago I had a problem with repetitive strain injury (RSI in short). Typing on normal PC keyboard was quite impossible for me. Someone recommended buying one of those “fancy” ergonomic ones. And that’s how I ended with Microsoft Natural Keyboard Elite.

Microsoft Natural Keyboard
Microsoft Natural Keyboard

It was a great help. Got used to layout and my RSI problems were going away. Then bought second one to have one at home and one at work.

Time passed, keycaps were worn up so I got another keyboard — you can read the story in last year post about keyboards.

Let’s get mechanical

During last year I looked at several keyboards. Checked KMK, QMK, ZMK and other solutions of keyboard firmware. Watched countless videos on how to make keyboard and read many articles about it.

One layout caught my eye: TGR Alice as it was quite simple ergonomic one. Then found Arisu which added cursor keys and did some other changes. And finally Adelheid which added function keys.

My Adelheid

As those layouts are available on MIT license I took Adelheid and altered its layout a bit:

  • added Meta key
  • moved Backspace to were it is on PC105
  • moved Backslash to above Enter key
My version of Adelheid
My version of Adelheid

Parts and costs

I had some parts already (ordered then to my MS4KMech project which I abandoned in meantime) and decided that my first keyboard will be as cheap as possible:

So cost of parts was about 20 EUR.

As a way to keep costs down I printed plate in two pieces (Ender 3 table size was a limit) and used some screws and plates to keep them together.

Soldering rows and columns

Mounted switches and started soldering. Simple diode to diode to create rows. And it is visible that I watched some video after first 3 rows of one half ;D

Instead of forming diodes I soldered them and then use small pliers to form rows. Later started cutting legs before soldering.

Columns were easier. Spool of kynar and stripping isolation using nails did the job.

First half of keyboard
First half of keyboard

Added a bunch of colour wires to be able to test did my soldering resulted in something working. Grabbed Raspberry Pico from a drawer, flashed it with QMK firmware and testing bench was ready:

Testing bench
Testing bench

And it almost worked! One key was not working. Turned out that diode was soldered in wrong direction. Happens.

For second half I took a bit different strategy. Decided to solder columns first as they took me more time than rows. Whole half went much faster then first.

Second half of keyboard
Second half of keyboard

Then all that left was finding a way to connect both halves (I did not wanted to make a split keyboard) and connect rows. I used pieces of old universal PCB and screws:

Both halves of keyboard
Both halves of keyboard

Connecting controller

I bought Ultimate Pico RP2040 especially for keyboard project months ago. Compared to Raspberry Pico this board had USB-C port and one line more (GP29). Also less GND pins so 17 GPIO lines are on one side. My keyboard has 16 columns so this allowed me to have all columns connected on one side of board and use second side connections for rows:

Final view of bottom side
Final view of bottom side

I may do not look nice but it works :D

Powering up

I flashed QMK and started testing. Turned out that one column is not working. Soldered wire and it was fine.

3 other keys were not working. One needed soldering but other ones looked fine.

QMK has a solution for it: “Console debugging”. I added a bit of code to keymap.c file:

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  // If console is enabled, it will print the matrix position and status
  // of each key pressed
#ifdef CONSOLE_ENABLE
    uprintf("KL: kc: 0x%04X, row: %2u, col: %2u, pressed: %u, "
            "time: %5u, int: %u, count: %u\n",
            keycode, record->event.key.col, record->event.key.row,
            record->event.pressed, record->event.time, record->tap.interrupted,
            record->tap.count);
#endif
  return true;
}

This allowed me to notice that both Enter and End keys are seen. Turned out that I wrote wrong row/column values for both of them.

Mistakes

I made some mistakes with this keyboard. They were expected as usual with first attempts.

First mistake: 2mm plate. Should had do 1.5mm to make switches keep better. Total thickness can be even 3-5 mm but with holes done in a way that switches hold properly. Also it may make keyboard less bendy.

Second ones - holes for stabilisers. I have a few 2u - 2.75u keys and they should get stabilisers. But I did holes in wrong way so the ones I have do not fit. Will see how it affects keyboard use.

Third one: soldering. I do not remember when last time I soldered so many points. So some of other are shitty. Just had to fix one more…

Tools

Community behind mechanical keyboards created many tools. Let me try to list ones I used.

First comes QMK firmware which allows to forget about programming microcontrollers as keyboard is done as simple JSON file and one C file with keymap definition.

Then Keyboard Layout Editor which allows to define layout of keys in any crazy way you want. Raw data from it is a base for several other tools.

Keyboard Firmware Builder is a simplest way to manage wiring of keyboard. You paste raw data from previous tool and start simplifying wiring. It can also generate ready to use QMK firmware images for several popular micro controllers (but no RP2040 I used).

Plate & Case Builder also takes layout data. And allows to choose switch/stabilizer types plus a bunch of other options. Then generates plate for your layout with option to download it in SVG, DXF, EPS file formats. I took SVG, extruded to 2mm and had a base plate for 3d printing.

Was it worth the time?

The question for the end: was it worth the time? I think that it was. Learnt new things, got something working. Something I did on my own. Sure, it is far from being perfect but gives me area for improvements.

I have two space keys and already see that for most of time I use right one. There are no layers defined yet and I have a key for it. Some keycaps may get replaced with other ones (like Calculator one next to left Space begs for lower one).

I have links to many interesting layouts so who knows, maybe I will make a new keyboard soon. Split, orthogonal one. With volume knob. Will see.

by Marcin Juszkiewicz at 09 March 2025, 13:37

04 March 2025

Marcin Juszkiewicz

Factorio is a drug

About seven years ago I visited friends. They were playing some game and told me that I may like it. I asked some questions, looked at their play etc.

Few days later I spent 70 PLN and bought Factorio.

3500+ hours later

Factorio
Factorio header in Steam

Beginning

The idea of Factorio is simple: you crash land on some planet and do everything needed to send rocket to the space. Mine resources, turn ore into plates into electronic components into assembly machines. And use those machines to build more of everything.

And walk around to look for more resources.

And fight local fauna as they do not like you or your effect on their planet. Pollution made by your factory speeds up their evolution so you need to develop stronger weapons etc.

Addiction

It is easy to get addicted to the game. You start game ‘for an hour’ in the afternoon and ‘one hour later’ you see sunrise through the window. And your legs remind you that you were sitting in front of computer for 12+ hours straight.

Been there, done that. Then learnt how to make pauses and how to put some limits.

Achievements

Like many games today Factorio has set of achievements. Most of them you get during normal play. Some require special preparations.

I remember doing “Getting on track like a pro” one. It requires building a locomotive within the first 90 minutes of the game. Done on second attempt cause I did not noticed that locomotive needs to be put on the rail and I went out of time on first attempt.

The one I liked the most was “Lazy bastard” where you can manually craft no more than 111 items. This requires counting each move at the beginning of the game as there are only 10 items reserve. Great way to learn how to make factory produce things.

Took me over six years to get all achievements.

15h
Finish within 15 hours base

Rocket ones

To win the game you need to send rocket to space. And there are three achievements for it:

  • No time for chitchat” if you finish within 15 hours
  • There is no spoon” if finished within 8 hours
  • So long and thanks for all the fish” if you send fish into space

And there is funny one — you can send yourself into space and game handles it properly. The way is to put vehicle (car, tank, locomotive) into a rocket and then ‘take a seat’ in vehicle. You get the usual animation of starting rocket but from different perspective ;D

8h
Finish within 8 hours base

Space Age DLC

In October 2024 Factorio team released 2.0 version of the game. And “Space Age” DLC.

I decided to play 2.0 first to see what changed first. And there were many changes! And new achievements :D

Took me some time but once I finished I bought “Space Age” DLC and started playing again. Without rush or pressure to get complex factory.

After 260 hours I finished but did not had a feeling that I won anything. In normal game you build a factory to send satellite to the space. In DLC you have to make a useless ship and send it “where no man has been before”.

But that does not give anything. Going to the “shattered planet” gives 12th science pack but it is needed only to speed up research.

Victory!
Victory in Space Age DLC

Mods

But basic game is just a piece of game. The most important piece of course but there are so many mods for Factorio…

Some are simple ‘quality of life’ ones, some are ‘why this is not in game’ (like Rate Calculator).

And there are complex ones like ‘Krastorio 2’, ‘Space Exploration’ or ‘Warptorio’ which change game, add lot of buildings, technologies, change winning requirements etc.

You can enable countless mods to make your game completely different. Easier, harder, more complex etc.

Multiplayer

One of things I like is multiplayer. I had own server where I played countless hours with friends. We did ‘Krastorio 2’, we did huge megabase.

Megabase
Multiplayer megabase

We rebuilt half of megabase after visit of biters — it was ‘rebuild or start from scratch’ moment and we decided that starting from scratch is boring. Turned out that rebuild took only few hours once we got all reactors running so electricity was not a problem.

Community

One of great things around Factorio is community. Modders, youtubers, speedrunners (I learnt many tricks watching speedruns), people on forums etc.

I remember how one day Factorio was misbehaving on my system. Everything else was working fine, problem was only visible when I played the game. Reported a bug, got contacted by someone from development team and we joined multiplayer game. Some minutes later I got “Please check stability of your system. Run memtest or something”. And few hours later memtest86 shown some issue with memory config.

Final words

Money spent on Factorio was the best spend cash when it comes to my game related expenses.

And there are still four achievements to get :P

by Marcin Juszkiewicz at 04 March 2025, 11:08

26 October 2024

Steve McIntyre

Mini-Debconf in Cambridge, October 10-13 2024

Group photo

Again this year, Arm offered to host us for a mini-debconf in Cambridge. Roughly 60 people turned up on 10-13 October to the Arm campus, where they made us really welcome. They even had some Debian-themed treats made to spoil us!

Cakes

Hacking together

minicamp

For the first two days, we had a "mini-debcamp" with disparate group of people working on all sorts of things: Arm support, live images, browser stuff, package uploads, etc. And (as is traditional) lots of people doing last-minute work to prepare slides for their talks.

Sessions and talks

Secure Boot talk

Saturday and Sunday were two days devoted to more traditional conference sessions. Our talks covered a typical range of Debian subjects: a DPL "Bits" talk, an update from the Release Team, live images. We also had some wider topics: handling your own data, what to look for in the upcoming Post-Quantum Crypto world, and even me talking about the ups and downs of Secure Boot. Plus a random set of lightning talks too! :-)

Video team awesomeness

Video team in action

Lots of volunteers from the DebConf video team were on hand too (both on-site and remotely!), so our talks were both streamed live and recorded for posterity - see the links from the individual talk pages in the wiki, or http://meetings-archive.debian.net/pub/debian-meetings/2024/MiniDebConf-Cambridge/ for the full set if you'd like to see more.

A great time for all

Again, the mini-conf went well and feedback from attendees was very positive. Thanks to all our helpers, and of course to our sponsor: Arm for providing the venue and infrastructure for the event, and all the food and drink too!

Photo credits: Andy Simpkins, Mark Brown, Jonathan Wiltshire. Thanks!

by Steve McIntyre at 26 October 2024, 20:54

11 October 2024

Steve McIntyre

Rock 5 ITX

It's been a while since I've posted about arm64 hardware. The last machine I spent my own money on was a SolidRun Macchiatobin, about 7 years ago. It's a small (mini-ITX) board with a 4-core arm64 SoC (4 * Cortex-A72) on it, along with things like a DIMM socket for memory, lots of networking, 3 SATA disk interfaces.

The Macchiatobin was a nice machine compared to many earlier systems, but it took quite a bit of effort to get it working to my liking. I replaced the on-board U-Boot firmware binary with an EDK2 build, and that helped. After a few iterations we got a new build including graphical output on a PCIe graphics card. Now it worked much more like a "normal" x86 computer.

I still have that machine running at home, and it's been a reasonably reliable little build machine for arm development and testing. It's starting to show its age, though - the onboard USB ports no longer work, and so it's no longer useful for doing things like installation testing. :-/

So...

I was involved in a conversation in the #debian-arm IRC channel a few weeks ago, and diederik suggested the Radxa Rock 5 ITX. It's another mini-ITX board, this time using a Rockchip RK3588 CPU. Things have moved on - the CPU is now an 8-core big.LITTLE config: 4*Cortex A76 and 4*Cortex A55. The board has NVMe on-board, 4*SATA, built-in Mali graphics from the CPU, soldered-on memory. Just about everything you need on an SBC for a small low-power desktop, a NAS or whatever. And for about half the price I paid for the Macchiatobin. I hit "buy" on one of the listed websites. :-)

A few days ago, the new board landed. I picked the version with 24GB of RAM and bought the matching heatsink and fan. I set it up in an existing case borrowed from another old machine and tried the Radxa "Debian" build. All looked OK, but I clearly wasn't going to stay with that. Onwards to running a native Debian setup!

I installed an EDK2 build from https://github.com/edk2-porting/edk2-rk3588 onto the onboard SPI flash, then rebooted with a Debian 12.7 (Bookworm) arm64 installer image on a USB stick. How much trouble could this be?

I was shocked! It Just Worked (TM)

I'm running a standard Debian arm64 system. The graphical installer ran just fine. I installed onto the NVMe, adding an Xfce desktop for some simple tests. Everything Just Worked. After many years of fighting with a range of different arm machines (from simple SBCs to desktops and servers), this was without doubt the most straightforward setup I've ever done. Wow!

It's possible to go and spend a lot of money on an Ampere machine, and I've seen them work well too. But for a hobbyist user (or even a smaller business), the Rock 5 ITX is a lovely option. Total cost to me for the board with shipping fees, import duty, etc. was just over £240. That's great value, and I can wholeheartedly recommend this board!

The two things that are missing compared to the Macchiatobin? This is soldered-on memory (but hey, 24G is plenty for me!) It also doesn't have a PCIe slot, but it has sufficient onboard network, video and storage interfaces that I think it will cover most people's needs.

Where's the catch? It seems these are very popular right now, so it can be difficult to find these machines in stock online.

FTAOD, I should also point out: I bought this machine entirely with my own money, for my own use for development and testing. I've had no contact with the Radxa or Rockchip folks at all here, I'm just so happy with this machine that I've felt the need to shout about it! :-)

Here's some pictures...

Rock 5 ITX top view

Rock 5 ITX back panel view

Rock 5 EDK2 startuo

Rock 5 xfce login

Rock 5 ITX running Firefox

by Steve McIntyre at 11 October 2024, 13:53

30 August 2024

Steve McIntyre

Party like it's 2024

It (was) that time of year again - last weekend we hosted a bunch of nice people at our place in Cambridge for the annual Debian UK OMGWTFBBQ!

can you BBQ gin??

Lots of friends, lots of good food and drink. Of course lots of geeky discussions about Debian, networking, random computer languages and... screws? And of course some card games to keep us laughing into each night!

beer anyone?

Many thanks to a number of awesome friendly people for again sponsoring the important refreshments for the weekend. It's hungry/thirsty work celebrating like this!

by Steve McIntyre at 30 August 2024, 17:24