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