Tripping on LXD

By chimo on (updated on )

Don't mind me; I'm just jotting down a couple of issues I ran into while messing around with LXD.

fallocate

TL;DR: Alpine Linux container running in a storage pool setup on a ext3 filesystem is not a good combo (in some situations). ext4 is a working alternative.

At the moment, most of my containers are running the popular Alpine Linux distribution. When I tried running MariaDB (v10.3.15) for the first time, I ran into an error that said "InnoDB: Could not set the file size of './ibdata1'. Probably out of disk space" despite having plenty of free disk space. Searching for the issue returns this bug report on the Alpine Linux bug tracker. We'll get back to this in a moment.

Along the way, I was also trying to setup a beanstalkd instance, and that one was spitting out the following error at startup before dying: "filewopen: falloc /var/lib/beanstalkd/binlog.1: Not supported". Okay, so either beanstalkd and MariaDB have the same underlying bug, or the problem lies elsewhere. The above bug report has some more interesting information we should look at.

The first thing in the bug description mentions "Mariadb now is using native Linux fallocate for creating the ibdata file. It fails in alpine edge and alpine 3.8 running as containers.", some people in the thread mentioned a few settings that did not solve the issue in my case. Other people mentioned that their problem was due to the fact that they are using ZFS as a storage pool and ZFS doesn't support `fallocate`.

Since I'm just playing around with LXD, I mostly kept to the default settings during the initial setup, so I'm just using a directory structure on the host as a storage pool. That led me to wonder what kind of filesystem I was using (this server was first setup a long time ago). The answer to that was "ext3". Well, surprise-surprise, ext3 doesn't support `fallocate`. So the solution for me was to convert the host's filesystem from ext3 to ext4.

Unpack failed, Failed to run: unsquashfs

The other issue I ran into so far is the following error message when running `lxc launch` to create a new container: "Error: Failed container creation: Create container from image: Image create: Unpack failed, Failed to run: unsquashfs". A search for that led me to this bug report in the LXD tracker. The workaround in my case was to remove the "LimitNOFILE=infinity" instruction I had added as a systemd override to the lxd.service.

The host can’t communicate with the containers

So, I have a different LXD instance running at home. This one's networking is configured to use macvlan instead of the default lxcbr so that the containers look like any other machines on the network. That is, they receive an IP address via DHCP reservation from the home router (I prefer managing IP addresses, reserved or otherwise, in a central location instead of configuring static IP addresses on every container).

At some point I realized that while my other machines could communicate with the containers, the host machine running LXD could not. It turns out that, since the host machine was also getting its IP address via DHCP reservation, I had overlapping routes on the eth0 interface and the macvlan interface: default via 192.168.10.1 dev macvlan0 proto dhcp src 192.168.10.50
default via 192.168.10.1 dev eth0 proto dhcp src 192.168.10.42
192.168.10.0/24 dev macvlan0 proto dhcp scope link src 192.168.10.50
192.168.10.0/24 dev eth0 proto dhcp scope link src 192.168.10.42

Removing the routes from eth0 fixes it issue. To make the change permanent, I created /etc/dhcpcd.exit-hook (I'm using dhcpcd) and added the following content: ip route del default dev eth0
ip route del 192.168.10.0/24 dev eth0

Recent articles from blogs I follow

The Scunthorpe Problem

I was talking with a friend recently about an email of theirs running afoul (🐔) of another aggressive filter system, because they dared to to talk with someone called Dickson. I know right, they’re the absolute worst. For those unfamiliar, this is the The…

via Rubenerd November 21, 2024

In which Neil is surprised by the lack of an HDMI cable

Some modern technology decisions baffle me. Today, I was sitting in a meeting room. In the room was my friend, with her laptop. Her laptop has an HDMI port. Also in the room was a screen, onto which my friend wished to display her laptop’s desktop. The screen …

via Neil's blog November 19, 2024

Helm: JSON schema generation

Helm charts support the inclusion of a values.schema.json file to validate values.yaml. Documentation: https://helm.sh/docs/topics/charts/#schema-files A JSON schema is akin to defining the structure of and type-annotating a JSON file. It helps to “shift lef…

via not just serendipity November 14, 2024