# Copyright 2008 Luis R. Rodriguez NAME = quickki VER = 0.0.1 KORG_URL = http://www.kernel.org/pub/linux/kernel/v KERNEL_VERSION = 2 KERNEL_PATCHLEVEL = 6 KERNEL_SUBLEVEL = 24 KERNEL_EXTRAVERSION = .4 KERNEL_MAIN_VER=$(KERNEL_VERSION).$(KERNEL_PATCHLEVEL).$(KERNEL_SUBLEVEL) KVER = $(KERNEL_MAIN_VER)$(KERNEL_EXTRAVERSION) KERNEL_DIR = linux-$(KVER) KERNEL_TAR = $(KERNEL_DIR).tar.gz KERNEL_BASE_URL = $(KORG_URL)$(KERNEL_VERSION).$(KERNEL_PATCHLEVEL) KERNEL_TAR_URL = $(KERNEL_BASE_URL)/$(KERNEL_TAR) KERNEL_NAME = linux-$(NAME)-$(KVER) BBOX_VERSION = 1.8.2 BBOX_DIR = busybox-$(BBOX_VERSION) BBOX_TAR = busybox-$(BBOX_VERSION).tar.gz BBOX_URL = http://busybox.net/downloads BBOX_TAR_URL = $(BBOX_URL)/$(BBOX_TAR) KERNEL_CONFIG_FILE ?= $(KERNEL_NAME).config BBOX_CONFIG_FILE ?= $(BBOX_DIR).config INITRAMFS = initramfs-$(NAME)-$(VER) INITRAMFSGZ = $(INITRAMFS).gz INITRAMFS_LIST = $(INITRAMFS).list GETMAC_DIR= getmac-1.0 # Where we get our build config files from CONFIG = config # Where the kernel and initramfs end up BUILD = build # What we'll build our initramfs rootfs from ROOTFS = rootfs # Where the tars are dl'ed and extracted SOURCE = src # Dump temp data TEMP = tmp # Add new libs as necessary, and move to uClibc ASAP LIB = /lib/ld-linux.so.2 /lib/libc.so.6 /lib/libm.so.6 /lib/libpthread.so.0 LIB += /lib/libdl.so.2 /lib/libcrypt.so.1 LIB += /lib/libnss_dns.so.2 /lib/libresolv.so.2 # This is what we could use once on uclibc UCLIBC = /lib/ld-uClibc.so.0 /lib/libc.so.0 /lib/libm.so.0 all: kernel initramfs dirs: install -d $(BUILD) $(ROOTFS) $(SOURCE) $(TEMP) bbox: get_bbox if [ ! -r $(SOURCE)/$(BBOX_DIR) ] ; then \ tar -xzf $(SOURCE)/$(BBOX_TAR) -C $(SOURCE); \ fi cp $(CONFIG)/$(BBOX_CONFIG_FILE) $(SOURCE)/$(BBOX_DIR)/.config sed 's|CONFIG_PREFIX=.*|CONFIG_PREFIX=\"../../$(ROOTFS)/\"|' \ $(CONFIG)/$(BBOX_CONFIG_FILE) > $(SOURCE)/$(BBOX_DIR)/.config $(MAKE) -C $(SOURCE)/$(BBOX_DIR) install getmac: make -C $(GETMAC_DIR)/ install DESTDIR=$(CURDIR)/$(ROOTFS)/ filesystem: dirs install -d $(ROOTFS)/tmp install -d $(ROOTFS)/var install -d $(ROOTFS)/var/log install -d $(ROOTFS)/log install -d $(ROOTFS)/var/run install -d $(ROOTFS)/lib install -d $(ROOTFS)/sbin install $(LIB) $(ROOTFS)/lib install -d $(ROOTFS)/etc install -d $(ROOTFS)/etc/init.d install -d $(ROOTFS)/proc install -d $(ROOTFS)/dev -sudo mknod -m 666 $(ROOTFS)/dev/urandom c 1 9 -sudo mknod -m 660 $(ROOTFS)/dev/console c 5 1 -sudo mknod -m 666 $(ROOTFS)/dev/null c 1 3 -sudo mknod -m 666 $(ROOTFS)/dev/tty0 c 4 0 -sudo mknod -m 600 $(ROOTFS)/dev/ttyS0 c 4 64 -sudo mknod -m 600 $(ROOTFS)/dev/ttyp0 c 3 0 -sudo mknod -m 620 $(ROOTFS)/dev/ptmx c 5 2 -sudo mknod -m 660 $(ROOTFS)/dev/hda b 3 0 -sudo mknod -m 660 $(ROOTFS)/dev/hda1 b 3 1 -sudo mknod -m 660 $(ROOTFS)/dev/hda2 b 3 2 -sudo mknod -m 660 $(ROOTFS)/dev/hda3 b 3 3 -sudo mknod -m 660 $(ROOTFS)/dev/sda b 8 0 -sudo mknod -m 660 $(ROOTFS)/dev/sda1 b 8 1 -sudo mknod -m 660 $(ROOTFS)/dev/sda2 b 8 2 -sudo mknod -m 660 $(ROOTFS)/dev/sda3 b 8 3 -sudo mknod -m 660 $(ROOTFS)/dev/sda4 b 8 4 sudo chown `id -u`:`id -g` $(ROOTFS)/dev/* cd $(ROOTFS) && ln -sf sbin/init init install -m 755 $(CONFIG)/rcS $(ROOTFS)/etc/init.d/ install -m 755 $(CONFIG)/udhcp* $(ROOTFS)/etc/ install -m 644 $(CONFIG)/passwd $(ROOTFS)/etc/ install -m 644 $(CONFIG)/group $(ROOTFS)/etc/ install -m 644 $(CONFIG)/services $(ROOTFS)/etc/ install -m 755 /bin/lspci $(ROOTFS)/bin/lspci install -m 755 /sbin/shutdown $(ROOTFS)/sbin/ echo "US/Eastern" > $(ROOTFS)/etc/timezone kernel: dirs get_kernel if [ ! -r $(BUILD)/$(KERNEL_NAME) ] ; then \ cp $(CONFIG)/$(KERNEL_CONFIG_FILE) $(SOURCE)/$(KERNEL_DIR)/.config ;\ $(MAKE) -C $(SOURCE)/$(KERNEL_DIR) -j8 bzImage; \ cp $(SOURCE)/$(KERNEL_DIR)/arch/i386/boot/bzImage \ $(BUILD)/$(KERNEL_NAME) ; \ fi # Note: current kernel expects init on initramfs on /init, not /sbin/init initramfs: dirs bbox filesystem getmac get_init_cpio rm -f $(BUILD)/$(INITRAMFS) $(BUILD)/$(INITRAMFSGZ) rm -rf $(ROOTFS)/usr/share/doc/ $(ROOTFS)/usr/share/man/ /bin/sh $(SOURCE)/$(KERNEL_DIR)/scripts/gen_initramfs_list.sh \ -u `id -u` -g `id -g` $(ROOTFS) > $(TEMP)/$(INITRAMFS_LIST) $(SOURCE)/$(KERNEL_DIR)/usr/gen_init_cpio \ $(TEMP)/$(INITRAMFS_LIST) > $(BUILD)/$(INITRAMFS) gzip -f -9 $(BUILD)/$(INITRAMFS) get_init_cpio: get_kernel if [ ! -f $(SOURCE)/$(KERNEL_DIR)/usr/gen_init_cpio ] ; then \ cd $(SOURCE)/$(KERNEL_DIR)/usr/ && make gen_init_cpio ;\ fi get_kernel: if [ ! -d $(SOURCE)/$(KERNEL_DIR) ] ; then \ if [ -f /usr/src/$(KERNEL_TAR) ] ; then \ tar -xzf /usr/src/$(KERNEL_TAR) -C $(SOURCE); \ else \ wget -P $(SOURCE) $(KERNEL_TAR_URL); \ tar -xzf $(SOURCE)/$(KERNEL_TAR) -C $(SOURCE); \ fi;\ fi get_bbox: if [ ! -r $(SOURCE)/$(BBOX_TAR) ] ; then \ wget -P $(SOURCE) $(BBOX_TAR_URL); \ fi clean: rm -rf $(BUILD) $(ROOTFS) if [ -d $(SOURCE)/$(KERNEL_DIR) ] ; then \ $(MAKE) -C $(SOURCE)/$(KERNEL_DIR) clean ; \ fi if [ -d $(SOURCE)/$(BBOX_DIR) ] ; then \ $(MAKE) -C $(SOURCE)/$(BBOX_DIR) clean ; \ fi $(MAKE) -C $(GETMAC_DIR)/ clean mrproper: rm -rf $(BUILD) $(ROOTFS) $(SOURCE) $(TEMP) .PHONY: all apt-get-update dirsbbox getmac \ filesystem kernel initramfs get_init_cpio get_kernelget_bbox \ clean mrproper