Magellan Linux

Contents of /trunk/mlivecdbuild/mlivecdbuild.sh

Parent Directory Parent Directory | Revision Log Revision Log


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

1 #!/bin/bash
2
3 #
4 # Builds Magellan Livecd's 0.3.6-r7
5 #
6
7 source /etc/sysconfig/rc
8 source $rc_functions
9
10 ### setup ###
11 export LIVECDROOT=/mnt/mlivecdbuild-0.3.6-r7
12 export CDCHROOTDIR=${LIVECDROOT}/chroot
13 export CDISOROOT=${LIVECDROOT}/isoroot
14 export CDMAGEDIR=${LIVECDROOT}/files/mage-src
15 export CDMAGERC=${CDMAGEDIR}/mage.rc
16 export CDISONAME=magellan-livecd-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 *