Magellan Linux

Annotation of /trunk/mlivecdbuild/mlivecdbuild.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 26 - (hide annotations) (download) (as text)
Wed Jan 5 05:29:26 2005 UTC (19 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 29737 byte(s)
mlivecdbuild-0.3.6-r7 import

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

Properties

Name Value
svn:executable *