I thought the cloud was modern? The sad tale of the 32-bit world

IPv6. its a thing. Look it up. 128-bit IP's, enough that all your hopes and dreams can get their own IP.

Cloud? IPv4. 32-bit. Enough that we NAT multiple times for no really good reason.

But that is not the topic of today's learning/rant. Its about 'stat' and 64-bit-inodes. You see boys and girls, today I was having this intermittent problem. Some containers were just up and dying during their start script. No reason was given, just death. So I caught it, added a sleep, and shell'ed in. And here is the rabbit-hole I fell down.

You see, I was using busybox. Yes that mini-shell environment that runs on your home router. Its useful in other environments, particularly its the 'debug' shell of 'distroless'.

But for reasons most mysterious I was getting errors like:

ls: can't open '/': Value too large for defined data type

Hmm. Inconceivable.  it turns out that busybox is compiled without -D_FILE_OFFSET_BITS=64, meaning it can only handle 32-bit inodes. Its also compiled 32-bit making it somewhat dubious that it would 'just work' if this define were added (since off_t would presumably be 64-bit and the integer size would be 32).

Some more research googling lead to this issue.

tl;dr: busybox is not cloud native.

Leave a Reply

Your email address will not be published. Required fields are marked *