Git Product home page Git Product logo

snacklinux's Introduction

logoSnackLinux

alt text

๐Ÿ’ป 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.


Intro


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)

Getting started


You can use prebuilt ISOs or compile from source. See Getting started to download ISOs and a quick start guide.

Compiling SnackLinux from source


Build system

  • Linux is preferable to build with

Debian

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*

  • 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

gcc

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++

Toolchain

Build your own

Compile your own toolchain with musl-cross-make

git clone https://github.com/richfelker/musl-cross-make.git

arm64

TARGET=aarch64-linux-musl make
TARGET=aarch64-linux-musl make install

x86

TARGET=i486-linux-musl make
TARGET=i486-linux-musl make install

TODO:x86_64

Toolchain installs to output/

Add the toolchain to your shell's PATH:

export PATH=$PATH:/path/musl-cross-make/output/bin

Building SnackLinux

After our toolchain is built, we can build SnackLinux which includes the kernel and user utilities.

Environment vars

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

Architechtures

TARGET=aarch64
TARGET=i486
TARGET=x86_64

Defaults to i486

Example, building for arm64:

export TARGET=aarch64 JOBS=4

Versions

See defs.sh for defined kernel and package versions

Getting started

  • 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

Compile individual packages

You can alternatively build the individual software and install at your will.

Linux

make kernel

musl

make musl

BusyBox

make busybox

Bash

make bash

Binutils (optional)

make binutils

Syslinux

make syslinux

Python (experimental)

make python

If you would also like to install binutils, use:

make binutils-install

stripping symbols

This target strips all debug symbols files matching LSB executable, shared object or ar archive

make strip-fs

additional packages

See building packages

Booting

Prerequisites:

Base files (/etc)

git clone https://github.com/snacsnoc/snacklinux-base.git
cp -R snacklinux-base/rootfs/* /opt/snacklinux_rootfs/

Create /dev files and required directories

Run as root:

bash ./tools/create_dev.sh

fbpkg (package manager)

git clone https://github.com/snacsnoc/fbpkg.git
cp fbpkg/src/fbpkg /opt/snacklinux_rootfs/usr/bin

Booting

ISO (x86)

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

qemu

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:

arm64:

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

x86:

qemu-system-i386 -cpu 486-v1 -m 256 -kernel bzImage -initrd rootfs.gz -append "root=/dev/ram rdinit=/sbin/init"

x86_64:

qemu-system-x86_64 -m 256 -kernel bzImage -initrd rootfs.gz -append "root=/dev/ram rdinit=/sbin/init"

Packages

Read the Packages page for building packages. For SnackLinux's package manager fbpkg, see here.

Hacking

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.

Contributing

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.

Thanks

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:

syslinux

linux

busybox

bash

fbpkg

binutils

musl

Resources

http://port70.net/~nsz/32_dynlink.html https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

snacklinux's People

Contributors

snacsnoc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

roterdam

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.