Magellan Linux

Contents of /trunk/mlivecdbuild/mlivecdbuild.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 154 - (show annotations) (download) (as text)
Mon Jul 4 00:42:48 2005 UTC (18 years, 10 months ago) by niro
File MIME type: application/x-sh
File size: 25958 byte(s)
fixed to a non versionized default livecdroot

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

Properties

Name Value
svn:executable *