Build a Tiny Linux That Boots in 2 Seconds
I still remember the first time I deleted a desktop environment and watched half my system vanish.
The package manager yelled “removing 1,432 dependencies.”
My Wi-Fi died, my fonts disappeared, and the machine never booted again.
That day taught me a lesson: most Linux installs carry around more baggage than a cross-country flight.
This post shows how I fixed that.
We’ll build a Linux system from zero—no systemd, no snap, no 50-font packages—just the parts you actually need.
Think of it as making your own sandwich instead of buying the deli’s triple-decker with everything on it.
Why Go Minimal?
Big distros are like moving vans: roomy, but they guzzle gas.
A minimal system is the motorcycle: small engine, still gets you there, and you feel every turn.
- Faster boots. My last build went from GRUB to shell in 1.8 seconds on a cheap laptop.
- Smaller attack surface. Fewer packages, fewer bugs.
- Absolute control. You choose each component. No mystery daemons.
What You Need
Nothing fancy—just a normal Linux box with basic build tools.
- gcc, make, wget
- about 2 GB of free disk space
- 30 minutes of patience
Ready? Let’s cook.
Step 1 – Grab the Ingredients
mkdir ~/tiny && cd ~/tiny wget https://kernel.org/pub/linux/kernel/v6.x/linux-6.10.tar.xz wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
Step 2 – Build the Kernel
tar -xf linux-6.10.tar.xz cd linux-6.10 make defconfig make menuconfig
In the blue menu:
- turn off everything you don’t need (Bluetooth, sound cards, exotic filesystems)
- turn on initramfs support so we can boot from RAM
make -j$(nproc)
Go grab coffee; this takes 5–10 minutes.
Step 3 – Build BusyBox (Your Userland)
cd ../ tar -xjf busybox-1.36.1.tar.bz2 cd busybox-1.36.1 make defconfig make menuconfig # Check “Build static binary” make -j$(nproc) make install
BusyBox drops everything into _install. That’s our tiny root folder.
Step 4 – Make a Root Filesystem
cd _install mkdir -p proc sys dev etc echo 'root::0:0:root:/root:/bin/sh' > etc/passwd cat > etc/inittab <We need two fake devices:
sudo mknod dev/console c 5 1 sudo mknod dev/null c 1 3Step 5 – Wrap It into an Initramfs
find . | cpio -H newc -o | gzip > ../initramfs.cpio.gzStep 6 – Boot with QEMU (Safe Test Drive)
cd ../ qemu-system-x86_64 \ -kernel linux-6.10/arch/x86/boot/bzImage \ -initrd initramfs.cpio.gz \ -append "console=ttyS0" \ -nographicSee the shell prompt? That’s your baby.
Typels. Notice howlsitself is BusyBox.
The whole rootfs is about 2.1 MB.Customize Later
Once you’re happy:
- Add dropbear for SSH (tiny SSH server)
- Compile musl for static C programs
- Try ARM by installing
arm-linux-gnueabihf-gccCommon Questions
“Will it break?”
If you boot with QEMU, nothing on your real machine changes. Rebooting the host brings back the old system—no harm done.“Can I install packages later?”
Yes. Static binaries work anywhere. For dynamic ones, build musl and addapkor compile what you need.“Is this 2025-proof?”
Kernel 6.10 already has new security hooks and better power saving. Re-build once a year and you’re golden.That’s it. You just built a Linux that boots faster than most televisions turn on.
Once you taste that speed, bulky distros feel like dial-up internet.
Enjoy the ride—and maybe delete a few old ISOs while you’re at it.