# Makefile for building a FreeBSD diskless boot image IDENT = DISKLESS BUILD = $(IDENT) DHCP = dhcp-3.0.7 DHCPTGZ = $(DHCP).tar.gz DHCPURL = ftp://ftp.isc.org/isc/dhcp/$(DHCPTGZ) DHCLIENT = $(DHCP)/work.freebsd/client/dhclient RAMDISKSIZE = 16384 default: freebsd.kernel # Build the FreeBSD kernel (if necessary) $(BUILD)/kernel: kernel.config export HERE=`pwd` ; cd /sys/i386/conf ; config -d $$HERE/$(IDENT) $$HERE/kernel.config cd $(BUILD) ; make cleandepend ; make kernel # Compile dhclient $(DHCLIENT): wget -nv $(DHCPURL) tar xzf $(DHCP).tar.gz cd $(DHCP) ; ./configure ; make # Build the RAM disk image mfsroot: $(DHCLIENT) populate.sh init.c dd if=/dev/zero of=mfsroot bs=1k count=$(RAMDISKSIZE) sudo mdconfig -a -t vnode -u 0 -f mfsroot sudo newfs -m 0 md0 mkdir mfsroot.d sudo mount /dev/md0 `pwd`/mfsroot.d sudo ./populate.sh SRC=`pwd` DST=`pwd`/mfsroot.d DHCLIENT=$(DHCLIENT) df -h `pwd`/mfsroot.d sudo umount `pwd`/mfsroot.d sudo mdconfig -d -u 0 # Compile write_mfs_in_kernel write_mfs_in_kernel: write_mfs_in_kernel.c gcc -Wall -o $@ $? # Merge RAM disk into kernel then compress it freebsd.kernel: $(BUILD)/kernel mfsroot write_mfs_in_kernel cp $(BUILD)/kernel freebsd.kernel ./write_mfs_in_kernel freebsd.kernel mfsroot gzip freebsd.kernel mv freebsd.kernel.gz freebsd.kernel chmod 644 freebsd.kernel # Install to /tftpboot install: freebsd.kernel scp freebsd.kernel $(TFTPSERVER)/tftpboot # Clean out working files # Note that we leave the original kernel and write_mfs_in_kernel alone clean: -rm freebsd.kernel -rm write_mfs_in_kernel -sudo umount `pwd`/mfsroot.d -sudo mdconfig -d -u 0 -rm mfsroot -rmdir mfsroot.d # Clean out all working files reallyclean: clean -rm -rf $(DHCP) -rm -rf $(BUILD) # Return source tree to pristine state distclean: reallyclean -rm $(DHCPTGZ)