#!/usr/bin/make # # Make a schooltool livecd # # Bandwidth in kbps (I can't go any faster - jinty) upkbps=5 downkbps=10 # Options to put the created cd-image somewhere uploadhost=ftp.schooltool.org uploadtestdir=/home/jinty/live-cd uploaddir=/home/ftp/pub/schooltool/live-cd rsyncopts=-zvPr --include=$(targetfile) --exclude='*.iso' --exclude='MD5SUMS' --bwlimit $(upkbps) # where to put stuff on the filesystem targetdir=$(release)/$(subrelease) targetfile=schooltool-$(iniso) target=$(targetdir)/$(targetfile) # Options to get the cd release=hoary subrelease=array-7 iniso=$(release)-live-i386.iso source=http://cdimage.ubuntu.com/releases/$(release)/$(subrelease) # Apt sources to use fro downloading packages aptsources="deb ftp://archive.ubuntu.com/ubuntu breezy main universe" "\#deb ftp://archive.schooltool.org/ubuntu breezy main universe" # Run control cloop=filesystem.cloop cloopiniso=/casper/$(cloop) rootcmd=sudo nice=nice -20 # this leaves temp dirs lying around, ya well no fine export MOUNTDIR?=$(shell mktemp -d) chrootcmd=$(rootcmd) chroot $(MOUNTDIR) export LANG= .PHONY: all all: $(target) $(targetdir)/MD5SUMS: mkdir -p $(targetdir) cd $(targetdir) && wget -c --limit-rate=$(downbps)k $(source)/MD5SUMS $(targetdir)/$(iniso): $(targetdir)/MD5SUMS -mkdir get cd get && wget -c --limit-rate=10k $(source)/$(iniso) # Check MD5 sum theremd5=`cat $(targetdir)/MD5SUMS | grep $(iniso)`\ && cd get\ && heremd5=`md5sum $(iniso)`\ && echo "theremd5: $$theremd5"\ && echo "heremd5: $$heremd5"\ && [ "$$theremd5" == "$$heremd5" ] mv get/$(iniso) $(targetdir) touch $(targetdir)/$(iniso) .PHONY: mount mount: $(rootcmd) mount $(MOUNTED) $(MOUNTDIR) -o loop .PHONY: umount umount: $(rootcmd) umount $(MOUNTDIR) .PHONY: inmount inmount: $(rootcmd) mount $(MOUNTED) $(MOUNTDIR) -o loop $(MAKE) $(INMOUNT) $(rootcmd) umount $(MOUNTDIR) .PHONY: extractcd extractcd: -$(rootcmd) rm -rf extracted_cd mkdir extracted_cd $(nice) $(rootcmd) tar -c --exclude=$(cloop) -C $(MOUNTDIR) . | \ $(nice) $(rootcmd) tar --strip-path=1 -x -C extracted_cd extracted_cd: $(targetdir)/$(iniso) $(MAKE) INMOUNT=extractcd MOUNTED=$< inmount .PHONY: extractfs extractfs: $(nice) extract_compressed_fs $(MOUNTDIR)/$(cloopiniso) > extracted_fs 2>/dev/null extracted_fs: $(targetdir)/$(iniso) $(MAKE) INMOUNT=extractfs MOUNTED=$< inmount .PHONY: extractsources extractsources: cp $(MOUNTDIR)/etc/apt/sources.list sources.list.orig sources.list.orig: extracted_fs $(MAKE) INMOUNT=extractsources MOUNTED=$< inmount .PHONY: customizefs customizefs: ### Setup $(rootcmd) mount -t proc proc $(MOUNTDIR)/proc set -e; for i in $(aptsources); do \ echo $$i; \ done | $(rootcmd) tee $(MOUNTDIR)/etc/apt/sources.list >/dev/null $(chrootcmd) apt-get update ### Customize set -e; for i in `cat packages_remove |tr "\n" " "`;do\ $(chrootcmd) apt-get -y remove$$i;\ done cat preseed | $(chrootcmd) debconf-set-selections cd files && $(rootcmd) find . -name '.svn' -prune -o -not -type d \ -exec install -D -p {} $(MOUNTDIR)/{} \; set -e; for i in `cat packages_add| tr "\n" " "`;do\ $(chrootcmd) apt-get -y --allow-unauthenticated install $$i;\ done cat postscript | $(chrootcmd) bash $(chrootcmd) dpkg-query -W --showformat='${Package} ${Version}\n' \ | sudo tee extracted_cd/casper/filesystem.manifest > /dev/null $(rootcmd) cp isolinux.txt extracted_cd/isolinux/isolinux.txt ### Cleanup $(rootcmd) apt-get clean $(rootcmd) cp sources.list.orig $(MOUNTDIR)/etc/apt/sources.list $(rootcmd) umount $(MOUNTDIR)/proc customized_fs: extracted_fs sources.list.orig extracted_cd -rm $@ cp $< $@.tmp $(MAKE) INMOUNT=customizefs MOUNTED=$@.tmp inmount mv $@.tmp $@ extracted_cd/$(cloopiniso): customized_fs extracted_cd -$(rootcmd) rm -f $@ create_compressed_fs customized_fs 65536 > cloop.tmp 2>/dev/null $(rootcmd) mv cloop.tmp $@ $(target): extracted_cd extracted_cd/$(cloopiniso) -mkdir -p $(targetdir) cd extracted_cd && $(rootcmd) mkisofs -r -V "SchoolTool / SchoolBell LiveCD" \ -cache-inodes \ -J -l -b isolinux/isolinux.bin \ -c isolinux/boot.cat -no-emul-boot \ -boot-load-size 4 -boot-info-table . > ../$@ .PHONY: clean clean: # Clean extract $(rootcmd) rm -rf extracted_cd $(rootcmd) rm -rf extracted_fs $(rootcmd) rm -rf customized_fs # Clean customization rm -f sources.list.orig # Clean target -rm -rf $(release) .PHONY: realclean realclean: clean # Clean download -rm -rf get upload-stamp: $(target) rsync $(rsyncopts) $(release) $(uploadhost):$(uploadtestdir) theremd5=`ssh $(uploadhost) 'cd $(uploadtestdir)/$(targetdir); md5sum $(targetfile)'`\ && cd $(targetdir)\ && heremd5=`md5sum $(targetfile)`\ && echo "theremd5: $$theremd5"\ && echo "heremd5: $$heremd5"\ && [ "$$theremd5" == "$$heremd5" ] ssh $(uploadhost) mv $(uploadtestdir)/$(targetdir)/$(targetfile) $(uploaddir) touch upload-stamp