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
|