DietLinux -- Documentation
Introduction
DietLinux is a distribution based on dietlibc. It contains a 2.6.x linux kernel, and will never support older kernels that do not support for devfs and tmpfs. The boot process is optimized for small size, the upcoming 0.2-release should be able to boot from cdrom, floppy or usb-stick on all systems with at least 8mb of RAM.
I'm currently rewriting the documentation from scratch -- it was pretty much outdated and did not match my working copy at all. The new init system works under ideal conditions, and I'll be able to put up a preview cdrom pretty soon. It was just quite pointless to keey the old documentation up.
Boot
General stuff
With the upcoming 0.2-release the boot-process is the same for all media. I got rid of ramdisk images for the root filesystem completely, and shrinked the initrd-images to about 60k (uncompressed). A kernel can be used with the boot system if it has support for initrd, tmpfs and devfs.
You need to configure the bootloader to give the kernel some bootparameters:
- init=/linuxrc
- We use linuxrc to set up some stuff. It will execle() init later
- root=/dev/ram0
- The initrd is the final root. Though our linuxrc will change it.
- devfs=mount
- Only needed if you didn't tell the kernel at compile time to automatically mount devfs
- bootdevice=[]
- To come, hints for linuxrc from which device we booted
Bootup, the initrd phase
linuxrc, stage 1
The first part is handled in linuxrc. I'ts described here short for better understanding what's going on.
- linuxrc gets started by the kernel. Besides linuxrc we have two directories in our ramdisk -- /dev with mounted devfs and /rootfs
- linuxrc mounts a tmpfs at /rootfs
- linuxrc creates basic directories in the rootfs (namely dev and initrd)
- linuxrc chdirs to /rootfs, calls pivot_root and chdirs / chroots in the new root. After this we have the old contents of the initrd under /initrd
- linuxrc remounts initrd/dev under /dev, and mounts /proc. With the dev remount we've put the open /dev/console file into the right filesystem.
- linuxrc umounts /initrd with MNT_DETACH set. Most likely initrd will not unmounted immediately but when calling execle() to exec init
For more details please consult the apkg sources.
linuxrc, stage 2
We're now getting to the second stage, still powered by initrd. That's the first stage you can influence without modifying the linuxrc-sources.
- linuxrc creates all directories in the rootfs
- linuxrc mounts procfs and sysfs
- linuxrc inits the built-in packagesystem. This includes trying to find a (a dietlinux media must have a file called `dietlinux-media' in its root) es well es the name of the initial package to load (from dietlinux-media)
- linuxrc loads the initial package (the apkg package system) and execl()s apkg with param -t (starts bootstrap). Most likely /initrd gets freed here, so we have about 60k additional space from now on.
apkg stage
Now it's apkgs turn to bootstrap a package set to the rootfs
FAQ
Getting Information
There is currently one mailinglist for dietlinux. To subscribe, send an empty email to dietlinux-users-subscribe@lart.info
Versions
DietLinux version numbers are similar to the one of the Linux kernel: [major].[minor].[patchlevel], versions with even minor numbers are called `stable'. There is a rough `roadmap' for the stable versions, unstable subversions will be released every time I think I finished one of the things wanted for the next stable. Please note that an unstable version is constantly changing, while every change in a stable results in a new patchlevel number. Patchlevels in stable mean bugfixes, no new features.
The current unstable version is 0.1.1, 0.1.2 will be released soon and contain mainly a small but complete rescue system.
| 0.4 | complete rescue-system; selfhosting (i.e., contains gcc-toolchain, you can compile the whole system from CD-ROM); contains a ports-tree with all software used on the CD-ROM; contains a simple package system; may contain a bootloader that can be installed on harddisk (maybe grub); may contain a simple shellscript to copy all needed files to harddisk; |
| 0.6 | Contains grub as a bootloader; contains a tool for harddisk-installation; |
| 1.0 | Contains dietlibc 1.0 |
- Why is it named '`DietLinux', and not `GNU/DietLinux' or similar?
The most important reason: Because most of the userland is not from GNU. Judged by the importance/amount of software, I had to call it `Fefe/DietLinux' or `djb/DietLinux'. (Note: if one of the persons mentioned cannot live withou having their name in here, please drop me a note)