summaryrefslogtreecommitdiff
path: root/Makefile
blob: 24dad3cbe3074d42828cad2a0e31415a4d7208db (plain)
    1 #
    2 # Makefile for CRUX
    3 # Copyright (c) 2003-2005 Per Liden <per@fukt.bth.se>
    4 #
    5 
    6 COLLECTIONS       = core opt
    7 KERNEL_MIRROR     = ftp://ftp.kernel.org
    8 KERNEL_VERSION    = 2.6.11.7
    9 KERNEL_PATCHES    = 
   10 SYSLINUX_VERSION  = 3.07
   11 FAKE_ROOT_DIR     = $(PWD)/tmp/fake_root
   12 ISO_ROOT_DIR      = $(PWD)/tmp/iso_root
   13 ISO_FILENAME      = $(PWD)/crux.iso
   14 ISO_PACKAGES      = filesystem bash coreutils bzip2 devfsd e2fsprogs jfsutils xfsprogs \
   15 		    reiserfsprogs patch findutils glibc grep gzip kbd module-init-tools \
   16 		    less lilo gawk ncurses net-tools pkgutils procps readline sed shadow \
   17 		    mktemp sysklogd sysvinit tar util-linux vim which dialog pine mdadm
   18 
   19 ifeq ($(FORCE),yes)
   20 PKGMK_FORCE=-f
   21 else
   22 PKGMK_FORCE=
   23 endif
   24 
   25 .PHONY: help check-root check-log $(COLLECTIONS) all all-chroot bootstrap kernel kernel-clean syslinux syslinux-clean clean iso
   26 
   27 help:
   28 	@echo "CRUX Makefile"
   29 	@echo "Targets:"
   30 	@echo "  <collection>   build single collection"
   31 	@echo "  all            build all collections"
   32 	@echo "  bootstrap      bootstrap all collections"
   33 	@echo "  kernel         download and build kernel"
   34 	@echo "  iso            create iso image"
   35 	@echo "Collections:"
   36 	@echo "  $(COLLECTIONS)"
   37 
   38 check-root:
   39 	@if [ "$$UID" != "0" ]; then \
   40 		echo "You need to be root to do this."; \
   41 		exit 1; \
   42 	fi
   43 
   44 check-log:
   45 	@grep "^=======> ERROR:"; \
   46 	if [ "$$?" = "0" ]; then \
   47 		echo "(see log file for details)"; \
   48 		exit 1; \
   49 	else \
   50 		exit 0; \
   51 	fi
   52 
   53 kernel/linux-$(KERNEL_VERSION).tar.bz2:
   54 	cd kernel && wget $(KERNEL_MIRROR)/pub/linux/kernel/v2.6/linux-$(KERNEL_VERSION).tar.bz2
   55 
   56 kernel/linux-$(KERNEL_VERSION): kernel/linux-$(KERNEL_VERSION).tar.bz2
   57 	tar -C kernel -xjmf kernel/linux-$(KERNEL_VERSION).tar.bz2
   58 	for FILE in $(KERNEL_PATCHES); do \
   59 		cd kernel/linux-$(KERNEL_VERSION) && patch -p1 < ../$$FILE; \
   60 	done
   61 
   62 kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage: kernel/linux-$(KERNEL_VERSION) kernel/linux-$(KERNEL_VERSION).config
   63 	make -C kernel/linux-$(KERNEL_VERSION) mrproper
   64 	cp -f kernel/linux-$(KERNEL_VERSION).config kernel/linux-$(KERNEL_VERSION)/.config
   65 	make -C kernel/linux-$(KERNEL_VERSION) oldconfig
   66 	make -C kernel/linux-$(KERNEL_VERSION) all
   67 	touch kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage
   68 
   69 kernel: kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage
   70 
   71 kernel-clean:
   72 	if [ -e kernel/linux-$(KERNEL_VERSION) ]; then rm -rf kernel/linux-$(KERNEL_VERSION); fi
   73 
   74 iso/syslinux-$(SYSLINUX_VERSION).tar.gz:
   75 	cd iso && wget $(KERNEL_MIRROR)/pub/linux/utils/boot/syslinux/syslinux-$(SYSLINUX_VERSION).tar.gz
   76 
   77 iso/syslinux-$(SYSLINUX_VERSION): iso/syslinux-$(SYSLINUX_VERSION).tar.gz
   78 	tar -C iso -xzmf iso/syslinux-$(SYSLINUX_VERSION).tar.gz
   79 
   80 iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin: iso/syslinux-$(SYSLINUX_VERSION)
   81 
   82 syslinux: iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin
   83 
   84 syslinux-clean:
   85 	if [ -e iso/syslinux-$(SYSLINUX_VERSION) ]; then rm -rf iso/syslinux-$(SYSLINUX_VERSION); fi
   86 	if [ -e iso/syslinux-$(SYSLINUX_VERSION).tar.gz ]; then rm -f iso/syslinux-$(SYSLINUX_VERSION).tar.gz; fi
   87 
   88 clean: kernel-clean syslinux-clean
   89 
   90 $(COLLECTIONS): check-root
   91 	@cd ports/$@ && pkgmk -r -d $(PKGMK_FORCE)
   92 
   93 all: $(COLLECTIONS)
   94 
   95 all-chroot: check-root
   96 	@echo "Creating chroot environment"
   97 	@if [ -e $(FAKE_ROOT_DIR) ]; then rm -rf $(FAKE_ROOT_DIR); fi
   98 	@mkdir -p $(FAKE_ROOT_DIR)
   99 	@echo "Installing packages"
  100 	@mkdir -p $(FAKE_ROOT_DIR)/var/lib/pkg
  101 	@touch $(FAKE_ROOT_DIR)/var/lib/pkg/db
  102 	@for COLL in $(COLLECTIONS); do \
  103 		for PACKAGE in ports/$$COLL/*/*.pkg.tar.gz; do \
  104 			echo " $$PACKAGE"; \
  105 			pkgadd -r $(FAKE_ROOT_DIR) $$PACKAGE; \
  106 		done; \
  107 	done
  108 	@echo "Mounting /dev on $(FAKE_ROOT_DIR)/dev"
  109 	@mount --bind /dev $(FAKE_ROOT_DIR)/dev
  110 	@echo "Mounting /proc on $(FAKE_ROOT_DIR)/proc"
  111 	@mount --bind /proc $(FAKE_ROOT_DIR)/proc
  112 	@echo "Mouting $$PWD on $(FAKE_ROOT_DIR)/src"
  113 	@mkdir $(FAKE_ROOT_DIR)/src
  114 	@mount --bind $$PWD $(FAKE_ROOT_DIR)/src
  115 	@echo "Entering chroot enrivonment"
  116 	@chroot $(FAKE_ROOT_DIR) /bin/bash --login -c "cd /src && $(MAKE) FORCE=yes all"
  117 	@echo "Exiting chroot enrivonment"
  118 	@echo "Unmounting $(FAKE_ROOT_DIR)/src"
  119 	@umount $(FAKE_ROOT_DIR)/src
  120 	@rmdir $(FAKE_ROOT_DIR)/src
  121 	@echo "Unmounting $(FAKE_ROOT_DIR)/proc"
  122 	@umount $(FAKE_ROOT_DIR)/proc
  123 	@echo "Unmounting $(FAKE_ROOT_DIR)/dev"
  124 	@umount $(FAKE_ROOT_DIR)/dev
  125 	@echo "Removing chroot environment"
  126 	@rm -rf $(FAKE_ROOT_DIR)
  127 
  128 bootstrap: check-root
  129 	@echo "Bootstrap started    (`date +'%F %T'`)"
  130 	@echo "- Stage 0            (`date +'%F %T'`)"
  131 	@$(MAKE) all &> log.stage0
  132 	@$(MAKE) check-log < log.stage0
  133 	@echo "- Stage 1            (`date +'%F %T'`)"
  134 	@$(MAKE) all-chroot &> log.stage1
  135 	@$(MAKE) check-log < log.stage1
  136 	@echo "- Stage 2            (`date +'%F %T'`)"
  137 	@$(MAKE) all-chroot &> log.stage2
  138 	@$(MAKE) check-log < log.stage2
  139 	@echo "Bootstrap completed  (`date +'%F %T'`)"
  140 
  141 iso: check-root kernel syslinux
  142 	@echo "Creating ISO image ($(ISO_FILENAME))"
  143 	@if [ -e $(ISO_ROOT_DIR) ]; then rm -rf $(ISO_ROOT_DIR); fi
  144 	@mkdir -p $(ISO_ROOT_DIR)
  145 	@echo "- Installing packages"
  146 	@for PACKAGE in $(ISO_PACKAGES); do \
  147 		tar -C $(ISO_ROOT_DIR) -xzpf ports/*/$$PACKAGE/$$PACKAGE\#*.pkg.tar.gz; \
  148 	done
  149 	@echo "- Installing kernel"
  150 	@cp kernel/linux-$(KERNEL_VERSION)/System.map $(ISO_ROOT_DIR)/boot/System.map
  151 	@cp kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage $(ISO_ROOT_DIR)/boot/vmlinuz
  152 	@echo "- Installing kernel modules (see modules_install.log)"
  153 	@make -C kernel/linux-$(KERNEL_VERSION) INSTALL_MOD_PATH=$(ISO_ROOT_DIR) modules_install &> modules_install.log
  154 	@echo "- Deleting superfluous files"
  155 	@cd $(ISO_ROOT_DIR) &&           rm -rf var opt home
  156 	@cd $(ISO_ROOT_DIR)/usr &&       rm -rf man include lib/*.a lib/*.o lib/gconv lib/locale src
  157 	@cd $(ISO_ROOT_DIR)/usr/share && mkdir l v; cp terminfo/l/linux l; cp terminfo/v/vt100 v; rm -rf terminfo/*; mv l v terminfo
  158 	@cd $(ISO_ROOT_DIR)/usr/share && rm -rf et ss vim i18n zoneinfo
  159 	@cd $(ISO_ROOT_DIR)/usr/bin &&   rm cal locale localedef rpcgen pine compile_et mk_cmds
  160 	@cd $(ISO_ROOT_DIR)/usr/sbin &&  rm group{add,del,mod} user{add,del,mod} grpck pwck iconvconfig rpcinfo zic zdump
  161 	@cd $(ISO_ROOT_DIR)/etc &&       rm -rf rc.d cron {resolv,lilo,sysctl,pkgadd,pkgmk}.conf securetty
  162 	@cd $(ISO_ROOT_DIR)/lib/modules/$(KERNEL_VERSION) && rm -f build
  163 	@echo "- Creating symlinks"
  164 	@ln -sf /tmp/var $(ISO_ROOT_DIR)/var
  165 	@ln -sf /proc/mounts $(ISO_ROOT_DIR)/etc/mtab
  166 	@echo "- Copying ISO specific files"
  167 	@mkdir -p $(ISO_ROOT_DIR)/etc $(ISO_ROOT_DIR)/boot/isolinux
  168 	@cp iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin $(ISO_ROOT_DIR)/boot/isolinux
  169 	@cp iso/isolinux/{isolinux.cfg,boot.msg} $(ISO_ROOT_DIR)/boot/isolinux
  170 	@cp iso/etc/{fstab,hosts,inittab,issue,ld.so.conf,protocols,rc,rc.shutdown,rc.single,services} $(ISO_ROOT_DIR)/etc
  171 	@echo "- Updating library links and cache"
  172 	@ldconfig -r $(ISO_ROOT_DIR)
  173 	@echo "- Copying CRUX packages"
  174 	@mkdir -p $(ISO_ROOT_DIR)/crux
  175 	@cp doc/handbook/handbook.txt $(ISO_ROOT_DIR)/crux
  176 	@cp iso/bin/{setup,serial_console} $(ISO_ROOT_DIR)/usr/bin
  177 	@mkdir -p $(ISO_ROOT_DIR)/crux/kernel
  178 	@cp kernel/linux-$(KERNEL_VERSION).tar.bz2 $(ISO_ROOT_DIR)/crux/kernel
  179 	@cp kernel/linux-$(KERNEL_VERSION).config $(ISO_ROOT_DIR)/crux/kernel
  180 	@for FILE in $(KERNEL_PATCHES); do \
  181 		cp kernel/$$FILE $(ISO_ROOT_DIR)/crux/kernel; \
  182 	done
  183 	@for COLL in $(COLLECTIONS); do \
  184 		mkdir -p $(ISO_ROOT_DIR)/crux/$$COLL; \
  185 		cp ports/$$COLL/*/*.pkg.tar.gz $(ISO_ROOT_DIR)/crux/$$COLL; \
  186 	done
  187 	@echo "- Creating ISO sort table"
  188 	@echo "$(ISO_ROOT_DIR)/boot 100" > /tmp/iso.sort
  189 	@echo "$(ISO_ROOT_DIR)/boot/isolinux 200" >> /tmp/iso.sort
  190 	@echo "$(ISO_ROOT_DIR)/boot/isolinux/isolinux.bin 300" >> /tmp/iso.sort
  191 	@echo "- Starting mkisofs"
  192 	@if [ -f $(ISO_FILENAME) ]; then rm -f $(ISO_FILENAME); fi
  193 	@mkisofs -R -l -allow-leading-dots -J -V CRUX -A CRUX -b boot/isolinux/isolinux.bin -c boot/isolinux/isolinux.boot \
  194 		 -no-emul-boot -boot-load-size 4 -boot-info-table -sort /tmp/iso.sort -o $(ISO_FILENAME) $(ISO_ROOT_DIR)
  195 	@rm /tmp/iso.sort
  196 	@rm -rf $(ISO_ROOT_DIR)
  197 	@echo "Done"
  198 
  199 # End of file

Generated by cgit