atom
Linux Engineer's random thoughts
anisse.astier.eu · English
In which I babble about pet projects and rant about stuff I like. Linux engineer by day, I probably play too much video games on my occasional free time.
atom fediverse
https://anisse.astier.eu/feed/
- Last post
- May 20, 2026
- Posts in 24 h · 7 days · 30 days
- 0 · 0 · 0
- Our last check
- Answering
- Served from
- France
- Text score at discovery
- 16,372
- Format
- atom
- Community
- fediverse
Posts
What our queue read from this feed. Open one to read it here, or go to the site that published it.
- Replacing Debian keyscript with systemd socket activation for encrypted volumes
May 20, 2026 · original
In Debian (and Ubuntu), when using a LUKS encrypted volume with cryptsetup, there is a documented option in the manpage for /etc/crypttab called keyscript : it should allow the init system to launch a program and have its standard output used as a key to unlock a volume. But there is a catch: this option does not work, and even the manpage says as much: WARNING: With systemd as init system, this option might be ignored. At the time this is written (December 2016), the systemd cryptsetup helper doesn't support the keyscript option to /etc/crypttab. Only problem, in the 11 years since Debian integrated systemd , nothing changed on this front: systemd still does not support keyscript= . If you look at the bug reports from back then, you might see some suggestions of writing a systemd password agent , but I'm here to tell you there is no need, systemd has something even better: just use sock - Performance lessons of implementing lbzcat in Rust
Jul 23, 2025 · original
This was originally published as a thread on Mastodon . For fun I implemented lbzip2's lbzcat (parallel bzip2 decompression) clone in rust , using the bzip2 crate. Baseline: bzip2 vs bzip2-rs First, let's look at the baseline. The Trifecta Tech Foundation recently claimed that bzip2-rs had faster decompression than libbzip2's original C implementation . Is this true? Well, it depends... I'll do benchmarks using my own bzcat and comparing that with bzip3's original bzcat . All running on an M1 laptop running #AsahiLinux. The M1 CPU has both performance and efficiency cores. We'll run the benchmark on both, using hyperfine to do the comparisons. So, let's start with the most obvious, the performance cores; they make the most sense for a CPU-intensive task; on my systems those are CPU 4-7. We can see here that the promise of the Trifecta Foundation holds, as the rust implementation is about - Viewing adjacent French towns on Wikipedia
May 4, 2025 · original
It all started with this really simple nerdsnipe by Joachim (french) : How many clicks would it take to go from the Wikipedia pages of (southmost Metropolitan France town) Cerbères to (northmost France town) Bray-les-Dunes, using only Wikipedia's "adjacent communes links" ? Quite a simple question. Many surprises. Querying Wikidata So, we want to know how to go from one page to another, clicking links. This is a graph problem , where the nodes are towns, and edges are the links between adjacent towns. So we first need to get this graph of towns and their connections (edges). My first thought was simple, since this is on Wikipedia, why not query the structured data (more on that later) on Wikidata and see the result? Surely, a quick shortest-path on the resulting graph and it would quickly be done. Luckily there's a whole page on a Wikidata's wiki on how to query the french towns' data . - What I learned during Advent of Code 2023
Dec 27, 2023 · original
Advent of Code is an Advent calendar of small programming puzzles. I participated in this year's edition , finishing it for the second time in row. The puzzles of all editions are always accessible. The principle is to read the problem, get a puzzle input (more or less tailored to your account), process it anyway you like (with code you wrote, most of the time), and then put the (short) result in the website for it to validate your answer. I wrote solutions in Rust again this year, so let's see what I learned about the language, trying to reveal as little as possible from this year's problems. Rust Tuples In Rust, tuples are comparable, hashable, and have default values . This is very handy to sort a list of tuples, or initialize them with Default::default() . This can be handy in order to write shorter code. Iterators I started this year with an idea of solving the puzzles (that could) - Closing the gap on fediverse hashtag visibility with hashtag-importer
Oct 1, 2023 · original
I have released a small application, hashtag-importer , that users of a Mastodon instance can use to slowly import more content from low-traffic hashtags, into their instance (with their admin's permission). Why hashtag-importer In the fediverse, your server might not see all posts made by everyone; it should only see posts that appear in anyone's timeline. So if no one on your server follows a user, you won't see their posts, even if you're subscribed to a hashtag and they use that hashtag. If your Mastodon instance is small, you'll often have niche hashtags being unusable. For server admins, a simple solution is to use relays , and Mastodon supports it. But what if you're not admin ? That's where hashtag-importer comes in. How it works Most servers (but not all) have publicly-available hashtag timelines. You can use those to get new posts from hashtags of your interests elsewhere. But - February to April Gears emulator update
May 1, 2023 · original
Previously , I had a bug in my gears emulator , which I then fixed . But Sonic 2 still wasn't working, so let's see what went wrong there. Missing interrupt behaviour The Sonic 2 ROM wasn't starting at all, leaving an uninteresting black screen, which led me to suspect some kind of infinite loop. I said in the previous posts that I thought this loop could have been related to timings or interrupts. So I looked at how the game behaved in Emulicious, another (closed-source) emulator with great debugging capability. And I noticed something weird on my side of the emulation: after a HALT instruction (that shuts down the CPU similarly to running an infinite number of NOPs), the VDP interrupt would wake-up the CPU, it would be handled and return. But when returning it jumped straight into the previous HALT instruction (!), meaning it looped and never moved forward. I fixed this by implementing - January Gears emulator update
Jan 27, 2023 · original
Previously , I had a bug on my emulator with the way the map is rendered. With the bug How it should look like After I wrote the previous article, I posted it on the SMS power discord, asking for ideas on this corruption bug. Many great people chimed in. A question I had was if I could dump the tileset to look at the video ram of the VDP to find out if anything might be corrupted. Interlude: Tilesets A tileset is the list of tiles (sometimes called "patterns" or "characters") in memory that can be be used for background or sprites. On a typical Game Gear game, those live in the ROM, then are copied in Video RAM (VRAM) once the ROM is mapped in the address space. They can only be displayed by the VDP from the VRAM. The VRAM can hold 512 tiles, and each tile is 8x8 pixel. So I initially rendered the memory region in a 256x128 tileset (32x16 tiles) But the map looked weird, and someone righ - December Gears emulator update
Jan 3, 2023 · original
I wrote here about how I'm writing an emulator . How has it progressed ? Fixing a rendering bug with backgrounds In November I wrote on mastodon how I was tracking down a rendering bug. To track down this issue with weird data on screen, there was already too many messages, so it was very hard to find anything with printf debugging. So I added a border to every bg/sprite character, and encoded the pattern number in the border color. I didn't know if it would work but it looked fun: I then slightly changed the encoding in border color (zoomed for visibility): After that, I continued working on unrelated things. I took some time to play the game a bit more in the emulator, which finally gave me an epiphany. Once I had identified the issue, fixing was fairly straight forward. It was missing wrapping in x. This is because you can imagine the background in the Game Gear VDP as a torus: on thi - FOSDEM talks and emulation
Oct 15, 2022 · original
In 2019 I gave a talk at FOSDEM in Brussels on the "music portal" , a device I built for my children as a toy that plays music. I wrote about the first version in awk here . The talk revolved around the specifics of the Go language and how it was used to industrialize a prototype into reliable appliance with gokrazy . In 2021, I started working on an emulator ; it's one of those things I always wanted to do, and it finally seemed simple enough, with all the experience I had, from writing small assembly bots , improving the ESIL emulator (which relied on the capstone disassembler ), or working with qemu in my previous day job . I picked a platform from my childhood, and started typing during my summer break. I did not finish the emulator, but I had a somewhat working Z80 CPU in the end, and learned a lot from it. So I decided to share what I learned, but this time not with the focus on my - Keyboard layout adventures
Apr 23, 2021 · original
I've been using a french dvorak-like key layout, called bépo for about 13 years; sometimes, I need to hack things around to have it work everywhere, like when I wrote support for it android physical keyboards . GPD Win Max Adaptation I acquired recently a GPD Win Max , which is a descendant from netbooks crossed with a portable game console, and it quickly became my main computer (my old laptop was 10 years old, so it was indeed an upgrade). While it's a very capable little device, it has a very condensed keyboard, which does not make it easy to use, especially when typing in bépo: As you can see, it has been custom-designed for qwerty, and does not take into account other keyboard layouts. For example, there's no AltGr, and semicolon is hidden next to space. 60% keyboard owners would be right at home, if it were not for the lack of programmability of the layers. In bépo, semicolon maps - Blog update
Nov 13, 2020 · original
I recently updated the server where this blog is hosted, so I tought I'd do an update on the original post explaining the tech stack used to run it. Once in seven years shouldn't be too meta. The design First of all, kudos to Pascal Navière , a very talented polymath that did the design of this site(CSS, DOM structure, etc.), which I then modified. All bugs are therefore my own additions. Since launch, Pascal has found a career in software engineering. He has so many tricks up his sleeve, you would be surprised. But it's not my place to tell his story. What I failed to mention initially, was all the icons done in CSS art, which was pretty rare at the time, and secret superpower of Pascal's. The icons are on the left (or bottom for lower resolutions), and in the share bar at the bottom of every article; some of which might be blocked by uBlock lists, and I decided to not work around it. D - Mass delete of Gmail emails
Aug 27, 2020 · original
Gmail used to be the reference for "infinite email storage". Not anymore. The space growth stopped, and then Google started selling storage space. It wouldn't be an issue if it were easy to mass delete emails; unfortunately batch delete operations can be quite long, and even lock you out of you inbox; using the UI, it might even regularly fail. I subscribe to many mailing lists, so I had hundreds of thousands of old emails to delete, I went looking for a new solution. For this I used Google Apps Script to run js code on Google's servers to do this delete operation. The goal is to delete the result of search, or a label. Here is the code to copy/paste in an Apps Script project: function deleteOldEmail () { var batchSize = 100 ; var threads = [ 0 , ]; while ( threads . length 0 ) { threads = GmailApp . search ( 'label:Lists-linux-kernel OR label:Lists-stable -{to:me OR from:me} before:2020 - The ability to work remotely in Embedded is a sign of software engineering maturity
May 20, 2020 · original
This has been brewing for a while, but I finally put it into words during this pandemic: if you're an embedded software engineer, the ability to work remotely (without the hardware next to you) is in fact a sign that you have reached a certain level of software engineering maturity. Automation Being able to automate your setup, opens the door to many things: first, automation frees the mind of the menial tasks. I've worked on projects where we had dedicated reset button on the board. Very fast to reboot, especially when you're writing bootloaders or debugging crashing kernel drivers. And very practical. But I couldn't be more wrong. What's needed is to control the power supply. A reset button is just a bonus, but you need to be able to control the power supply. And if the device does not power on automatically, you need a way to control that, too. On all the recent projects I worked on ( - A beginner hacker's guide to IPv6
Feb 2, 2020 · original
I noticed recently how little I knew about IPv6. For someone working on broadband gateways, that's not something I'm most proud of. But I've learned a little in the past few months, and I thought I'd share it here. How to read an IPv6 address: the zeroes are hidden An IPv6 address is 128 bits wide, and written in eight groups of 4 hex-digits, separated by colons, like this: 2001:41d0:0001:c38f:0000:0000:0000:0001 Leading zeroes are ignored, so the previous address can be written like this: 2001:41d0:1:c38f:0:0:0:1 And a sequence of one ore more groups that are all zeroes can be replaced with :: , so the previous address is canonically written like this: 2001:41d0:1:c38f::1 This is the address of this blog at the time of this writing. Put the address inside square brackets for URLs To reduce the confusion with the IP:PORT notation, the IPv6 in URLs is enclosed in square brackets for URLs: - 36th Chaos Communication Congress
Dec 28, 2019 · original
I’m at CCC for the first time this year ! Here my notes for a few of the talks. Tamago In an ideal world, one could pick the programming language of their choice and always generate the optimal machine code. But we live in the real world, and it isn't yet possible. Running code in a constrained environment, like baremetal SoCs means that your choice of languages is reduced, and towards low-level languages like C, which come with their own issues. The motivation for Tamago is to be able to run a higher-level language like Go on baremetal. The goal of the Tamago project is to run Go on baremetal ARMv7, for example to be able to write security-sensitive bootloaders (firmware) on an NXP i.MX6ULL based usbarmory . This isn't really a new idea, as Unikernels or library OSes often match the same description. But unikernels didn't match the requirements of depending on no C code (not importing a - Linux Security Summit Europe 2019
Oct 31, 2019 · original
Following my ELCE notes , you'll find below my notes for some of the talks the Linux Security Summit Europe 2019. Exploiting race conditions using the scheduler — Jann Horn The first bug Jann talked about is a race between mremap and fallocate. mremap allows moving a memory mapping from an address to another. The associated page table entries are moved as well, and then the TLB is flushed. fallocate allocates and de-allocates space for a file. It interactes with the page cache so it's possible to exploit a race between the page table modification and the TLB flushing. To widen the race-exploitation window, the scheduler is used. The approach is to pin two own tasks to the same CPU, and set on of the task to idle (low) priority; it's then possible to interrupt the idle task, even when it's inside the kernel, simply by having the other task being active. This is used to have a syscall take - ELCE, OS Summit and KVM Forum 2019 notes
Oct 30, 2019 · original
After a two years hiatus, I couldn't miss this year's ELCE happening in Lyon, the first in France since 10 years ago in Grenoble, which coincidentally was one of my first conferences. OS Summit and KVM forum events are co-located and with the same ticket, which is nice, and why I attempted a few talks there as well. Making device identity trustworthy with TPMs — Matthew Garett and Brandon Weeks For access to any internal Google Service (BeyondCorp), both the user and the device need to be authenticated. The devices that are allowed need to be well-known and inventoried. A device identity needs to be unique (serial number), bound to hardware and stable for the lifetime of the device. It also shouldn't be unforgeable and resistant to tampering. Existing solutions are inadequate: self-identification can be forged, keys on disk can be duplicated, and trust bootstrapping is hard, especially r - What are you working on ?
Oct 19, 2019 · original
This was previously published on LinkedIn Until very recently I couldn’t really answer this question. But it has shipped, so now I can tell you: I've been working on Edge Computing. To be more precise, this is the first compute service available to ISP subscribers directly on their ISP gateway. Those of you that read my LinkedIn profile know that I work on the consumer-facing boxes of the french ISP called Free, at the Iliad subsidiary called Freebox. Free is often credited as the inventor of ADSL triple-play, and has been making its own hardware with Freebox for almost 20 years now. The latest gateway/set-top-box triple play offer is called Freebox Delta and is relatively high-end; non-french readers can find a good overview of the Freebox Delta at Engadget. The gateway, Freebox Server, ships with RAID, 10Gbps support, wifi with 160Mhz bands, lots of NAS features, etc. And now it's firs - r2wars 2019
Sep 7, 2019 · original
You might have noticed I was at r2con 2019 . This is my writeup for the r2wars 2019 challenge. r2wars primer: a Core Wars-like game In radare2, there's an intermediate language and VM called ESIL. It is used to emulate code, and supports many architectures. r2wars is built on top of r2's ESIL VM, so it supports any ESIL instruction sets, for example x86-32, mips-32 or arm-64. Since it's based on Core Wars , in r2wars two opponents create "bots", short assembly programs, which are executed one after the other, in the same memory space, thanks to ESIL emulation. The goal is be the latest to survive; usually by wiping your opponent so that it executes and invalid instruction. The ESIL vm is initialized with a 1024 bytes memory space plus a stack (more on that later), and the two opponents are placed randomly in this space. They are executed in round-robin: one after the other, one instructi - r2con 2019
Sep 5, 2019 · original
I'm back in Barcelona for this year's edition of r2con . You can read my r2con 2018 report . radare2 is debugging and reverse engineering toolkit. It's mostly used from the command line or through a programming interface (r2pipe) that is identical to the command line one. Cutter Cutter is the official graphical user interface for radare2. It's cross-platform (written in C++ with Qt), and built on top of radare2. It has a dynamic graph view, a linear disassembly view, and an hexdump view for data, and other various widgets. During the last year, plugin support was added as well as a graph overview, a theme editor, and many new translations and bug fixes. A new entrant in the reversing landscape this year was Ghidra, a new tool with a particularly powerful decompiler. The decompiler part is now integrated directly into radare, with the r2ghidra-dec plugin. This plugin also works with cutte
Discovered by the rss-feed-index crawler, which checks each feed at most once a month.
Same record as JSON: https://api.agentalog.com/api/feeds/fd_anisse_astier_eu_8f9dfd099e010259. More from this site: anisse.astier.eu in the Feeds tab.