Magellan Linux

Contents of /trunk/mlivecdbuild/mlivecdbuild.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 101 - (show annotations) (download) (as text)
Fri Jul 1 17:15:42 2005 UTC (18 years, 10 months ago) by niro
File MIME type: application/x-sh
File size: 25697 byte(s)
fixed another typo

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

Properties

Name Value
svn:executable *