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
|