430 words
2 minutes
This is a simple, lightweight GUI-based Linux distribution designed to run on QEMU.
Anubhav Gain

Custom Linux Kernel and BusyBox Setup#

Welcome to the guide where we embark on a journey to build our very own custom Linux kernel and BusyBox, because why settle for pre-packaged when you can have it your way? Get ready to dive into the world of minimalistic and customizable Linux operating systems!

Step-by-Step Instructions#

Step 1: Install Dependencies#

First things first, let’s make sure we have all the necessary tools and packages. Run the following command:

Terminal window
sudo apt update && sudo apt install wget bzip2 libncurses-dev flex bison bc libelf-dev libssl-dev xz-utils autoconf gcc make libtool git vim libpng-dev libfreetype-dev g++ extlinux nano

Step 2: Download and Prepare the Linux Kernel#

  1. Download the Linux Kernel:

    Terminal window
    wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.9.4.tar.xz
  2. Extract the Kernel:

    Terminal window
    tar xf linux-6.9.4.tar.xz
    cd linux-6.9.4
  3. Configure the Kernel:

    Terminal window
    make menuconfig
  4. Compile the Kernel:

    Terminal window
    make -j 4
  5. Create a Directory for the Distro:

    Terminal window
    mkdir /distro
    cp arch/x86/boot/bzImage /distro/

Step 3: Set Up BusyBox#

  1. Download BusyBox:

    Terminal window
    cd ~
    wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
  2. Extract BusyBox:

    Terminal window
    tar xf busybox-1.36.1.tar.bz2
    cd busybox-1.36.1
  3. Configure BusyBox:

    Terminal window
    make menuconfig
  4. Compile and Install BusyBox:

    Terminal window
    make -j 4
    make CONFIG_PREFIX=/distro install

Step 4: Set Up MicroWindows#

  1. Clone MicroWindows:

    Terminal window
    git clone https://github.com/ghaerr/microwindows
    cd microwindows/src/
  2. Configure MicroWindows:

    Terminal window
    cp Configs/config.linux-fb config
    nano config
  3. Compile MicroWindows:

    Terminal window
    make -j 4
    make install
    make x11-demo
  4. Set Up a Sample GUI Application:

    Terminal window
    mkdir x11-demo
    cd x11-demo/
    nano gui.c
  5. Compile the GUI Application:

    Terminal window
    cd ..
    mv x11-demo /distro/
    cd /distro/x11-demo/
    gcc gui.c -lNX11 -lnano-X -I /microwindows/src/nx11/X11-local/
    mv a.out /distro/nirs-test-app

Step 5: Prepare the Distro Environment#

  1. Create Necessary Directories:

    Terminal window
    mkdir -p /distro/lib/x86_64-linux-gnu/
    mkdir /distro/lib64
  2. Copy Required Libraries:

    Terminal window
    cp /lib/x86_64-linux-gnu/libpng16.so.16 /distro/lib/x86_64-linux-gnu/libpng16.so.16
    cp /lib/x86_64-linux-gnu/libz.so.1 /distro/lib/x86_64-linux-gnu/libz.so.1
    cp /lib/x86_64-linux-gnu/libfreetype.so.6 /distro/lib/x86_64-linux-gnu/libfreetype.so.6
    cp /lib/x86_64-linux-gnu/libc.so.6 /distro/lib/x86_64-linux-gnu/libc.so.6
    cp /lib/x86_64-linux-gnu/libm.so.6 /distro/lib/x86_64-linux-gnu/libm.so.6
    cp /lib/x86_64-linux-gnu/libbrotlidec.so.1 /distro/lib/x86_64-linux-gnu/libbrotlidec.so.1
    cp /lib64/ld-linux-x86-64.so.2 /distro/lib64/ld-linux-x86-64.so.2
    cp /lib/x86_64-linux-gnu/libbrotlicommon.so.1 /distro/lib/x86_64-linux-gnu/libbrotlicommon.so.1
  3. Copy Nano-X Binaries:

    Terminal window
    cp -r /microwindows/src/bin /distro/nanox
    cp /microwindows/src/runapp /distro/nanox/

Step 6: Create the Bootable Image#

  1. Create and Format the Image:

    Terminal window
    cd /distro/
    truncate -s 200MB boot.img
    mkfs boot.img
    mkdir mnt
    mount boot.img mnt
  2. Install Extlinux:

    Terminal window
    extlinux -i mnt/
  3. Copy Files to the Image:

    Terminal window
    mv bin bzImage lib lib64 linuxrc nanox nirs-test-app sbin usr mnt
  4. Create Additional Directories:

    Terminal window
    cd mnt/
    mkdir var etc root dev tmp proc
  5. Unmount the Image:

    Terminal window
    cd ..
    umount mnt

Release Notes#

Simple GUI-Based Linux Distro - Version 1.0#

Overview: This release marks the initial version of our simple GUI-based Linux distribution, developed to run on QEMU. This distribution leverages the Linux kernel, BusyBox for essential Unix utilities, and Nano-X for graphical capabilities. This lightweight and efficient distro provides a basic graphical user interface and can serve as a foundational base for further customization and development.

Key Features:

  • Linux Kernel 6.9.4
  • BusyBox 1.36.1
  • Nano-X/MicroWindows
  • Sample GUI Application (nirs-test-app)

Installation Instructions:

  1. Install dependencies.
  2. Download and compile the Linux kernel.
  3. Setup BusyBox.
  4. Setup MicroWindows.
  5. Prepare the distro environment.
  6. Create a bootable image.

Known Issues:

  • Limited GUI capabilities.
  • Hardware compatibility primarily tested on QEMU.

Future Plans:

  • Enhance GUI features.
  • Broader hardware support.
  • Provide detailed documentation.

Resources:

Acknowledgments: We extend our gratitude to the open-source community and the developers of the Linux kernel, BusyBox, and MicroWindows for their invaluable contributions.


_Contributors: @mranv


This is a simple, lightweight GUI-based Linux distribution designed to run on QEMU.
https://mranv.pages.dev/posts/simple-gui-linux-os/
Author
Anubhav Gain
Published at
2024-04-08
License
CC BY-NC-SA 4.0