Magellan Linux

Annotation of /trunk/mlivecdbuild/mlivecdbuild.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 101 - (hide 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 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    
148 niro 26 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 niro 92 mecho Creating needed devices for devfs/udev ...
185 niro 26 ( 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 niro 92 # devfs is deprecated with kernel-2.6
218     #mount devfs ${CDCHROOTDIR}/dev -t devfs
219     mount -o bind /dev ${CDCHROOTDIR}/dev
220 niro 26
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 niro 92
265 niro 26 #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 niro 92
304 niro 26 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 niro 92 # installing mage to CDCHROOTDIR
328 niro 26 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 niro 99 mount -o bind /dev ${CDCHROOTDIR}/dev )
348 niro 26 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 niro 92
361 niro 26 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 niro 92
380 niro 26 if [ -d ${LIVECDROOT}/tmp/${CLOOPDIR} ]
381     then
382     mecho Removing old cloop files
383     rm -rf ${LIVECDROOT}/tmp/${CLOOPDIR}
384     fi
385 niro 92
386 niro 26 if [ -d ${LIVECDROOT}/tmp/${BUSYBOXDIR} ]
387     then
388     mecho Removing old busybox files
389     rm -rf ${LIVECDROOT}/tmp/${BUSYBOXDIR}
390     fi
391 niro 92
392 niro 26 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 niro 92
398 niro 26 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 niro 92
421 niro 26 #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 niro 92 #symlink bin to sbin -> init & insmod resist normally in sbin
433 niro 26 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 niro 92 mknod -m 666 ${CDINITRD}/dev/null c 1 3
444 niro 26 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 niro 101 # install modules
467 niro 26 install -d ${CDINITRD}/modules
468 niro 101 source ${CDCHROOTDIR}/boot/kernelversion
469 niro 26 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 niro 92
570 niro 26 #change mountfs with mountfslivecd
571     rc-config del mountfs
572     rc-config add mountfslivecd
573 niro 92
574 niro 26 #add hardware detection
575     rc-config add hwdetect
576 niro 92
577 niro 26 #del checkfs
578     rc-config del checkfs
579 niro 92
580 niro 26 #exit
581     exit
582     EOF
583     #run it
584     enter_chroot
585 niro 92
586 niro 26 #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 niro 92
597 niro 26 mecho Cleaning unwanted files ...
598     ( if [ -e ${CDCHROOTDIR}/etc/mtab ]
599     then
600     rm ${CDCHROOTDIR}/etc/mtab
601     fi && \
602 niro 92 touch ${CDCHROOTDIR}/etc/mtab
603 niro 26 )
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 niro 92
648 niro 26 #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 niro 92
659 niro 26 #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 niro 92
670 niro 26 #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 niro 92
688 niro 26 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 niro 92
721 niro 26 mecho Formating rootfs loopfile ...
722     mke2fs -m 0 -i 1024 -F ${LIVECDROOT}/livecdrootfs &> /dev/null
723     evaluate_retval
724 niro 92
725 niro 26 mecho Mounting Image file ...
726     ( mkdir -p ${CDISOLOOP} && \
727     mount -o loop ${LIVECDROOT}/livecdrootfs ${CDISOLOOP} )
728     evaluate_retval
729 niro 92
730 niro 26 mecho Copying rootfs to loopfile ...
731     cp -a ${CDCHROOTDIR}/* ${CDISOLOOP}
732     evaluate_retval
733 niro 92
734 niro 26 mecho Unmounting Image file ...
735     umount ${CDISOLOOP}
736     evaluate_retval
737 niro 92
738 niro 26 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 niro 92
742 niro 26 mecho Moving rootfs loopfile to isoroot ...
743     ( rm -f ${LIVECDROOT}/livecdrootfs && \
744     mv ${LIVECDROOT}/livecdrootfs.cloop ${CDISOROOT} )
745     evaluate_retval
746     ;;
747 niro 92
748 niro 26 squashfs)
749     mecho Generating squashfs compressed rootfs loopfile ...
750     mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh >/dev/null 2>&1
751     evaluate_retval
752 niro 92
753 niro 26 mecho Moving rootfs loopfile to isoroot ...
754     mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}
755     evaluate_retval
756     ;;
757     esac
758     fi
759 niro 92
760 niro 26 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 *