Solving busybox crond hanging on Alpine Linux boot
I recently clean installed Alpine Linux 3.9.3 on my home router (more to come on that in a future post) and ran into a weird bug. Once I successfully installed Alpine and rebooted, the system would start and then hang for over a half hour(!) with the message "Starting busybox crond...". I tried downgrading to 3.8.0 without any luck. I did some quick Googling and didn't find anything about busybox crond hanging.
Stumped I headed over to the
#alpine-linux IRC and posted my situation there. A friendly user suggested it might have something to do with "entropy changes" and to switch the daemons in question to use
/dev/urandom. I didn't feel like switching the daemons was going to be a good long-term solution but I was intrigued by the entropy angle. I looked it up and stumbled upon this reply to a bug thread about "Startup hangs (aports: sshd?)":
After upgrading to [edge] i see a possibly endless hang upon startup, which seems to be caused by PRNG init.
random.trust_cpu=1as boot option.
Interesting. Entropy and boot time are related. Remember I had installed Alpine on a router: a headless PC without any I/O other than two Ethernet NICs and a SSD. Not much there for Linux to generate entropy with, especially since the default was to not trust my CPU.
I searched for entropy on the excellent Alpine wiki and found this page. This lead me to Haveged. Haveged is a service that generates additional entropy. I stared it up, enabled it to run at boot, and I no longer had any hang time at boot!
I later found this bug report that outlined my problem exactly. Turns out I was too focused on the
crond aspect of my boot problem and not the general delay in booting. Oh well, TIL.