💻 SnackLinux is an ultra minimal Linux distribution
🔧 Utilizing a recent 6.x kernel with BusyBox, musl and Bash
🔸 Built from scratch with a footprint of less than 20MB
📁 Bash-based package manager fbpkg
📦 x86 has 31 packages, including a working gcc toolchain and other GNU utilities
🔋 arm64 support
🐳 (in-progress) Docker support
Visit snacklinux.geekness.eu for downloads, wiki and more information about SnackLinux.
SnackLinux runs a barebone kernel with downloadable extra kernel modules.
The philosophy is to create a completely hackable Linux system using standard GNU utilities, controlled by makefiles. The system installs to a local directory, anything in there is included in the final build. Imagine Linux From Scratch but with a lot less features. If you've ever wanted to build your own Linux distribution in 30 minutes, this is the project you're after.
Initially the project was created to run on old 486 CPUs with the latest software, so SnackLinux is optimized for size and low RAM. The x86 bootable ISO is 7MB in size!
Archtechtures supported:
- arm64 (current, works)
- i486 (current, works)
- amd64/x86_64 (old, but works with effort)
You can use prebuilt ISOs or compile from source. See Getting started to download ISOs and a quick start guide.
- Linux is preferable to build with
apt-get install build-essential git libgmp-dev libmpc-dev flex bison bc
Optional:
apt-get install genisoimage #used for generating x86 ISO images
- Mac OS is incredibly difficult to get working alone to build the kernel, otherwise cross-compiling packages works
- An alternative to a tradtional VM is to use something like krunvm
arch -arm64 brew install gcc@12
If you have an alternate version of gcc installed, create symlinks:
cd /opt/homebrew/bin
ln -s gcc-12 gcc
ln -s g++-12 g++
Compile your own toolchain with musl-cross-make
git clone https://github.com/richfelker/musl-cross-make.git
TARGET=aarch64-linux-musl make
TARGET=aarch64-linux-musl make install
TARGET=i486-linux-musl make
TARGET=i486-linux-musl make install
Toolchain installs to output/
Add the toolchain to your shell's PATH:
export PATH=$PATH:/path/musl-cross-make/output/bin
After our toolchain is built, we can build SnackLinux which includes the kernel and user utilities.
JOBS
Set number of parallel jobs to create, defaults to 8
Example:
export JOBS=12
ROOTFS_PATH
Path to SnackLinux root filesystem, defaults to /opt/snacklinux_rootfs
TARGET=aarch64
TARGET=i486
TARGET=x86_64
Defaults to i486
Example, building for arm64:
export TARGET=aarch64 JOBS=4
See defs.sh
for defined kernel and package versions
- Download source tars and link
bash ./download_prereq.sh
-
Create target install directory
mkdir /opt/snacklinux_rootfs
-
Compile the kernel
make kernel
- Build musl, Bash and BusyBox
make system
- Install to
/opt/snacklinux_rootfs
directory
make install
Next step: booting
You can alternatively build the individual software and install at your will.
make kernel
make musl
make busybox
make bash
make binutils
make syslinux
make python
If you would also like to install binutils, use:
make binutils-install
This target strips all debug symbols files matching LSB executable, shared object or ar archive
make strip-fs
Prerequisites:
git clone https://github.com/snacsnoc/snacklinux-base.git
cp -R snacklinux-base/rootfs/* /opt/snacklinux_rootfs/
Run as root:
bash ./tools/create_dev.sh
git clone https://github.com/snacsnoc/fbpkg.git
cp fbpkg/src/fbpkg /opt/snacklinux_rootfs/usr/bin
Run make iso
to generate a bootable ISO. The output ISO will be in iso/
Run make iso-with-kernel
to generate a bootable ISO with the kernel in /boot
. The output ISO will be in iso/
Note: you do not have to have the toolchain to create the ISO
Create a gzipped rootfs by running:
cd /opt/snacklinux_rootfs/; find . -print | cpio -o -H newc --quiet | gzip -6 > ~/rootfs.gz
Then boot in qemu:
Linux:
qemu-system-aarch64 -M virt,highmem=off -kernel linux/arch/arm64/boot/Image -initrd rootfs.gz -append "root=/dev/ram" -m 256 -serial stdio -boot menu=off -cpu max -nodefaults -boot d -device virtio-gpu-pci -device virtio-keyboard-pci,id=kbd0,serial=virtio-keyboard
Mac OS (Apple Silicon):
qemu-system-aarch64 -M virt,highmem=off -kernel Image -initrd rootfs.gz -append "root=/dev/ram" -m 128 -boot menu=off -cpu max -nodefaults -boot d -bios "/opt/homebrew/Cellar/qemu/7.1.0/share/qemu/edk2-aarch64-code.fd" -device virtio-gpu-pci -device virtio-keyboard-pci,id=kbd0,serial=virtio-keyboard -accel hvf
Run a VNC server with qemu:
-vnc 12.34.56.78:0
qemu-system-i386 -cpu 486-v1 -m 256 -kernel bzImage -initrd rootfs.gz -append "root=/dev/ram rdinit=/sbin/init"
qemu-system-x86_64 -m 256 -kernel bzImage -initrd rootfs.gz -append "root=/dev/ram rdinit=/sbin/init"
Read the Packages page for building packages. For SnackLinux's package manager fbpkg, see here.
Edit anything in /opt/snacklinux_rootfs
, it is the root filesystem.
The kernel can also be recompiled to fit your needs.
The boot/isolinux
directory is where ISOLINUX resides, edit the menu to adjust to your needs.
SnackLinux is a personal project, but I welcome contributions from the community. If you have ideas, feedback, or code changes that can improve SnackLinux, your input is valued.
Mike Chirico for http://souptonuts.sourceforge.net/cdrom.htm
Tiny Core Linux distribution for inspiration and documentation http://tinycorelinux.net
Gregor Richards for the many Musl compiler scripts https://github.com/GregorR
Linux From Scratch for excellent documentation http://www.linuxfromscratch.org/
The Arch Linux wiki https://wiki.archlinux.org/
Rich Felker for creating musl-cross-make and make building so easy https://github.com/richfelker/musl-cross-make
Here are links to the software used in SnackLinux:
http://port70.net/~nsz/32_dynlink.html https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html