Magellan Linux

Contents of /trunk/mlivecdbuild/mlivecdbuild.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 144 - (show annotations) (download) (as text)
Sun Jul 3 17:17:35 2005 UTC (18 years, 10 months ago) by niro
File MIME type: application/x-sh
File size: 25853 byte(s)
fixed complains about /etc/init.d/functions, added new hostname configuration scheme, fixed some whitespaces

1 #!/bin/bash
2
3 #
4 # Builds Magellan Livecd's 0.3.6-r7
5 #
6
7 source /etc/sysconfig/rc
8 source $rc_functions
9
10 ### setup ###
11 export LIVECDROOT=/mnt/mlivecdbuild-0.3.6-r7
12 export CDCHROOTDIR=${LIVECDROOT}/chroot
13 export CDISOROOT=${LIVECDROOT}/isoroot
14 export CDMAGEDIR=${LIVECDROOT}/files/mage-src
15 export CDMAGERC=${CDMAGEDIR}/mage.rc
16 export CDISONAME=magellan-livecd.iso
17 export CDHOSTNAME=magellan-live
18 export CDTOOLCHAIN=${LIVECDROOT}/files/magellan-toolchain-0.3-i486.tar.bz2
19 export CDLAYOUTDIR=${LIVECDROOT}/files/
20
21 export CDLAYOUTFILE=magellan_layout-i686-mage-0.3.99-r1-kernel26
22
23
24 # usbstick: vfat doesn't like CAPS and strings longer than 8 chars
25 export CDID=cdid
26 export VERSION=0.3.6-r7
27 export CDINITRD=${LIVECDROOT}/mntinitrd
28 export CDISOLOOP=${LIVECDROOT}/isoloop
29
30 # kernel 2.4.22 needs cloop-1.02, smaller or above will not work >:/ *grrr*
31 export CLOOPFILE=cloop-1.02-precompiled.tar.bz2
32 export CLOOPDIR=cloop-1.02
33
34 # busybox-0.60.3 is official stable
35 export BUSYBOXFILE=busybox-1.00-precompiled.tar.bz2
36 export BUSYBOXDIR=busybox-1.00
37
38 export SEDFILE=sed-4.0.9-static.tar.bz2
39 export SEDDIR=sed-4.0.9
40
41 #kernelname must be the same in the isolinux.cfg/syslinux.cfg
42 CDKERNELNAME=magelive
43 ###############
44
45 #small fix: livecdkernel
46
47 #global settings#
48 #################
49
50
51 #user settings#
52 ###############
53 CDMAGEPROFILE=mage040-26
54
55 #if you want use cloop
56 #CDCOMPRESS_METHOD=cloop
57
58 #if you want use squashfs
59 CDCOMPRESS_METHOD=squashfs
60
61 ### functions ###
62
63 die() {
64 DIE="yes"
65 }
66
67 secho() {
68 local I
69 I="$@"
70 echo -e "\n${COLOREDSTAR}${I}"
71 }
72
73 mecho() {
74 local I
75 I="$@"
76 echo -e "${COLMAGENTA}\t${I}${COLDEFAULT}"
77 }
78
79 showversion() {
80 echo -en "Magellan LiveCD Generate v${VERSION} "
81 echo -e "-- Niels Rogalla (niro@magellan-linux.de)"
82 }
83
84 create_chrootdirs() {
85 # creating directories
86 mkdir -p ${CDCHROOTDIR}/{bin,boot,dev/shm,etc,home,lib/dev-state,mnt,proc} \
87 &>/dev/null || die
88 mkdir -p ${CDCHROOTDIR}/etc/{opt,env.d} &>/dev/null || die
89 mkdir -p ${CDCHROOTDIR}/mnt/{floppy,cdrom,magellan} &>/dev/null || die
90 mkdir -p ${CDCHROOTDIR}/{root,sbin,tmp,usr/local,var,opt} &>/dev/null || die
91 for dirname in ${CDCHROOTDIR}/usr ${CDCHROOTDIR}/usr/local
92 do
93 mkdir $dirname/{bin,etc,include,lib,sbin,share,src} &>/dev/null || die
94 ln -s share/{man,doc,info} $dirname &>/dev/null || die
95 mkdir $dirname/share/{dict,doc,info,locale,man} &>/dev/null || die
96 mkdir $dirname/share/{nls,misc,terminfo,zoneinfo} &>/dev/null || die
97 mkdir $dirname/share/man/man{1,2,3,4,5,6,7,8} &>/dev/null || die
98 done
99 mkdir ${CDCHROOTDIR}/var/{lock,log,mail,run,spool} &>/dev/null || die
100 mkdir -p ${CDCHROOTDIR}/var/{tmp,opt,cache,lib/misc,local} &>/dev/null || die
101 mkdir ${CDCHROOTDIR}/opt/{bin,doc,include,info} &>/dev/null || die
102 mkdir -p ${CDCHROOTDIR}/opt/{lib,man/man{1,2,3,4,5,6,7,8}} &>/dev/null || die
103
104 chmod 0750 ${CDCHROOTDIR}/root &> /dev/null || die
105 chmod 1777 ${CDCHROOTDIR}/tmp &> /dev/null || die
106 chmod 1777 ${CDCHROOTDIR}/var/tmp &> /dev/null || die
107
108 ## creating .keep files
109 touch ${CDCHROOTDIR}/{bin,boot,dev/shm,etc,home,lib/dev-state,mnt,proc}/.keep \
110 &>/dev/null || die
111 touch ${CDCHROOTDIR}/etc/{opt,env.d}/.keep &>/dev/null || die
112 touch ${CDCHROOTDIR}/mnt/{floppy,cdrom}/.keep &>/dev/null || die
113 touch ${CDCHROOTDIR}/dev/.keep &>/dev/null || die
114 touch ${CDCHROOTDIR}/etc/.keep &>/dev/null || die
115 touch ${CDCHROOTDIR}/{root,sbin,tmp,usr/local,var,opt}/.keep &>/dev/null || die
116 touch ${CDCHROOTDIR}/usr/.keep &>/dev/null || die
117 for dirname in ${CDCHROOTDIR}/usr ${CDCHROOTDIR}/usr/local
118 do
119 touch $dirname/{bin,etc,include,lib,sbin,share,src}/.keep &>/dev/null || die
120 touch $dirname/share/{dict,doc,info,locale,man}/.keep &>/dev/null || die
121 touch $dirname/share/{nls,misc,terminfo,zoneinfo}/.keep &>/dev/null || die
122 touch $dirname/share/man/man{1,2,3,4,5,6,7,8}/.keep &>/dev/null || die
123 done
124 touch ${CDCHROOTDIR}/var/.keep &>/dev/null || die
125 touch ${CDCHROOTDIR}/var/{lock,log,mail,run,spool}/.keep &>/dev/null || die
126 touch ${CDCHROOTDIR}/var/{tmp,opt,cache,lib/misc,local}/.keep &>/dev/null || die
127 touch ${CDCHROOTDIR}/opt/.keep &>/dev/null || die
128 touch ${CDCHROOTDIR}/opt/{bin,doc,include,info}/.keep &>/dev/null || die
129 touch ${CDCHROOTDIR}/opt/{lib,man/man{1,2,3,4,5,6,7,8}}/.keep &>/dev/null || die
130 touch ${CDCHROOTDIR}/opt/man/.keep &>/dev/null || die
131
132 ##Creating the bash and sh symlinks
133 ln -s /tools/bin/{bash,cat,pwd,stty} ${CDCHROOTDIR}/bin &>/dev/null || die
134 #ln -s /tools/bin/perl ${CDCHROOTDIR}/usr/bin &>/dev/null || die
135 ln -s /tools/lib/libgcc_s.so.1 ${CDCHROOTDIR}/usr/lib &>/dev/null || die
136 ln -s bash ${CDCHROOTDIR}/bin/sh &>/dev/null || die
137 ln -s /tools/bin/{basename,cut,fgrep,grep} ${CDCHROOTDIR}/bin &>/dev/null || die
138 ln -s /tools/bin/whoami ${CDCHROOTDIR}/usr/bin &>/dev/null || die
139 ln -s /tools/bin/{date,ls,egrep,wc} ${CDCHROOTDIR}/bin &>/dev/null || die
140 ln -s /tools/sbin/ldconfig ${CDCHROOTDIR}/sbin/ldconfig &>/dev/null || die
141 ln -s /tools/bin/sed ${CDCHROOTDIR}/bin || die
142 ln -s /tools/bin/dirname ${CDCHROOTDIR}/usr/bin || die
143
144 ## needed empty files (to prevent warnings only)
145 touch ${CDCHROOTDIR}/etc/env.d/dummy || die
146 touch ${CDCHROOTDIR}/etc/profile || die
147 mkdir -p ${CDCHROOTDIR}/etc/rc.d/init.d || die
148 touch ${CDCHROOTDIR}/etc/rc.d/init.d/functions || die
149 ln -snf /etc/rc.d/init.d ${CDCHROOTDIR}/etc/init.d || die
150
151 if [ -n "${DIE}" ]
152 then
153 return 1
154 else
155 return 0
156 fi
157 }
158
159 chroot_generate() {
160 secho Generating Chroot ...
161
162 mecho Creating chroot directory ...
163 mkdir -p ${CDCHROOTDIR} || die
164 evaluate_retval
165
166 mecho Unpacking toolchain ...
167 if [ "${CDTOOLCHAIN##*.}" == "bz2" ]
168 then
169 tar xjpmf ${CDTOOLCHAIN} -C ${CDCHROOTDIR}
170 evaluate_retval
171 fi
172
173 if [ "${CDTOOLCHAIN##*.}" == "gz" ]
174 then
175 tar xzpmf ${CDTOOLCHAIN} -C ${CDCHROOTDIR}
176 evaluate_retval
177 fi
178
179 mecho Changing ownership of the toolchain ...
180 chown -R 0:0 ${CDCHROOTDIR}/tools
181 evaluate_retval
182
183 mecho Creating directories and symlinks ...
184 create_chrootdirs
185 evaluate_retval
186
187 mecho Creating needed devices for devfs/udev ...
188 ( mknod -m 611 ${CDCHROOTDIR}/dev/console c 5 1 &>/dev/null && \
189 chgrp 4 ${CDCHROOTDIR}/dev/console &>/dev/null &&
190 mknod -m 666 ${CDCHROOTDIR}/dev/null c 1 3 &>/dev/null )
191 evaluate_retval
192
193 mecho Creating basic passwd file ...
194 cat > ${CDCHROOTDIR}/etc/passwd << "EOF"
195 root:x:0:0:root:/root:/bin/bash
196 EOF
197 evaluate_retval
198
199 mecho Creating basic groups file ...
200 cat > ${CDCHROOTDIR}/etc/group << "EOF"
201 root:x:0:
202 bin:x:1:
203 sys:x:2:
204 kmem:x:3:
205 tty:x:4:
206 tape:x:5:
207 daemon:x:6:
208 floppy:x:7:
209 disk:x:8:
210 lp:x:9:
211 dialout:x:10:
212 audio:x:11:
213 EOF
214 evaluate_retval
215 }
216
217 enter_chroot() {
218 secho Entering Chroot ...
219 mount proc ${CDCHROOTDIR}/proc -t proc
220 # devfs is deprecated with kernel-2.6
221 #mount devfs ${CDCHROOTDIR}/dev -t devfs
222 mount -o bind /dev ${CDCHROOTDIR}/dev
223
224 getstate
225 if [ "${CDSTATE}" != "null" ]
226 then
227 chroot ${CDCHROOTDIR} /usr/bin/env -i \
228 HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
229 PATH=/bin:/usr/bin:/sbin:/usr/sbin \
230 /bin/bash -i
231 else
232 chroot ${CDCHROOTDIR} /tools/bin/env -i \
233 HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
234 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
235 /tools/bin/bash -i
236 fi
237
238 secho Unmounting Chroot filesystems ...
239 ( umount ${CDCHROOTDIR}/proc && \
240 umount ${CDCHROOTDIR}/dev )
241 evaluate_retval
242 }
243
244 install_mage_bashrc() {
245 cat >> ${CDCHROOTDIR}/root/.bashrc << "EOF"
246 mecho Updating MAGE tree ...
247 mage update &> /dev/null
248 evaluate_retval
249 EOF
250 }
251
252 install_cdlayout_bashrc() {
253 cat >> ${CDCHROOTDIR}/root/.bashrc << "EOF"
254 secho Installing CD Layout ...
255 for package in $(cat /bootstrap/${CDLAYOUTFILE})
256 do
257 if [ -n "$package" ]
258 then
259 mecho Installing ${package}
260 #unset CONFIG_PROTECT and install
261 CONFIG_PROTECT="-*" /sbin/mage install ${package} #&> /dev/null
262 #echo "debug: next"
263 #read
264 evaluate_retval
265 fi
266 done
267
268 #needed for >=mage-0.3.6
269 mecho Running etc-update ...
270 etc-update
271 evaluate_retval
272
273 mecho Cleaning MAGE tree ...
274 /sbin/mage clean &> /dev/null
275 evaluate_retval
276
277 secho CD Layout Installation complete.
278 EOF
279 }
280
281 import_functions_bashrc() {
282 cat ${rc_functions} > ${CDCHROOTDIR}/root/.bashrc
283 cat >> ${CDCHROOTDIR}/root/.bashrc << "EOF"
284 die() {
285 DIE="yes"
286 }
287 secho() {
288 local I
289 I="$@"
290 echo -e "\n${COLOREDSTAR}${I}"
291 }
292 mecho() {
293 local I
294 I="$@"
295 echo -e "${COLMAGENTA}\t${I}${COLDEFAULT}"
296 }
297 EOF
298 echo "export CDLAYOUTFILE=${CDLAYOUTFILE}" \
299 >> ${CDCHROOTDIR}/root/.bashrc
300 echo "export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin" \
301 >> ${CDCHROOTDIR}/root/.bashrc
302 }
303
304 cleanup_chrootdir() {
305 secho Cleaning up Chroot directory ...
306
307 mecho Deleting bootstrap files ...
308 rm -rf ${CDCHROOTDIR}/bootstrap
309 evaluate_retval
310
311 mecho Deleting toolchain ...
312 rm -rf ${CDCHROOTDIR}/tools
313 evaluate_retval
314
315 mecho Deleting bootstrap scripts ...
316 ( rm -rf ${CDCHROOTDIR}/root/.bashrc
317 rm -rf ${CDCHROOTDIR}/root/.bash_history )
318 evaluate_retval
319
320 touch ${LIVECDROOT}/.chcleanedok
321 }
322
323 build_bootstrap() {
324 secho Preparing Chroot ...
325 mecho Copy MAGE files to Chroot ...
326 ( install -d ${CDCHROOTDIR}/bootstrap && \
327 cp -R ${CDMAGEDIR}/* ${CDCHROOTDIR}/bootstrap )
328 evaluate_retval
329
330 # installing mage to CDCHROOTDIR
331 mecho Installing Mage ...
332 ( chmod 0755 ${CDCHROOTDIR}/bootstrap/setup_mage.sh && \
333 ${CDCHROOTDIR}/bootstrap/setup_mage.sh \
334 ${CDCHROOTDIR} ${CDCHROOTDIR}/bootstrap ${CDMAGERC} ${CDMAGEPROFILE} )
335 evaluate_retval
336
337 mecho Creating taskfile ...
338 ( import_functions_bashrc && \
339 install_mage_bashrc && \
340 install_cdlayout_bashrc && \
341 echo "exit" >> ${CDCHROOTDIR}/root/.bashrc )
342 evaluate_retval
343
344 mecho Copy CD layout files ...
345 cp ${CDLAYOUTDIR}/${CDLAYOUTFILE} ${CDCHROOTDIR}/bootstrap
346 evaluate_retval
347
348 mecho Mounting Chroot filesystems ...
349 ( mount proc ${CDCHROOTDIR}/proc -t proc && \
350 mount -o bind /dev ${CDCHROOTDIR}/dev )
351 evaluate_retval
352
353 secho Starting bootstrap ...
354 chroot ${CDCHROOTDIR} /tools/bin/env -i \
355 HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
356 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
357 /tools/bin/bash -i
358
359 mecho Unmounting Chroot filesystems ...
360 ( umount ${CDCHROOTDIR}/proc && \
361 umount ${CDCHROOTDIR}/dev )
362 evaluate_retval
363
364 touch ${LIVECDROOT}/.bootstrapok
365 }
366
367
368 build_initrd() {
369 secho Building initrd ...
370
371 if [ -e ${LIVECDROOT}/initrd ]
372 then
373 mecho Removing old initrd
374 rm -f ${LIVECDROOT}/initrd
375 fi
376
377 if [ -e ${LIVECDROOT}/initrd.gz ]
378 then
379 mecho Removing old initrd.gz
380 rm -f ${LIVECDROOT}/initrd.gz
381 fi
382
383 if [ -d ${LIVECDROOT}/tmp/${CLOOPDIR} ]
384 then
385 mecho Removing old cloop files
386 rm -rf ${LIVECDROOT}/tmp/${CLOOPDIR}
387 fi
388
389 if [ -d ${LIVECDROOT}/tmp/${BUSYBOXDIR} ]
390 then
391 mecho Removing old busybox files
392 rm -rf ${LIVECDROOT}/tmp/${BUSYBOXDIR}
393 fi
394
395 mecho Unpacking needed files ...
396 ( mkdir -p ${LIVECDROOT}/tmp && \
397 tar xjf ${CDLAYOUTDIR}/${CLOOPFILE} -C ${LIVECDROOT}/tmp && \
398 tar xjf ${CDLAYOUTDIR}/${BUSYBOXFILE} -C ${LIVECDROOT}/tmp )
399 evaluate_retval
400
401 mecho Creating Image file ...
402 dd if=/dev/zero of=${LIVECDROOT}/initrd bs=1024 count=6144 \
403 &> /dev/null
404 evaluate_retval
405
406 mecho Formating Image file ...
407 mke2fs -m 0 -i 1024 -F ${LIVECDROOT}/initrd &> /dev/null
408 evaluate_retval
409
410 mecho Mounting Image file ...
411 ( mkdir -p ${CDINITRD} && \
412 mount -o loop ${LIVECDROOT}/initrd ${CDINITRD} )
413 evaluate_retval
414
415 mecho Creating basic filesystem ...
416 ( mkdir -p ${CDINITRD}/{bin,etc/conf.d,lib/modules/misc,dev/pts,proc,mnt,usr,sys} && \
417 cat > ${CDINITRD}/etc/fstab << "EOF"
418 /dev/ram0 / cramfs defaults
419 proc /proc proc defaults 0 0
420 EOF
421 #installing cloop
422 cp ${LIVECDROOT}/tmp/${CLOOPDIR}/cloop.o ${CDINITRD}/lib/modules/misc && \
423
424 #installing busybox
425 cp ${LIVECDROOT}/tmp/${BUSYBOXDIR}/busybox ${CDINITRD}/bin && \
426 chmod 0755 ${CDINITRD}/bin/busybox && \
427 for i in '[' ash basename cat cut chroot clear cp dirname echo env false find \
428 grep gunzip gzip insmod ln ls loadkmap losetup lsmod mkdir mknod modprobe more mount mv \
429 pivot_root ps pwd rm rmdir rmmod sh sleep tar test touch true umount uname \
430 xargs yes zcat chmod chown
431 do
432 rm -f ${CDINITRD}/bin/$i
433 ln ${CDINITRD}/bin/busybox ${CDINITRD}/bin/$i
434 done && \
435 #symlink bin to sbin -> init & insmod resist normally in sbin
436 ln -s bin ${CDINITRD}/sbin && \
437 ln -s ../bin ${CDINITRD}/usr/bin && \
438 ln -s ../bin ${CDINITRD}/usr/sbin && \
439 bzcat ${CDLAYOUTDIR}/MAKEDEV-1.7.bz2 > \
440 ${CDCHROOTDIR}/dev/MAKEDEV && \
441 chmod 754 ${CDCHROOTDIR}/dev/MAKEDEV && \
442 cd ${CDCHROOTDIR}/dev && \
443 ./MAKEDEV -v generic-nopty &> /dev/null && \
444 cd ${LIVECDROOT} && \
445 mknod -m 600 ${CDINITRD}/dev/console c 5 1 && \
446 mknod -m 666 ${CDINITRD}/dev/null c 1 3
447 cp ${CDCHROOTDIR}/etc/conf.d/kernel ${CDINITRD}/etc/conf.d/kernel )
448 evaluate_retval
449
450 # need udev ?
451 if [ -f ${CDCHROOTDIR}/sbin/udev.static ]
452 then
453 mecho Installing udev support ...
454 ( cp ${CDCHROOTDIR}/sbin/udev.static ${CDINITRD}/sbin/udev && \
455 cp ${CDCHROOTDIR}/sbin/udevd.static ${CDINITRD}/sbin/udevd && \
456 cp ${CDCHROOTDIR}/sbin/udevsend.static ${CDINITRD}/sbin/udevsend && \
457 cp ${CDCHROOTDIR}/sbin/wait_for_sysfs.static ${CDINITRD}/sbin/wait_for_sysfs && \
458 cp ${CDCHROOTDIR}/sbin/scsi_id.static ${CDINITRD}/sbin/scsi_id && \
459 cp ${CDCHROOTDIR}/sbin/udev_volume_id.static ${CDINITRD}/sbin/udev_volume_id && \
460 cp ${CDCHROOTDIR}/etc/scsi_id.config ${CDINITRD}/etc && \
461 mkdir -p ${CDINITRD}/etc/hotplug.d/default && \
462 ln -snf ../../../sbin/udevsend ${CDINITRD}/etc/hotplug.d/default/10-udev.hotplug && \
463 ln -snf ../../../sbin/wait_for_sysfs ${CDINITRD}/etc/hotplug.d/default/05-wait_for_sysfs.hotplug && \
464 ln -s /sbin/udev ${CDINITRD}/sbin/udevstart && \
465 cp -a ${CDCHROOTDIR}/etc/udev ${CDINITRD}/etc/ )
466 evaluate_retval
467 fi
468
469 # install modules
470 install -d ${CDINITRD}/modules
471 source ${CDCHROOTDIR}/boot/kernelversion
472 CDMODDIR=${CDCHROOTDIR}/lib/modules/${KRNLIB}/kernel
473
474 if [ -e ${CDLAYOUTDIR}/mods_scsi ]
475 then
476 mecho "Installing scsi modules"
477 install -d ${CDINITRD}/modules/scsi
478 for i in $(< ${CDLAYOUTDIR}/mods_scsi)
479 do
480 find ${CDMODDIR} -type f -name ${i}* -exec cp -a '{}' ${CDINITRD}/modules/scsi ';'
481 done
482 cat ${CDLAYOUTDIR}/mods_scsi > ${CDINITRD}/mods_scsi
483 fi
484
485 if [ -e ${CDLAYOUTDIR}/mods_usb ]
486 then
487 mecho "Installing usb modules"
488 install -d ${CDINITRD}/modules/usb
489 for i in $(< ${CDLAYOUTDIR}/mods_usb)
490 do
491 find ${CDMODDIR} -type f -name ${i}* -exec cp -a '{}' ${CDINITRD}/modules/usb ';'
492 done
493 cat ${CDLAYOUTDIR}/mods_usb > ${CDINITRD}/mods_usb
494 fi
495
496 #install insmod
497 cp -a ${CDCHROOTDIR}/sbin/insmod.static ${CDINITRD}/bin/insmod.static
498 cp -a ${CDCHROOTDIR}/sbin/insmod.static.old ${CDINITRD}/bin/insmod.static.old
499
500 #install passwd & group file
501 install -d ${CDINITRD}/etc
502 cat ${CDCHROOTDIR}/etc/passwd > ${CDINITRD}/etc/passwd
503 cat ${CDCHROOTDIR}/etc/group > ${CDINITRD}/etc/group
504
505 #install static sed
506 install -d ${CDINITRD}/bin
507 tar xjf ${CDLAYOUTDIR}/${SEDFILE} -C ${LIVECDROOT}/tmp
508 cp ${LIVECDROOT}/tmp/${SEDDIR}/sed ${CDINITRD}/bin
509
510 mecho Creating linuxrc ...
511 ( cat ${CDLAYOUTDIR}/linuxrc > ${CDINITRD}/linuxrc && \
512 chmod 0755 ${CDINITRD}/linuxrc )
513 evaluate_retval
514
515 mecho Unmounting Image file ...
516 umount ${CDINITRD}
517 evaluate_retval
518
519 mecho Compressing Image file
520 gzip -9 ${LIVECDROOT}/initrd
521 evaluate_retval
522
523 touch ${LIVECDROOT}/.initrdok
524 }
525
526
527 prepare_iso() {
528 secho Preparing LiveCD ISO Image ...
529
530 if [ -e ${LIVECDROOT}/${CDISONAME} ]
531 then
532 mecho Removing old cdimage
533 rm -f ${LIVECDROOT}/${CDISONAME}
534 fi
535
536 # fixes some issues with xfree/xorg xkb
537 if [ -L "${CDCHROOTDIR}/etc/X11/xkb" -a -d "/usr/X11R6/lib/X11/xkb" ]
538 then
539 mecho fixing xkb symlink
540 rm ${CDCHROOTDIR}/etc/X11/xkb
541 mv ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb ${CDCHROOTDIR}/etc/X11
542 ln -s ../../../../etc/X11/xkb ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb
543 fi
544
545 mecho Creating missing devices ...
546 ( bzcat ${CDLAYOUTDIR}/MAKEDEV-1.7.bz2 > \
547 ${CDCHROOTDIR}/dev/MAKEDEV && \
548 chmod 754 ${CDCHROOTDIR}/dev/MAKEDEV && \
549 cd ${CDCHROOTDIR}/dev && \
550 ./MAKEDEV -v generic-nopty &> /dev/null && \
551 cd ${LIVECDROOT} )
552 evaluate_retval
553
554 mecho Creating LiveCD Config files ...
555 ( cat ${CDLAYOUTDIR}/inittab > \
556 ${CDCHROOTDIR}/etc/inittab && \
557 chmod 0644 ${CDCHROOTDIR}/etc/inittab && \
558 cat ${CDLAYOUTDIR}/fstab > \
559 ${CDCHROOTDIR}/etc/fstab && \
560 chmod 0644 ${CDCHROOTDIR}/etc/fstab && \
561 cat ${CDLAYOUTDIR}/motd > \
562 ${CDCHROOTDIR}/etc/motd && \
563 chmod 0644 ${CDCHROOTDIR}/etc/motd && \
564 cat ${CDLAYOUTDIR}/issue > \
565 ${CDCHROOTDIR}/etc/issue && \
566 chmod 0644 ${CDCHROOTDIR}/etc/issue && \
567 echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname )
568 evaluate_retval
569
570 mecho Setting up services ...
571 ( cat >> ${CDCHROOTDIR}/root/.bashrc << "EOF"
572
573 # change mountfs with mountfslivecd
574 rc-config del mountfs
575 rc-config add mountfslivecd
576
577 # add hardware detection
578 rc-config add hwdetect
579
580 # del checkfs
581 rc-config del checkfs
582
583 #exit
584 exit
585 EOF
586 # run it
587 enter_chroot
588
589 # clean up
590 if [ -e ${CDCHROOTDIR}/root/.bashrc ]
591 then
592 rm ${CDCHROOTDIR}/root/.bashrc
593 fi
594 if [ -e ${CDCHROOTDIR}/root/.bash_history ]
595 then
596 rm ${CDCHROOTDIR}/root/.bash_history
597 fi )
598 evaluate_retval
599
600 mecho Cleaning unwanted files ...
601 ( if [ -e ${CDCHROOTDIR}/etc/mtab ]
602 then
603 rm ${CDCHROOTDIR}/etc/mtab
604 fi && \
605 touch ${CDCHROOTDIR}/etc/mtab
606 )
607 evaluate_retval
608
609 # mingetty needs a passwordless user for autologin
610 # so we unset the password for 'root'
611 cat > ${CDCHROOTDIR}/root/.bashrc << "EOF"
612 passwd -d root
613 exit
614 EOF
615
616 # run it
617 enter_chroot
618 if [ -e ${CDCHROOTDIR}/root/.bashrc ]
619 then
620 rm -f ${CDCHROOTDIR}/root/.bashrc
621 fi
622
623 if [ -e ${CDLAYOUTDIR}/clean.sh ]
624 then
625 mecho Running User clean sript
626 ( chmod 0755 ${CDLAYOUTDIR}/clean.sh && \
627 ${CDLAYOUTDIR}/clean.sh )
628 evaluate_retval
629 fi
630
631 touch ${LIVECDROOT}/.isoprepareok
632 }
633
634 generate_iso() {
635 secho Creating LiveCD ISO Image ...
636
637 if [ -f ${LIVECDROOT}/${CDISONAME} ]
638 then
639 mecho Removing old ISO image ...
640 rm -f ${LIVECDROOT}/${CDISONAME}
641 evaluate_retval
642 fi
643
644 if [ -f ${CDISOROOT}/$CDID ]
645 then
646 mecho Removing old CD ID ...
647 rm -f ${CDISOROOT}/$CDID
648 evaluate_retval
649 fi
650
651 #for loopback only
652 if [ -f ${CDISOROOT}/livecdrootfs ]
653 then
654 if [ ! -e ${LIVECDROOT}/noloopcreate ]
655 then
656 mecho Removing old CD rootfs ...
657 rm -f ${CDISOROOT}/livecdrootfs
658 evaluate_retval
659 fi
660 fi
661
662 #for cloop loopback only
663 if [ -f ${CDISOROOT}/livecdrootfs.cloop ]
664 then
665 if [ ! -e ${LIVECDROOT}/noloopcreate ]
666 then
667 mecho Removing old CD rootfs ...
668 rm -f ${CDISOROOT}/livecdrootfs.cloop
669 evaluate_retval
670 fi
671 fi
672
673 #for squashfs loopback only
674 if [ -f ${CDISOROOT}/livecdrootfs.sqsh ]
675 then
676 if [ ! -e ${LIVECDROOT}/noloopcreate ]
677 then
678 mecho Removing old CD rootfs ...
679 rm -f ${CDISOROOT}/livecdrootfs.sqsh
680 evaluate_retval
681 fi
682 fi
683
684 if [ -d ${CDISOROOT}/isolinux ]
685 then
686 mecho Removing old Bootloader ...
687 rm -rf ${CDISOROOT}/isolinux
688 evaluate_retval
689 fi
690
691 mecho Creating CD ID ...
692 ( mkdir -p ${CDISOROOT} && \
693 touch ${CDISOROOT}/$CDID )
694 evaluate_retval
695
696 mecho Installing Bootloader ...
697 ( mkdir -p ${CDISOROOT}/isolinux && \
698 tar xjf ${CDLAYOUTDIR}/syslinux-2.08.tar.bz2 \
699 -C ${CDCHROOTDIR}/usr/src && \
700 cp ${CDCHROOTDIR}/usr/src/syslinux-2.08/isolinux.bin \
701 ${CDISOROOT}/isolinux && \
702 rm -rf ${CDCHROOTDIR}/usr/src/* && \
703 cp -R ${CDCHROOTDIR}/boot/* ${CDISOROOT}/isolinux && \
704 cp ${CDLAYOUTDIR}/isolinux.cfg ${CDISOROOT}/isolinux && \
705 cp ${CDLAYOUTDIR}/boot.lss ${CDISOROOT}/isolinux && \
706 cp ${CDLAYOUTDIR}/boot.msg ${CDISOROOT}/isolinux && \
707 cp ${CDLAYOUTDIR}/help.msg ${CDISOROOT}/isolinux && \
708 cp ${LIVECDROOT}/initrd.gz ${CDISOROOT}/isolinux && \
709 source ${CDISOROOT}/isolinux/kernelversion && \
710 cp ${CDISOROOT}/isolinux/${KRNIMG} \
711 ${CDISOROOT}/isolinux/${CDKERNELNAME} )
712 evaluate_retval
713
714 if [ ! -e ${LIVECDROOT}/noloopcreate ]
715 then
716 case ${CDCOMPRESS_METHOD} in
717 cloop)
718 mecho Generating rootfs loopfile ...
719 ( cd ${LIVECDROOT} && \
720 export CDISOLOOPSIZE="$(expr 20000 + $(du -Ds chroot|cut -d 'c' -f1))" && \
721 dd if=/dev/zero of=${LIVECDROOT}/livecdrootfs bs=1024 count=${CDISOLOOPSIZE} &> /dev/null )
722 evaluate_retval
723
724 mecho Formating rootfs loopfile ...
725 mke2fs -m 0 -i 1024 -F ${LIVECDROOT}/livecdrootfs &> /dev/null
726 evaluate_retval
727
728 mecho Mounting Image file ...
729 ( mkdir -p ${CDISOLOOP} && \
730 mount -o loop ${LIVECDROOT}/livecdrootfs ${CDISOLOOP} )
731 evaluate_retval
732
733 mecho Copying rootfs to loopfile ...
734 cp -a ${CDCHROOTDIR}/* ${CDISOLOOP}
735 evaluate_retval
736
737 mecho Unmounting Image file ...
738 umount ${CDISOLOOP}
739 evaluate_retval
740
741 mecho Compressing rootfs loopfile ...
742 ( cat ${LIVECDROOT}/livecdrootfs | ${LIVECDROOT}/tmp/${CLOOPDIR}/create_compressed_fs - 131072 > livecdrootfs.cloop ) >/dev/null 2>&1
743 evaluate_retval
744
745 mecho Moving rootfs loopfile to isoroot ...
746 ( rm -f ${LIVECDROOT}/livecdrootfs && \
747 mv ${LIVECDROOT}/livecdrootfs.cloop ${CDISOROOT} )
748 evaluate_retval
749 ;;
750
751 squashfs)
752 mecho Generating squashfs compressed rootfs loopfile ...
753 mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh >/dev/null 2>&1
754 evaluate_retval
755
756 mecho Moving rootfs loopfile to isoroot ...
757 mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}
758 evaluate_retval
759 ;;
760 esac
761 fi
762
763 mecho Generating ISO Image ...
764 ( cd ${CDISOROOT} && \
765 mkisofs -R -l -L -D -o ${LIVECDROOT}/${CDISONAME} \
766 -b isolinux/isolinux.bin -c isolinux/boot.cat \
767 -no-emul-boot -boot-load-size 4 -boot-info-table -V "${CDID}" \
768 ${CDISOROOT} &> /dev/null && \
769 cd ${LIVECDROOT} )
770 evaluate_retval
771
772 touch ${LIVECDROOT}/.isoimageok
773 }
774
775 livecddelete() {
776 secho Deleting *ALL* LiveCD generated files ...
777
778 if [ -f ${LIVECDROOT}/.??* ]
779 then
780 mecho Deleting state files ..
781 rm -f ${LIVECDROOT}/.??*
782 evaluate_retval
783 fi
784
785 if [ -d ${LIVECDROOT}/chroot ]
786 then
787 mecho Deleting system dir ...
788 rm -rf ${LIVECDROOT}/chroot
789 evaluate_retval
790 fi
791
792 if [ -d ${LIVECDROOT}/mntinitrd ]
793 then
794 mecho Deleting initrd mount dir ...
795 rm -rf ${LIVECDROOT}/mntinitrd
796 evaluate_retval
797 fi
798
799 if [ -f ${LIVECDROOT}/initrd ]
800 then
801 mecho Deleting initrd
802 rm -f ${LIVECDROOT}/initrd
803 evaluate_retval
804 fi
805
806 if [ -f ${LIVECDROOT}/initrd.gz ]
807 then
808 mecho Deleting initrd.gz
809 rm -f ${LIVECDROOT}/initrd.gz
810 evaluate_retval
811 fi
812
813 if [ -f ${LIVECDROOT}/${CDISONAME} ]
814 then
815 mecho Deleting isoimage ...
816 rm -f ${LIVECDROOT}/${CDISONAME}
817 evaluate_retval
818 fi
819
820 if [ -d ${CDISOLOOP} ]
821 then
822 mecho Deleting looptemp ...
823 rm -rf ${CDISOLOOP}
824 evaluate_retval
825 fi
826
827 if [ -d ${CDISOROOT} ]
828 then
829 mecho Deleting isoroot ...
830 rm -rf ${CDISOROOT}
831 evaluate_retval
832 fi
833
834 if [ -d ${LIVECDROOT}/tmp ]
835 then
836 mecho Deleting tmp dir ...
837 rm -rf ${LIVECDROOT}/tmp
838 evaluate_retval
839 fi
840
841 if [ -e ${LIVECDROOT}/noloopcreate ]
842 then
843 rm -f ${LIVECDROOT}/noloopcreate
844 fi
845 }
846
847
848 getstate() {
849 CDSTATE=""
850 for i in ${LIVECDROOT}/.??*
851 do
852 case ${i} in
853 ${LIVECDROOT}/.bootstrapok)
854 CDSTATE="bootstrapok"
855 ;;
856 ${LIVECDROOT}/.chcleanedok)
857 CDSTATE="chcleanedok"
858 ;;
859 ${LIVECDROOT}/.isoprepareok)
860 CDSTATE="isoprepareok"
861 ;;
862 ${LIVECDROOT}/.initrdok)
863 CDSTATE="initrdok"
864 ;;
865 ${LIVECDROOT}/.isoimageok)
866 CDSTATE="isoimageok"
867 ;;
868 *)
869 CDSTATE="none"
870 ;;
871 esac
872 done
873 }
874
875
876 ## running part ##
877
878 case "$1" in
879 bootstrap)
880 showversion
881 getstate
882 if [ "${CDSTATE}" == "none" ]
883 then
884 chroot_generate
885 build_bootstrap
886 echo -e "\nYou can run now 'cleanchroot' ..."
887 else
888 mecho Whipe out old system first
889 fi
890 ;;
891 cleanchroot)
892 showversion
893 getstate
894 if [ "${CDSTATE}" == "bootstrapok" ]
895 then
896 cleanup_chrootdir
897 rm -f ${LIVECDROOT}/.bootstrapok
898 echo -e "\nYou can run now 'prepareiso' ..."
899 else
900 mecho You must run bootstrap first
901 fi
902 ;;
903 prepareiso)
904 showversion
905 getstate
906 if [ "${CDSTATE}" == "chcleanedok" ]
907 then
908 prepare_iso
909 rm -f ${LIVECDROOT}/.chcleanedok
910 echo -e "\nYou can run now 'initrd' ..."
911 else
912 mecho Please clean chroot first
913 fi
914 ;;
915 initrd)
916 showversion
917 getstate
918 if [ "${CDSTATE}" == "isoprepareok" ] || \
919 [ "${CDSTATE}" == "isoimageok" ]
920 then
921 build_initrd
922 if [ -e ${LIVECDROOT}/.isoprepareok ]
923 then
924 rm -f ${LIVECDROOT}/.isoprepareok
925 fi
926 if [ -e ${LIVECDROOT}/.isoimageok ]
927 then
928 rm -f ${LIVECDROOT}/.isoimageok
929 fi
930 echo -e "\nYou can run now 'isogen' ..."
931 else
932 mecho Please prepare your iso first
933 fi
934 ;;
935 isogen)
936 showversion
937 getstate
938 if [ "${CDSTATE}" == "initrdok" ] || \
939 [ "${CDSTATE}" == "isoimageok" ]
940 then
941 generate_iso
942 rm -f ${LIVECDROOT}/.initrdok
943 else
944 mecho Please run initrd first
945 fi
946 ;;
947 enter)
948 showversion
949 getstate
950 if [ "${CDSTATE}" != "none" ]
951 then
952 enter_chroot
953 else
954 mecho Please build a system first
955 fi
956 ;;
957
958 delete)
959 showversion
960 livecddelete
961 ;;
962 makeall)
963 showversion
964 getstate
965 if [ "${CDSTATE}" == "none" ]
966 then
967 chroot_generate
968 build_bootstrap
969 cleanup_chrootdir
970 rm -f ${LIVECDROOT}/.bootstrapok
971 prepare_iso
972 rm -f ${LIVECDROOT}/.chcleanedok
973 build_initrd
974 rm -f ${LIVECDROOT}/.isoprepareok
975 generate_iso
976 rm -f ${LIVECDROOT}/.initrdok
977 else
978 mecho Please wipe out your old LiveCD first
979 fi
980 ;;
981 *)
982 showversion
983 echo -e "Usage: $0 [Option] ..."
984 echo -e "\nBuilding Options:"
985 echo -e " bootstrap - builds cd system"
986 echo -e " cleanchroot - cleans chroot"
987 echo -e "\nIso Prepare Options:"
988 echo -e " prepareiso - prepares files for isogen"
989 echo -e " initrd - builds initrd"
990 echo -e " isogen - creates isoimage"
991 echo -e "\nOther Options:"
992 echo -e " enter - chroot cd system"
993 echo -e " delete - deletes all generated files"
994 echo -e " makeall - builds stright ahead the livecd\n"
995 ;;
996 esac

Properties

Name Value
svn:executable *