diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | Dockerfile | 4 | ||||
| -rw-r--r-- | Makefile | 59 | ||||
| -rw-r--r-- | docker-compose.yml | 7 | ||||
| -rw-r--r-- | initramfs_init | 10 |
5 files changed, 82 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cbc90a8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +external/ +build/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6e03a4b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM ubuntu:22.04 + +RUN apt-get update && apt-get install -y build-essential gcc make wget libssl-dev xorriso git bison flex libelf-dev bc libssl-dev dwarves binutils cpio zstd && apt-get clean + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c48c396 --- /dev/null +++ b/Makefile @@ -0,0 +1,59 @@ +EXTERNAL_DIR=external +BUILD_DIR=build +LINUX_DIR=$(EXTERNAL_DIR)/linux +LINUX_REPO=https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git +BUSYBOX_DIR=$(EXTERNAL_DIR)/busybox +BUSYBOX_REPO=https://git.busybox.net/busybox +INITRAMFS_INIT=initramfs_init + +.PHONY: all kernel initramfs iso run clean + +all: iso + +$(EXTERNAL_DIR): + @mkdir -p $(EXTERNAL_DIR) + +$(BUILD_DIR): + @mkdir -p $(BUILD_DIR) + +$(LINUX_DIR): $(EXTERNAL_DIR) + @echo "[yerba] cloning Linux kernel..." + git clone --depth 1 $(LINUX_REPO) $(LINUX_DIR) + +kernel: $(LINUX_DIR) $(BUILD_DIR) + @echo "[yerba] building kernel (default defconfig)..." + $(MAKE) -C $(LINUX_DIR) defconfig + $(MAKE) -C $(LINUX_DIR) -j$(shell nproc) bzImage + cp $(LINUX_DIR)/arch/x86/boot/bzImage $(BUILD_DIR)/bzImage + + +initramfs: busybox kernel + @echo "[yerba] creating initramfs..." + rm -rf $(BUILD_DIR)/initramfs + mkdir -p $(BUILD_DIR)/initramfs/{bin,sbin,etc,proc,sys,dev} + cp -a $(BUSYBOX_DIR)/_install/* $(BUILD_DIR)/initramfs/ + cp initramfs_init $(BUILD_DIR)/initramfs/init + chmod +x $(BUILD_DIR)/initramfs/init + cd $(BUILD_DIR)/initramfs && find . | cpio -o -H newc | gzip > $(BUILD_DIR)/initramfs.cpio.gz + +$(BUSYBOX_DIR): $(EXTERNAL_DIR) + @echo "[yerba] cloning BusyBox..." + git clone --depth 1 $(BUSYBOX_REPO) $(BUSYBOX_DIR) + +busybox: $(BUSYBOX_DIR) $(BUILD_DIR) + @echo "[yerba] building BusyBox..." + $(MAKE) -C $(BUSYBOX_DIR) defconfig + $(MAKE) -C $(BUSYBOX_DIR) -j$(shell nproc) + $(MAKE) -C $(BUSYBOX_DIR) CONFIG_PREFIX=$(BUSYBOX_DIR)/_install install + +iso: kernel initramfs busybox + @echo "[yerba] TODO: make this output an ISO when ready" + @echo "[yerba] Kernel located at $(BUILD_DIR)/bzImage" + @echo "[yerba] Initramfs located at $(BUILD_DIR)/initramfs.cpio.gz" + +clean: + rm -rf $(EXTERNAL_DIR) $(BUILD_DIR) + +run: iso + @echo "[yerba] booting in QEMU..." + qemu-system-x86_64 -kernel $(BUILD_DIR)/bzImage -initrd $(BUILD_DIR)/initramfs.cpio.gz -nographic -append "console=ttyS0" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..cd86a66 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,7 @@ +services: + builder: + build: . + volumes: + - .:/yerba + working_dir: /yerba + command: make iso diff --git a/initramfs_init b/initramfs_init new file mode 100644 index 0000000..0479358 --- /dev/null +++ b/initramfs_init @@ -0,0 +1,10 @@ +#!/bin/sh + +mount -t proc none /proc +mount -t sysfs none /sys +mount -t devtmpfs none /dev + +echo "Welcome to Yerba Linux!" +echo "You are now in a minimal BusyBox environment." + +exec /bin/sh |
