summaryrefslogtreecommitdiff
path: root/Makefile
blob: 0fa69f8680267aefa285e8f42bba672d0ec75083 (plain)
    1 #
    2 # Makefile for CRUX
    3 # Copyright (c) 2003-2005 Per Liden <per@fukt.bth.se>
    4 #
    5 
    6 CRUXVERSION       = 2.4
    7 COLLECTIONS       = core opt xorg
    8 KERNEL_MIRROR     = ftp://ftp.kernel.org
    9 KERNEL_VERSION    = 2.6.23.9
   10 KERNEL_PATCHES    = squashfs3.3-patch
   11 STATIC_BB         = http://jaeger.morpheus.net/linux/crux/files/busybox.bz2
   12 SYSLINUX_VERSION  = 3.54
   13 PORTS_DIR         = $(PWD)/ports
   14 FAKE_ROOT_DIR     = $(PWD)/tmp/fake_root
   15 SQUASHFS_DIR      = $(PWD)/tmp/squashfs
   16 DATE_STR          = `date +'%Y%m%d'`
   17 ISO_ROOT_DIR      = $(PWD)/tmp/iso_root
   18 ISO_FILENAME      = $(PWD)/crux-$(CRUXVERSION).iso
   19 NETISO_FILENAME   = $(PWD)/crux-$(CRUXVERSION)-netinst.iso
   20 ISO_PACKAGES      = filesystem bash coreutils bzip2 e2fsprogs jfsutils \
   21                     xfsprogs reiserfsprogs patch findutils glibc grep gzip kbd \
   22                     module-init-tools less gawk ncurses net-tools pkgutils \
   23                     procps readline sed shadow mktemp sysklogd sysvinit tar \
   24                     util-linux-ng vim which dialog nano mdadm pciutils libusb \
   25                     sysfsutils usbutils hotplug udev zlib openssl openssh \
   26                     dhcpcd wget iproute2
   27 
   28 PORTS_core        = $(shell /bin/ls -I README $(PORTS_DIR)/core)
   29 PORTS_opt         = $(shell /bin/cat packages.opt)
   30 PORTS_xorg        = $(shell /bin/cat packages.xorg)
   31 
   32 ifeq ($(FORCE),yes)
   33 PKGMK_FORCE=-f
   34 else
   35 PKGMK_FORCE=
   36 endif
   37 
   38 .PHONY: help check-root check-log $(COLLECTIONS) all all-chroot bootstrap kernel kernel-clean syslinux syslinux-clean clean iso
   39 
   40 help:
   41 	@echo "CRUX Makefile"
   42 	@echo "Targets:"
   43 	@echo "  <collection>   build single collection"
   44 	@echo "  all            build all collections"
   45 	@echo "  bootstrap      bootstrap all collections"
   46 	@echo "  kernel         download and build kernel"
   47 	@echo "  iso            create iso image"
   48 	@echo "Collections:"
   49 	@echo "  $(COLLECTIONS)"
   50 
   51 check-root:
   52 	@if [ "$$UID" != "0" ]; then \
   53 		echo "You need to be root to do this."; \
   54 		exit 1; \
   55 	fi
   56 
   57 check-log:
   58 	@grep "^=======> ERROR:"; \
   59 	if [ "$$?" = "0" ]; then \
   60 		echo "(see log file for details)"; \
   61 		exit 1; \
   62 	else \
   63 		exit 0; \
   64 	fi
   65 
   66 
   67 # kernel
   68 kernel/linux-$(KERNEL_VERSION).tar.bz2:
   69 	cd kernel && wget $(KERNEL_MIRROR)/pub/linux/kernel/v2.6/linux-$(KERNEL_VERSION).tar.bz2
   70 
   71 kernel/linux-$(KERNEL_VERSION): kernel/linux-$(KERNEL_VERSION).tar.bz2
   72 	tar -C kernel -xjmf kernel/linux-$(KERNEL_VERSION).tar.bz2
   73 	for FILE in $(KERNEL_PATCHES); do \
   74 		(cd kernel/linux-$(KERNEL_VERSION) && patch -p1 -i ../$$FILE;) \
   75 	done
   76 
   77 kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage: kernel/linux-$(KERNEL_VERSION) kernel/linux-$(KERNEL_VERSION).config
   78 	make -C kernel/linux-$(KERNEL_VERSION) mrproper
   79 	cp -f kernel/linux-$(KERNEL_VERSION).config kernel/linux-$(KERNEL_VERSION)/.config
   80 	make -C kernel/linux-$(KERNEL_VERSION) oldconfig
   81 	make -C kernel/linux-$(KERNEL_VERSION) all
   82 	#touch kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage
   83 
   84 kernel: kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage
   85 
   86 kernel-clean:
   87 	rm -rf kernel/linux-$(KERNEL_VERSION)
   88 
   89 kernel-distclean: kernel-clean
   90 	rm -f kernel/linux-$(KERNEL_VERSION).tar.bz2
   91 
   92 
   93 
   94 # busybox
   95 busybox/busybox.bz2:
   96 	@cd busybox && wget $(STATIC_BB)
   97 
   98 busybox/busybox: busybox/busybox.bz2
   99 	@cd busybox && bzip2 -d busybox.bz2
  100 
  101 busybox: busybox/busybox
  102 
  103 busybox-clean:
  104 	rm -f busybox/busybox.bz2 busybox/busybox
  105 
  106 
  107 
  108 # isolinux
  109 iso/syslinux-$(SYSLINUX_VERSION).tar.gz:
  110 	cd iso && wget $(KERNEL_MIRROR)/pub/linux/utils/boot/syslinux/syslinux-$(SYSLINUX_VERSION).tar.gz
  111 
  112 iso/syslinux-$(SYSLINUX_VERSION): iso/syslinux-$(SYSLINUX_VERSION).tar.gz
  113 	tar -C iso -xzmf iso/syslinux-$(SYSLINUX_VERSION).tar.gz
  114 
  115 iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin: iso/syslinux-$(SYSLINUX_VERSION)
  116 
  117 syslinux: iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin
  118 
  119 syslinux-clean:
  120 	rm -rf iso/syslinux-$(SYSLINUX_VERSION)
  121 
  122 syslinux-distclean:
  123 	rm -f iso/syslinux-$(SYSLINUX_VERSION).tar.gz
  124 
  125 
  126 
  127 clean: kernel-clean busybox-clean syslinux-clean squashfs-clean initramfs-clean
  128 	@rm -rf tmp modules_install.log $(ISO_FILENAME) $(NETISO_FILENAME) \
  129 		`basename $(ISO_FILENAME) .iso`.md5 \
  130 		`basename $(NETISO_FILENAME) .iso`.md5
  131 
  132 distclean: clean kernel-distclean syslinux-distclean
  133 
  134 $(COLLECTIONS): check-root
  135 	@for p in $(PORTS_$(@)); do \
  136 		echo "port: $$p"; \
  137 		(cd $(PORTS_DIR)/$@/$$p && pkgmk -d $(PKGMK_FORCE)); \
  138 	done
  139 
  140 all: $(COLLECTIONS)
  141 
  142 all-chroot: check-root
  143 	@echo "Creating chroot environment"
  144 	@rm -rf $(FAKE_ROOT_DIR)
  145 	@mkdir -p $(FAKE_ROOT_DIR)
  146 	@echo "Installing packages"
  147 	@mkdir -p $(FAKE_ROOT_DIR)/var/lib/pkg
  148 	@touch $(FAKE_ROOT_DIR)/var/lib/pkg/db
  149 	@for COLL in $(COLLECTIONS); do \
  150 		for PACKAGE in $(PORTS_DIR)/$$COLL/*/*.pkg.tar.gz; do \
  151 			echo " $$PACKAGE"; \
  152 			pkgadd -r $(FAKE_ROOT_DIR) $$PACKAGE; \
  153 		done; \
  154 	done
  155 	@echo "Installing kernel source (linux-$(KERNEL_VERSION)) into $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION)..."
  156 	@mkdir -p $(FAKE_ROOT_DIR)/usr/src
  157 	@tar jxf kernel/linux-$(KERNEL_VERSION).tar.bz2 -C $(FAKE_ROOT_DIR)/usr/src/
  158 	@for FILE in $(KERNEL_PATCHES); do \
  159 		cp kernel/$$FILE $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION)/; \
  160 		(cd $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION) && \
  161 		 patch -p1 -i $$FILE); \
  162 	 done
  163 	@cp kernel/linux-$(KERNEL_VERSION).config $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION)/.config
  164 	@echo "Preparing kernel source..."
  165 	@(cd $(FAKE_ROOT_DIR)/usr/src/linux-$(KERNEL_VERSION) && \
  166 	  make oldconfig && make)
  167 	@mkdir -p $(FAKE_ROOT_DIR)/lib/modules/$(KERNEL_VERSION)
  168 	@ln -s /usr/src/linux-$(KERNEL_VERSION) $(FAKE_ROOT_DIR)/lib/modules/$(KERNEL_VERSION)/build
  169 	@cp -L /etc/resolv.conf $(FAKE_ROOT_DIR)/etc/
  170 	@echo "Mounting /dev on $(FAKE_ROOT_DIR)/dev"
  171 	@mount --bind /dev $(FAKE_ROOT_DIR)/dev
  172 	@echo "Mounting /proc on $(FAKE_ROOT_DIR)/proc"
  173 	@mount --bind /proc $(FAKE_ROOT_DIR)/proc
  174 	@echo "Mounting $$PWD on $(FAKE_ROOT_DIR)/src"
  175 	@mkdir $(FAKE_ROOT_DIR)/src
  176 	@mount --bind $$PWD $(FAKE_ROOT_DIR)/src
  177 	@echo "Entering chroot enrivonment"
  178 	@chroot $(FAKE_ROOT_DIR) /bin/bash --login -c "cd /src && $(MAKE) FORCE=yes all"
  179 	@echo "Exiting chroot enrivonment"
  180 	@echo "Unmounting $(FAKE_ROOT_DIR)/src"
  181 	@umount $(FAKE_ROOT_DIR)/src
  182 	@rmdir $(FAKE_ROOT_DIR)/src
  183 	@echo "Unmounting $(FAKE_ROOT_DIR)/proc"
  184 	@umount $(FAKE_ROOT_DIR)/proc
  185 	@echo "Unmounting $(FAKE_ROOT_DIR)/dev"
  186 	@umount $(FAKE_ROOT_DIR)/dev
  187 	@echo "Removing chroot environment"
  188 	@rm -rf $(FAKE_ROOT_DIR)
  189 
  190 bootstrap: check-root
  191 	@echo "Bootstrap started    (`date +'%F %T'`)"
  192 	@echo "- Stage 0            (`date +'%F %T'`)"
  193 	@$(MAKE) all &> log.stage0
  194 	@$(MAKE) check-log < log.stage0
  195 	@echo "- Stage 1            (`date +'%F %T'`)"
  196 	@$(MAKE) all-chroot &> log.stage1
  197 	@$(MAKE) check-log < log.stage1
  198 	@echo "- Stage 2            (`date +'%F %T'`)"
  199 	@$(MAKE) all-chroot &> log.stage2
  200 	@$(MAKE) check-log < log.stage2
  201 	@echo "Bootstrap completed  (`date +'%F %T'`)"
  202 
  203 
  204 
  205 # initramfs
  206 initramfs: kernel busybox initramfs/init squashfs
  207 	@echo "Creating initramfs..."
  208 	@sed -e "s/#KERNEL_VERSION#/$(KERNEL_VERSION)/g" initramfs/initramfs.lst \
  209 		> initramfs/initramfs.lst-sed
  210 	@cd initramfs && ../kernel/linux-$(KERNEL_VERSION)/usr/gen_init_cpio \
  211 		initramfs.lst-sed > initramfs
  212 
  213 initramfs-clean:
  214 	if [ -e initramfs/initramfs.lst-sed ]; then rm -f initramfs/initramfs.lst-sed; fi
  215 	if [ -e initramfs/initramfs ]; then rm -f initramfs/initramfs; fi
  216 
  217 
  218 
  219 # squashfs
  220 squashfs: kernel busybox
  221 	@echo "Creating squashfs filesystem..."
  222 	@mkdir -p $(SQUASHFS_DIR)
  223 	@for PACKAGE in $(ISO_PACKAGES); do \
  224 		tar -C $(SQUASHFS_DIR) -xzpf $(PORTS_DIR)/*/$$PACKAGE/$$PACKAGE\#*.pkg.tar.gz; \
  225 	done
  226 	@sed -i -e 's/^#PermitRootLogin yes/PermitRootLogin yes/' \
  227 		$(SQUASHFS_DIR)/etc/ssh/sshd_config
  228 	@echo "- Installing kernel..."
  229 	@cp kernel/linux-$(KERNEL_VERSION)/System.map $(SQUASHFS_DIR)/boot/System.map
  230 	@cp kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage $(SQUASHFS_DIR)/boot/vmlinuz
  231 	@echo "- Installing kernel modules (see modules_install.log)"
  232 	@make -C kernel/linux-$(KERNEL_VERSION) INSTALL_MOD_PATH=$(SQUASHFS_DIR) modules_install &> modules_install.log
  233 	@touch kernel/linux-$(KERNEL_VERSION).config kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage # stupid timestamp problem
  234 	@echo "- Deleting superfluous files..."
  235 	@cd $(SQUASHFS_DIR) && rm -rf var opt home
  236 	@mkdir -p $(SQUASHFS_DIR)/var/empty $(SQUASHFS_DIR)/var/lib
  237 	@cd $(SQUASHFS_DIR)/usr && rm -rf man include lib/*.a lib/*.o lib/gconv lib/locale src
  238 	@cd $(SQUASHFS_DIR)/usr/share && mkdir l v x; cp terminfo/l/linux l; cp terminfo/v/vt100 v; cp terminfo/x/xterm x; rm -rf terminfo/*; mv l v x terminfo
  239 	@cd $(SQUASHFS_DIR)/usr/share && rm -rf et ss vim i18n zoneinfo
  240 	@cd $(SQUASHFS_DIR)/usr/bin && rm cal locale localedef rpcgen compile_et mk_cmds
  241 	@cd $(SQUASHFS_DIR)/usr/sbin && rm group{add,del,mod} user{add,del,mod} grpck pwck iconvconfig rpcinfo zic zdump
  242 	@cd $(SQUASHFS_DIR)/etc && rm -rf cron {resolv,lilo,sysctl,pkgadd,pkgmk}.conf securetty
  243 	@cd $(SQUASHFS_DIR)/etc/rc.d && find . -type f ! -name "sshd" -exec rm -f '{}' \;
  244 	@cd $(SQUASHFS_DIR)/lib/modules/$(KERNEL_VERSION) && rm -f build
  245 	@echo "- Creating symlinks"
  246 	@ln -sf /tmp/var $(SQUASHFS_DIR)/var
  247 	@ln -sf /proc/mounts $(SQUASHFS_DIR)/etc/mtab
  248 	@cp iso/etc/{motd,fstab,hosts,inittab,issue,ld.so.conf,protocols,rc,rc.shutdown,rc.single,services} \
  249 		$(SQUASHFS_DIR)/etc
  250 	@echo "- Updating library links and cache"
  251 	@ldconfig -r $(SQUASHFS_DIR)
  252 	@cp iso/bin/{setup,setup-helper,setup-chroot,net-setup,net-setup-helper,serial_console} $(SQUASHFS_DIR)/usr/bin
  253 	@mkdir -p squashfs
  254 	@mksquashfs $(SQUASHFS_DIR) squashfs/crux.squashfs -noappend -e usr/bin/net-setup -e usr/bin/net-setup-helper &> /dev/null
  255 	@mksquashfs $(SQUASHFS_DIR) squashfs/crux.squashfs-net -noappend -e usr/bin/setup -e usr/bin/setup-helper &> /dev/null
  256 
  257 squashfs-clean:
  258 	@rm -rf squashfs
  259 	
  260 
  261 iso: check-root kernel syslinux initramfs squashfs
  262 	@echo "Creating ISO image ($(ISO_FILENAME))"
  263 	@if [ -e $(ISO_ROOT_DIR) ]; then rm -rf $(ISO_ROOT_DIR); fi
  264 	@mkdir -p $(ISO_ROOT_DIR)/boot
  265 	@echo "- Installing kernel"
  266 	@cp kernel/linux-$(KERNEL_VERSION)/System.map $(ISO_ROOT_DIR)/boot/System.map
  267 	@cp kernel/linux-$(KERNEL_VERSION)/arch/i386/boot/bzImage $(ISO_ROOT_DIR)/boot/vmlinuz
  268 	@echo "- Installing initramfs"
  269 	@cp initramfs/initramfs $(ISO_ROOT_DIR)/boot/initramfs
  270 	@echo "- Copying ISO specific files"
  271 	@mkdir -p $(ISO_ROOT_DIR)/etc $(ISO_ROOT_DIR)/boot/isolinux
  272 	@cp iso/syslinux-$(SYSLINUX_VERSION)/isolinux.bin $(ISO_ROOT_DIR)/boot/isolinux
  273 	@cp iso/isolinux/{isolinux.cfg,*.msg,memtest86plus} \
  274 		$(ISO_ROOT_DIR)/boot/isolinux
  275 	@echo $(CRUXVERSION)-$(DATE_STR) > $(ISO_ROOT_DIR)/crux-cd
  276 	@echo "- Copying CRUX packages"
  277 	@mkdir -p $(ISO_ROOT_DIR)/crux
  278 	@cp doc/handbook/{handbook,releasenotes}.txt $(ISO_ROOT_DIR)/crux
  279 	@cp iso/setup.dependencies $(ISO_ROOT_DIR)/crux
  280 	@mkdir -p $(ISO_ROOT_DIR)/crux/kernel
  281 	@cp kernel/linux-$(KERNEL_VERSION).tar.bz2 $(ISO_ROOT_DIR)/crux/kernel
  282 	@cp kernel/linux-$(KERNEL_VERSION).config $(ISO_ROOT_DIR)/crux/kernel
  283 	@for FILE in $(KERNEL_PATCHES); do \
  284 		cp kernel/$$FILE $(ISO_ROOT_DIR)/crux/kernel; \
  285 	done
  286 	@for COLL in $(COLLECTIONS); do \
  287 		mkdir -p $(ISO_ROOT_DIR)/crux/$$COLL; \
  288 		cp $(PORTS_DIR)/$$COLL/*/*.pkg.tar.gz $(ISO_ROOT_DIR)/crux/$$COLL; \
  289 	done
  290 	@echo "- Copying squashfs filesystem"
  291 	@cp squashfs/crux.squashfs $(ISO_ROOT_DIR)
  292 	@echo "- Creating ISO sort table"
  293 	@echo "$(ISO_ROOT_DIR)/boot 100" > /tmp/iso.sort
  294 	@echo "$(ISO_ROOT_DIR)/boot/isolinux 200" >> /tmp/iso.sort
  295 	@echo "$(ISO_ROOT_DIR)/boot/isolinux/isolinux.bin 300" >> /tmp/iso.sort
  296 	@echo "- Starting mkisofs"
  297 	@if [ -f $(ISO_FILENAME) ]; then rm -f $(ISO_FILENAME); fi
  298 	@if [ -f $(NETISO_FILENAME) ]; then rm -f $(NETISO_FILENAME); fi
  299 	@mkisofs -R -l -J -V CRUX-$(CRUXVERSION)-$(DATE_STR) -A CRUX -b boot/isolinux/isolinux.bin \
  300 		-c boot/isolinux/isolinux.boot -no-emul-boot -boot-load-size 4 \
  301 		-boot-info-table -sort /tmp/iso.sort -o $(ISO_FILENAME) $(ISO_ROOT_DIR)
  302 	@md5sum `basename $(ISO_FILENAME)` > `basename $(ISO_FILENAME) .iso`.md5
  303 	@rm $(ISO_ROOT_DIR)/crux.squashfs
  304 	@cp squashfs/crux.squashfs-net $(ISO_ROOT_DIR)/crux.squashfs
  305 	@mkisofs -R -l -J -V CRUX-NET-$(CRUXVERSION)-$(DATE_STR) -A CRUX -b \
  306 		boot/isolinux/isolinux.bin -c boot/isolinux/isolinux.boot \
  307 		-exclude-list iso/excludelist.net -no-emul-boot -boot-load-size 4 \
  308 		-boot-info-table -sort /tmp/iso.sort -o $(NETISO_FILENAME) $(ISO_ROOT_DIR)
  309 	@md5sum `basename $(NETISO_FILENAME)` > \
  310 		`basename $(NETISO_FILENAME) .iso`.md5
  311 	@rm /tmp/iso.sort
  312 	@rm -rf $(ISO_ROOT_DIR)
  313 	@echo "Done"
  314 
  315 
  316 iso/setup.dependencies:
  317 	@for PORT in $(foreach c,$(COLLECTIONS),$(PORTS_$(c))); do \
  318 		echo -n $$PORT": "; \
  319 		prt-get \
  320 			--no-std-config \
  321 			$(foreach c,$(COLLECTIONS),--config-append="prtdir $(PORTS_DIR)/$(c)") \
  322 			quickdep $$PORT; \
  323 	done > $@
  324 	
  325 # End of file

Generated by cgit