Magellan Linux

Annotation of /trunk/mlivecdbuild/mlivecdbuild.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 144 - (hide 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 niro 26 #!/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 niro 92 export CDISONAME=magellan-livecd.iso
17     export CDHOSTNAME=magellan-live
18 niro 26 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 niro 92 # usbstick: vfat doesn't like CAPS and strings longer than 8 chars
25 niro 26 export CDID=cdid
26     export VERSION=0.3.6-r7
27     export CDINITRD=${LIVECDROOT}/mntinitrd
28     export CDISOLOOP=${LIVECDROOT}/isoloop
29 niro 92
30     # kernel 2.4.22 needs cloop-1.02, smaller or above will not work >:/ *grrr*
31 niro 26 export CLOOPFILE=cloop-1.02-precompiled.tar.bz2
32     export CLOOPDIR=cloop-1.02
33    
34 niro 92 # busybox-0.60.3 is official stable
35 niro 26 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 niro 92 # creating directories
86 niro 26 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 niro 92 #ln -s /tools/bin/perl ${CDCHROOTDIR}/usr/bin &>/dev/null || die
135 niro 26 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 niro 92 ## needed empty files (to prevent warnings only)
145     touch ${CDCHROOTDIR}/etc/env.d/dummy || die
146     touch ${CDCHROOTDIR}/etc/profile || die
147 niro 144 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 niro 92
151 niro 26 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 niro 92 mecho Creating needed devices for devfs/udev ...
188 niro 26 ( 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 niro 92 # devfs is deprecated with kernel-2.6
221     #mount devfs ${CDCHROOTDIR}/dev -t devfs
222     mount -o bind /dev ${CDCHROOTDIR}/dev
223 niro 26
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 niro 92
268 niro 26 #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 niro 92
307 niro 26 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 niro 92 # installing mage to CDCHROOTDIR
331 niro 26 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 niro 99 mount -o bind /dev ${CDCHROOTDIR}/dev )
351 niro 26 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 niro 92
364 niro 26 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 niro 92
383 niro 26 if [ -d ${LIVECDROOT}/tmp/${CLOOPDIR} ]
384     then
385     mecho Removing old cloop files
386     rm -rf ${LIVECDROOT}/tmp/${CLOOPDIR}
387     fi
388 niro 92
389 niro 26 if [ -d ${LIVECDROOT}/tmp/${BUSYBOXDIR} ]
390     then
391     mecho Removing old busybox files
392     rm -rf ${LIVECDROOT}/tmp/${BUSYBOXDIR}
393     fi
394 niro 92
395 niro 26 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 niro 92
401 niro 26 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 niro 92
424 niro 26 #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 niro 92 #symlink bin to sbin -> init & insmod resist normally in sbin
436 niro 26 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 niro 92 mknod -m 666 ${CDINITRD}/dev/null c 1 3
447 niro 26 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 niro 101 # install modules
470 niro 26 install -d ${CDINITRD}/modules
471 niro 101 source ${CDCHROOTDIR}/boot/kernelversion
472 niro 26 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 niro 144 # fixes some issues with xfree/xorg xkb
537 niro 26 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 niro 144 echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname )
568 niro 26 evaluate_retval
569    
570     mecho Setting up services ...
571     ( cat >> ${CDCHROOTDIR}/root/.bashrc << "EOF"
572 niro 92
573 niro 144 # change mountfs with mountfslivecd
574 niro 26 rc-config del mountfs
575     rc-config add mountfslivecd
576 niro 92
577 niro 144 # add hardware detection
578 niro 26 rc-config add hwdetect
579 niro 92
580 niro 144 # del checkfs
581 niro 26 rc-config del checkfs
582 niro 92
583 niro 26 #exit
584     exit
585     EOF
586 niro 144 # run it
587 niro 26 enter_chroot
588 niro 92
589 niro 144 # clean up
590 niro 26 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 niro 92
600 niro 26 mecho Cleaning unwanted files ...
601     ( if [ -e ${CDCHROOTDIR}/etc/mtab ]
602     then
603     rm ${CDCHROOTDIR}/etc/mtab
604     fi && \
605 niro 92 touch ${CDCHROOTDIR}/etc/mtab
606 niro 26 )
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 niro 144 # run it
617 niro 26 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 niro 92
651 niro 26 #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 niro 92
662 niro 26 #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 niro 92
673 niro 26 #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 niro 92
691 niro 26 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 niro 92
724 niro 26 mecho Formating rootfs loopfile ...
725     mke2fs -m 0 -i 1024 -F ${LIVECDROOT}/livecdrootfs &> /dev/null
726     evaluate_retval
727 niro 92
728 niro 26 mecho Mounting Image file ...
729     ( mkdir -p ${CDISOLOOP} && \
730     mount -o loop ${LIVECDROOT}/livecdrootfs ${CDISOLOOP} )
731     evaluate_retval
732 niro 92
733 niro 26 mecho Copying rootfs to loopfile ...
734     cp -a ${CDCHROOTDIR}/* ${CDISOLOOP}
735     evaluate_retval
736 niro 92
737 niro 26 mecho Unmounting Image file ...
738     umount ${CDISOLOOP}
739     evaluate_retval
740 niro 92
741 niro 26 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 niro 92
745 niro 26 mecho Moving rootfs loopfile to isoroot ...
746     ( rm -f ${LIVECDROOT}/livecdrootfs && \
747     mv ${LIVECDROOT}/livecdrootfs.cloop ${CDISOROOT} )
748     evaluate_retval
749     ;;
750 niro 92
751 niro 26 squashfs)
752     mecho Generating squashfs compressed rootfs loopfile ...
753     mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh >/dev/null 2>&1
754     evaluate_retval
755 niro 92
756 niro 26 mecho Moving rootfs loopfile to isoroot ...
757     mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}
758     evaluate_retval
759     ;;
760     esac
761     fi
762 niro 92
763 niro 26 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 *