A minimal Linux system image that runs DHCP, SLAAC and vlmcsd.
Features:
-
Less than five megabytes in disk space (If you are using VHD or other formats, the size may be slighly larger. The whole system, however, consumes less than five megabytes.)
-
Less than 64 megabytes in memory usage (If you want to support NIC hotplug, that would require up to 128 megabytes of memory.)
-
UEFI and BIOS support.
Tech Specs:
-
Linux Kernel 5.13
-
Buildroot
-
musl
-
BusyBox Init
-
dhcpcd as network manager
Cons:
-
Currently there is no way to configure networking manually. All settings are retrieved using DHCP and SLAAC.
-
No logging facility. This means that any errors or warnings will be ignored.
-
No physical hardware support. This project is mainly used in my own environment, which is basically virtualized, so I only enabled drivers for VirtIO, VirtualBox and Hyper-V in the kernel configuration. If you are planning to install it physically, even though not recommended, you need to enable your drivers, which will eventually lead to a larger kernel.
-
Only x86-64 at this time.
For legal reasons, I am not providing pre-built binaries at this time.
You need a Linux system to build it. BSD and Cygwin are not tested.
-
Clone the repository including submodules.
-
Enter the
buildroot/
directory. -
make -jN BR2_EXTERNAL=../corekms_tree/ corekms_defconfig
-
make -jN
-
Wait for ten minutes (the time required to compile the whole project on my i5-4570 using j9. Yours may take longer or shorter, depending on you environment.)
-
Profit! The EFISTUB Unified Kernel is
output/images/bzImage
, feel free to rename it toBOOTX64.EFI
and put it in a disk image if you want. The BIOS ISO isoutput/images/rootfs.iso9660
using SysLinux. You may directly boot it with no installation required.
The system boots really fast (on my Hyper-V Server it takes less than one second). After booting, it will show the system state screen, indicating the uptime, whether VLMCSD is running, memory information and most importantly, IP addresses (in the ip-address(8)
format). The system will automatically acquire addresses using DHCP and SLAAC. As long as a new NIC is plugged in, it will setup that adapter as well, with no user interaction.
Press Enter at any time to refresh the status.
Shutdown: Just pull the plug. No data will be corrupted.
The project is splitted into:
-
BuildRoot: In the
buildroot/
directory, typemake nconfig
and edit the configuration. Usemake savedefconfig
to save your changes tocorekms_tree
for submission. -
Kernel: In the
buildroot/
directory, typemake linux-nconfig
and edit the configuration. Usemake linux-update-config
to save your changes to thecorekms_tree
for submission. -
BusyBox: In the
buildroot/
directory, typemake busybox-menuconfig
and edit the configuration. Usemake busybox-update-config
to save your changes to thecorekms_tree
for submission. -
The vlmcsd package: In the
corekms_tree/package/vlmcsd
directory, edit theConfig.in
andvlmcsd.mk
file.
The buildroot/
directory must be kept clean. All changes need to be reflected in the corekms_tree
directory.
Note on QEMU: Make sure to choose a CPU model. For example,
-cpu Skylake-Client-v1
.
WTFPL.
I am not responsible for your usage of this project and vlmcsd. I am not responsible for their legal consequences. I am not the author of vlmcsd.