# you must have installed: cdrecord mkisofs perl gcc nasm wget make install cvs # $(ROOTDIR) should not be larger than 1.8GB to fit on a CD BOOTCD=$(shell pwd) MNT=/mnt/tmp URI=http://lsmod.de/bootcd DESTDIR=isodata ROOTDIR=linuxroot CDSPEED=4 COMPRESSION=6 # kernel version KVER=2.4.26 # syslinux version SVER=2.09 DEV=0,0,0 WGET=wget --passive-ftp -O- CDRECORD=cdrecord -tao -eject -v speed=$(CDSPEED) dev=$(DEV) BACKUPFILE=/tmp/bootcd-backup-1.tar.bz2 .EXPORT_ALL_VARIABLES: .SILENT: help #.PHONY: help: echo -e "first time: make init" echo possible targets are echo -e "make cd - compress initrd burncd\nmake rw - compress initrd burnrw" echo -e "make burncd\nmake burnrw\nmake iso\nmake backup\nmake initrd\nmake compress" echo "make kernel - after changing .config" all: initrdtemplate iso common: backup kernel compress initrd init: bin initrdtemplate linux cloop translucency busybox modifications bin: $(WGET) $(URI)/bin.tar.bz2 | tar xj rw: common burnrw burnrw: cd $(DESTDIR) ; $(BOOTCD)/bin/masterbootcd | $(CDRECORD) blank=fast - cd: common burncd burncd: cd $(DESTDIR) ; $(BOOTCD)/bin/masterbootcd | $(CDRECORD) - iso: common cd $(DESTDIR) ; $(BOOTCD)/bin/masterbootcd > $(BOOTCD)/bootcd.iso compress: cloop cd $(ROOTDIR) ; mkisofs -quiet -D -R . | $(BOOTCD)/cloop/compressloop -c $(COMPRESSION) -b 65536 -i 2040000000 - $(BOOTCD)/$(DESTDIR)/cloop.iso backup: tar cjf $(BACKUPFILE) Makefile bin linuxroot/home linuxroot/etc tar cjf $(ROOTDIR)/usr/src/bootcd.tar.bz2 {Makefile,bin,initrdtemplate} kernel: deps/have_kernel deps/have_kernel: bin deps linux linux/.config bin/mkkernel touch deps/have_kernel initrd: busybox initrdtemplate $(DESTDIR)/isolinux/isolinux.bin # update initrd dd if=/dev/zero of=initrd.img bs=512k count=3 mkfs -t minix -i 10000 initrd.img mkdir -p $(MNT) mount -o loop initrd.img $(MNT) cp -a initrdtemplate/* $(MNT) cd busybox ; make install PREFIX=$(MNT) $(MNT)/bin/dumpkmap > $(MNT)/lib/keyboard.map # cd /lib && cp -a ld-* libc.so.6 libdl* libm* libcrypt* $(MNT)/lib chown -R root. $(MNT) #ldconfig -r $(MNT) umount $(MNT) gzip -c9 initrd.img > $(DESTDIR)/isolinux/initrd mount -o loop $(DESTDIR)/isolinux/bootlin $(MNT) cp -a $(DESTDIR)/isolinux/{linux,initrd,bootmsg.txt,copyleft.txt,help.txt} $(MNT) umount $(MNT) deps: mkdir -p deps cloop: $(WGET) http://lsmod.de/bootcd/cloop-3.0.0-1.tar.gz | tar xz ln -s cloop-3.0.0 cloop ( cd cloop ; make KERNEL_DIR=../linux ) translucency: # $(WGET) http://www.informatik.hu-berlin.de/~wiedeman/development/translucency-0.6.0.tar.gz | tar xz # ln -s translucency-0.6.0 translucency cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/translucency co translucency ( cd translucency ; make ) uclibc: #$(WGET) http://www.de.kernel.org/pub/linux/libs/uclibc/uClibc-0.9.26.tar.bz2 cvs -z3 -d:pserver:anonymous@cvs.uclinux.org:/var/cvs co -D "2003-6-27" uclibc $(WGET) $(URI)/uclibc.config.bz2 | bzip2 -cd > uclibc/.config make -C uclibc all install busybox: uclibc # $(WGET) http://www.busybox.net/downloads/busybox-0.60.5.tar.bz2 | tar xj # ln -s busybox-0.60.5 busybox # $(WGET) $(URI)/Busybox.Config.h.bz2 | bzip2 -cd > busybox/Config.h #$(WGET) http://translucency.sourceforge.net/dl/busybox.config > busybox/.config -cvs -z3 -d:pserver:anonymous@busybox.net:/var/cvs co -D "2004-5-27" busybox $(WGET) $(URI)/busybox.config.bz2 | bzip2 -cd > busybox/.config PATH=/usr/i386-linux-uclibc/usr/bin/:$(PATH) make -C busybox oldconfig all initrdtemplate: $(WGET) $(URI)/initrdtemplate.tar.bz2 | tar xj $(WGET) $(URI)/isodata.tar.bz2 | tar xj - mv isodata $(DESTDIR) linux: # substitute a mirror near you $(WGET) ftp://ftp.de.kernel.org/pub/linux/kernel/v2.4/linux-$(KVER).tar.bz2 | tar xj ln -s linux-$(KVER) linux perl -i.bootcdbak -pe 'if(/int lockdoor =/){s/1/0/}' linux/drivers/cdrom/cdrom.c $(WGET) $(URI)/linux.config.bz2 | bzip2 -cd > linux/.config #$(WGET) ftp://ftp.de.kernel.org/pub/linux/kernel/people/alan/linux-2.4/$ver/patch-$v.bz2 > patch-$v.bz2 # cd linux ; bzip2 -cd ../patch-$v.bz2 ; patch -s -p1 cd linux ; make oldconfig dep $(DESTDIR)/isolinux/isolinux.bin: $(WGET) http://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-$(SVER).tar.bz2 | tar xj ln -s syslinux-$(SVER) syslinux - cd syslinux ; make cp -a syslinux/isolinux.bin $(DESTDIR)/isolinux/ $(ROOTDIR): mkdir -p $(ROOTDIR)/{mnt,tmp,initrd,proc,floppy,cdrom,home,root} chmod 1777 $(ROOTDIR)/{tmp} cp -a /bin /sbin /lib /boot /etc /opt /dev /var /usr $(ROOTDIR) modifications: deps/have_modifications deps/have_modifications: bin deps $(ROOTDIR) # I do only the necessary changes # if you want to make a real bootcd edit shadow,passwd,network,log files... ln bin/bootcd.* $(ROOTDIR)/etc/ bin/addbootcd $(ROOTDIR)/`grep ^si $(ROOTDIR)/etc/inittab | cut -d: -f4` #echo bootcd > $(ROOTDIR)/etc/HOSTNAME #distri dependant #echo 192.168.11.111 bootcd.local bootcd >> $(ROOTDIR)/etc/hosts - rm $(ROOTDIR)/{etc/mtab,usr/src/linux,dev/cdrom} touch deps/have_modifications distclean: - rm $(DESTDIR)/{cloop*,isolinux/{initrd,linux*}} dist: distclean tar cjf bin.tar.bz2 bin tar cjf initrdtemplate.tar.bz2 initrdtemplate tar cjf isodata.tar.bz2 $(DESTDIR)