source: common/common-functions@ a0f0bee

1.0 2.3 2.3.x 2.4 ablfs ablfs-more legacy new_features trunk
Last change on this file since a0f0bee was 8a43b5b, checked in by Manuel Canales Esparcia <manuel@…>, 19 years ago

Simplified download code.
Now the MD5 sum values are set in the books.

  • Property mode set to 100644
File size: 23.9 KB
RevLine 
[877cc6a]1#!/bin/bash
2
3# $Id$
4
5set +e
6
7# VT100 colors
8declare -r BLACK=$'\e[1;30m'
9declare -r DK_GRAY=$'\e[0;30m'
10
11declare -r RED=$'\e[31m'
12declare -r GREEN=$'\e[32m'
13declare -r YELLOW=$'\e[33m'
14declare -r BLUE=$'\e[34m'
15declare -r MAGENTA=$'\e[35m'
16declare -r CYAN=$'\e[36m'
17declare -r WHITE=$'\e[37m'
18
19declare -r OFF=$'\e[0m'
20declare -r BOLD=$'\e[1m'
21declare -r REVERSE=$'\e[7m'
22declare -r HIDDEN=$'\e[8m'
23
24declare -r tab_=$'\t'
25declare -r nl_=$'\n'
26
[47e524f]27declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
28declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
29declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
[877cc6a]30
31# bold yellow > < pair
32declare -r R_arrow=$'\e[1;33m>\e[0m'
33declare -r L_arrow=$'\e[1;33m<\e[0m'
34
35
36usage() {
37cat <<- -EOF-
38${DD_BORDER}
39${BOLD}
40 Usage: $0 ${BOLD}[OPTION]
41
[efc0d1e]42${RED}IMPORTANT:${OFF} Only supported command line switches are listed here.
[4dd25a1]43 For more fine-grained setups you must edit the relevant
[efc0d1e]44 configuration files placed under ${BOLD}common/${OFF} and ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])/${OFF}
45
[877cc6a]46Options:
47${BOLD} -h, --help${OFF}
48 print this help, then exit
49
50${BOLD} -V, --version${OFF}
51 print version information, then exit
52
53${BOLD} -B, --book VER${OFF}
[e2fa2bd]54 use VER version of the book as the system to build.
55 Supported versions are: dev*, trunk, SVN
56 These are aliases for the Development version of {C,H,B}LFS
[877cc6a]57
58${BOLD} -D --directory DIR${OFF}
[73e5448]59 use DIR directory for building ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])${OFF}; all files jhalfs produces
[877cc6a]60 will be in the directory DIR/jhalfs.
[511923a]61 The current setting for BUILDDIR is "$BUILDDIR"
[877cc6a]62
63${BOLD} -G, --get-packages${OFF}
64 download the packages and patches. This assumes that the server declared
65 in the configuration file has the proper packages and patches for the
66 book version being processed.
67
[1b65a84]68${BOLD} -O, --optimize${OFF}
69 Optimize [0-2]
70 0 = no optimization
71 1 = optimize chapter06 only
72 2 = optimize both chapter05 and chapter06
73 Edit common/opt_config{,.d/*} and common/opt_override as desired.
74
[877cc6a]75${BOLD} -T, --testsuites N ${OFF}
76 Run test suites [0-3]
77 0 = none
[0755d1a]78 1 = only final system Glibc, GCC and Binutils testsuites
79 2 = all final system testsuites
[b240ee6]80 3 = all temporary tools and final system testsuites
[877cc6a]81 In CLFS, 3 is an alias to 2
[e53b577]82 In BLFS, 1, 2, and 3 are equivalents and means that the testsuites
83 will be run.
[877cc6a]84
85${BOLD} -W, --working-copy DIR${OFF}
86 use the local working copy placed in DIR as the $(echo $PROGNAME | tr [a-z] [A-Z]) book
87-EOF-
88
89[[ ${PROGNAME} != "blfs" ]] &&
90cat <<- -EOF-
91
[45f82718]92${BOLD} -C, --comparasion TYPE${OFF}
[e2fa2bd]93 do iterative comparison analysis. This extends the total build time
94 considerably because the entire final system will rebuild itself
95 the number of times specified by ITERATIONS in common/config.
[6dcfd53]96 Types allowed are:
[e2fa2bd]97 ICA = do ICA as designed by Greg Schafer
[0ad851d]98 farce = do the farce analysis designed by Ken Moffat
99 both = perfom both ICA and farce analysis
[45f82718]100
[877cc6a]101${BOLD} -F, --fstab FILE${OFF}
102 use FILE as the /etc/fstab file for the ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])${OFF} system. If not specified,
103 a default /etc/fstab file with dummy values is created.
104
105${BOLD} -K, --kernel-config FILE${OFF}
106 use the kernel configuration file specified in FILE to build the kernel.
107 if the file is not found, or if not specified, the kernel build is skipped.
108
109${BOLD} -M, --run-make${OFF}
110 run make on the generated Makefile
111
112${BOLD} -R --rebuild${OFF}
[e2fa2bd]113 clean the build directory before perfoming any other task. The directory
[73e5448]114 is cleaned only if it was populated by a previous jhalfs run.
[877cc6a]115-EOF-
116
117[[ ${PROGNAME} = "clfs" ]] &&
118cat <<- -EOF-
119
120${BOLD} -A, --arch ARCH ${OFF}
121 Select the TARGET architecture, valid selections are:
122 32bit builds
[b0dd4bd]123 x86, i486, i586, ppc, mips, mipsel, sparc
[877cc6a]124 64bit builds
125 x86_64-64, mips64-64, mipsel64-64, sparc64-64, alpha
126 64bit multi-lib
127 x86_64, mips64, mipsel64, sparc64, ppc64
128
[c7c5a53]129${BOLD} --boot-config FILE ${OFF}
[877cc6a]130 The configuration file for the bootstrap kernel if method=boot
131
132${BOLD} --method BUILDMETHOD ${OFF}
133 Select the build method, chroot or boot
134-EOF-
135
136[[ ${PROGNAME} = "hlfs" ]] &&
137cat <<- -EOF-
138
139${BOLD} --model STYLE ${OFF}
140 Select the library model for the HLFS system
141 Valid choices are: glibc or uclibc
142-EOF-
143
144[[ ${PROGNAME} = "blfs" ]] &&
145cat <<- -EOF-
146
147${BOLD} --dependencies 0/1/2${OFF}
148 add dependencies of type TYPE to the build tree.
149 If not set, both required and recommended are used.
150
151 Possible values are:
152 0 - required only required dependecies are used
153 1 - recommended both required a recommended dependencies are used
154 2 - optional all dependencies are used
155-EOF-
156
157cat <<- -EOF-
158${DD_BORDER}
159-EOF-
160 exit
161}
162
163version="
[73e5448]164${BOLD} \"jhalfs\"${OFF} builder tool (development) \$Rev$
[877cc6a]165\$Date$
166
167${BOLD} \"${PROGNAME}\"${OFF} script module
168
169Written by George Boudreau,
170 Manuel Canales Esparcia,
171 Jeremy Huntwork
172
173This program is published under the ${BOLD}Gnu General Public License, Version 2.${OFF}
174"
175
176
177no_empty_builddir() {
178 'clear'
179cat <<- -EOF-
180${DD_BORDER}
181
182${tab_}${tab_}${BOLD}${RED}W A R N I N G${OFF}
183 Looks like the \$BUILDDIR directory contains subdirectories
184 from a previous HLFS build.
185
186 Please format the partition mounted on \$BUILDDIR or set
[73e5448]187 a different build directory before running jhalfs.
[877cc6a]188${OFF}
189${DD_BORDER}
190-EOF-
191 exit
192}
193
194
195help="${nl_}Try '$0 --help' for more information."
196
197
198exit_missing_arg="\
199echo \"Option '\$1' requires an argument\" >&2
200echo \"\$help\" >&2
201exit 1"
202
203no_dl_client="\
204echo \"Could not find a way to download the ${BOLD}$(echo $PROGNAME | tr [a-z] [A-Z])${OFF} sources.\" >&2
205echo \"Attempting to continue.\" >&2"
206
[73e5448]207HEADER="# This file is automatically generated by jhalfs
[877cc6a]208# DO NOT EDIT THIS FILE MANUALLY
209#
210# Generated on `date \"+%F %X %Z\"`"
211
212
213
214#----------------------------------#
[3a321ea]215wrt_target() { # Create target and initialize log file
[877cc6a]216#----------------------------------#
217 local i=$1
218 local PREV=$2
[4edf3b7]219 case $i in
220 iteration* ) local LOGFILE=$this_script.log ;;
221 * ) local LOGFILE=$this_script ;;
222 esac
[877cc6a]223(
224cat << EOF
225
226$i: $PREV
227 @\$(call echo_message, Building)
[4edf3b7]228 @echo -e "\n\`date\`\n\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >logs/$LOGFILE
[877cc6a]229EOF
230) >> $MKFILE.tmp
231}
232
233
234#----------------------------------#
235wrt_unpack() { # Unpack and set 'ROOT' var
236#----------------------------------#
237 local FILE=$1
238(
239cat << EOF
240 @\$(call unpack,$FILE)
241 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
242 echo "export PKGDIR=\$(MOUNT_PT)\$(SRC)/\$\$ROOT" > envars && \\
[15537d5]243 chown -R lfs \$(MOUNT_PT)\$(SRC)/\$\$ROOT
[877cc6a]244EOF
245) >> $MKFILE.tmp
246}
247
248
249#----------------------------------#
250wrt_unpack2() { #
251#----------------------------------#
252 local FILE=$1
253(
254cat << EOF
255 @\$(call unpack2,$FILE)
256 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
257 echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
258EOF
259) >> $MKFILE.tmp
260}
261
262
[261eea6]263#----------------------------------#
264wrt_unpack3() { #
265#----------------------------------#
[877cc6a]266 local FILE=$1
267(
268cat << EOF
269 @\$(call unpack3,$FILE)
270 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
271 echo "export PKGDIR=\$(SRC)/\$\$ROOT" > envars
272EOF
273) >> $MKFILE.tmp
274}
275
276
277#----------------------------------#
278wrt_target_vars() { # Target vars for hlfs (cross-build method)
279#----------------------------------#
280(
281cat << EOF
282 @echo "export target=$(uname -m)-${TARGET}" >> envars && \\
283 echo "export ldso=/lib/${LOADER}" >> envars
284EOF
285) >> $MKFILE.tmp
286
287}
288
289
290#----------------------------------#
[3a321ea]291wrt_run_as_su() { # Execute script inside time { }, footer to log file
[877cc6a]292#----------------------------------#
293 local this_script=$1
294 local file=$2
295(
296cat << EOF
[3a321ea]297 @( time { su - lfs -c "source /home/lfs/.bashrc && $JHALFSDIR/${PROGNAME}-commands/$file" >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
298 echo -e "\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >>logs/$this_script
[877cc6a]299EOF
300) >> $MKFILE.tmp
301}
302
303
304#----------------------------------#
[3a321ea]305wrt_run_as_root() { # Some scripts must be run as root..
[877cc6a]306#----------------------------------#
307 local this_script=$1
308 local file=$2
309(
310cat << EOF
[3a321ea]311 @( time { export LFS=\$(MOUNT_PT) && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
312 echo -e "\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >>logs/$this_script
[877cc6a]313EOF
314) >> $MKFILE.tmp
315}
316
317
[261eea6]318#----------------------------------#
319wrt_run_as_root2() { #
320#----------------------------------#
[877cc6a]321 local this_script=$1
322 local file=$2
323(
324cat << EOF
[3a321ea]325 @( time { source envars && ${PROGNAME}-commands/$file >>logs/$this_script 2>&1 ; } ) 2>>logs/$this_script && \\
326 echo -e "\nKB: \`du -skx --exclude=jhalfs \`\n" >>logs/$this_script
[877cc6a]327EOF
328) >> $MKFILE.tmp
329}
330
331
332
333#----------------------------------#
334wrt_run_as_chroot1() { #
335#----------------------------------#
336 local this_script=$1
337 local file=$2
338(
339 cat << EOF
[3a321ea]340 @( time { \$(CHROOT1) 'cd /jhalfs && source envars && /jhalfs/${PROGNAME}-commands/$file >>/jhalfs/logs/${this_script} 2>&1' ; } ) 2>>logs/$this_script && \\
341 echo -e "\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >>logs/${this_script}
[877cc6a]342EOF
343) >> $MKFILE.tmp
344}
345
346
347#----------------------------------#
348wrt_run_as_chroot2() { #
349#----------------------------------#
350 local this_script=$1
351 local file=$2
352(
353cat << EOF
[3a321ea]354 @( time { \$(CHROOT2) 'cd /jhalfs && source envars && /jhalfs/${PROGNAME}-commands/$file >>/jhalfs/logs/${this_script} 2>&1' ; } ) 2>>logs/$this_script && \\
355 echo -e "\nKB: \`du -skx --exclude=jhalfs \$(MOUNT_PT)\`\n" >>logs/${this_script}
[877cc6a]356EOF
357) >> $MKFILE.tmp
358}
359
360
361#----------------------------------#
362wrt_copy_fstab() { #
363#----------------------------------#
364 local i=$1
365(
366 cat << EOF
[3a321ea]367 @cp -v $FSTAB \$(MOUNT_PT)/etc/fstab >>logs/$i 2>&1
[877cc6a]368EOF
369) >> $MKFILE.tmp
370}
371
372#----------------------------------#
[3a321ea]373wrt_copy_fstab2() { #
[877cc6a]374#----------------------------------#
375 local i=$1
376(
377 cat << EOF
[3a321ea]378 @cp -v /sources/fstab /etc/fstab >>logs/$i 2>&1
[877cc6a]379EOF
380) >> $MKFILE.tmp
381}
382
383
384#----------------------------------#
[0bdf6ed]385wrt_remove_build_dirs() { #
[877cc6a]386#----------------------------------#
[0bdf6ed]387 local name=$1
[877cc6a]388(
[0bdf6ed]389cat << EOF
390 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
391 rm -r \$(MOUNT_PT)\$(SRC)/\$\$ROOT && \\
392 if [ -e \$(MOUNT_PT)\$(SRC)/$name-build ]; then \\
393 rm -r \$(MOUNT_PT)\$(SRC)/$name-build; \\
394 fi;
395EOF
396) >> $MKFILE.tmp
397}
398
399
400#----------------------------------#
401wrt_remove_build_dirs2() { #
402#----------------------------------#
403 local name=$1
404(
405cat << EOF
406 @ROOT=\`head -n1 /tmp/unpacked | sed 's@^./@@;s@/.*@@'\` && \\
407 rm -r \$(SRC)/\$\$ROOT && \\
408 if [ -e \$(SRC)/$name-build ]; then \\
409 rm -r \$(SRC)/$name-build; \\
410 fi;
[877cc6a]411EOF
412) >> $MKFILE.tmp
413}
414
415
[453bef0]416#----------------------------------#
[261eea6]417wrt_report() { #
[453bef0]418#----------------------------------#
419(
420cat << EOF
421
422create-sbu_du-report: $PREV
423 @\$(call echo_message, Building)
[a9429d5]424 @./create-sbu_du-report.sh logs $VERSION
[453bef0]425 @\$(call echo_report,$VERSION-SBU_DU-$(date --iso-8601).report)
426 @touch \$@
427EOF
428) >> $MKFILE.tmp
429
430chapter789="$chapter789 create-sbu_du-report"
431}
432
433
[877cc6a]434#----------------------------#
[261eea6]435run_make() { #
[877cc6a]436#----------------------------#
437 # Test if make must be run.
438 if [ "$RUNMAKE" = "1" ] ; then
439 # Test to make sure we're running the build as root
440 if [ "$UID" != "0" ] ; then
441 echo "You must be logged in as root to successfully build the system."
442 exit 1
443 fi
444 # Build the system
445 if [ -e $MKFILE ] ; then
446 echo -ne "Building the system...\n"
[a167246]447 cd $JHALFSDIR && make
[877cc6a]448 echo -ne "done\n"
449 fi
450 fi
451}
452
453
454#----------------------------#
[261eea6]455clean_builddir() { #
[877cc6a]456#----------------------------#
457 # Test if the clean must be done.
458 if [ "$CLEAN" = "1" ] ; then
459 # Test to make sure we're running the clean as root
460 if [ "$UID" != "0" ] ; then
461 echo "You must be logged in as root to clean the build directory."
462 exit 1
463 fi
464 # Test to make sure that the build directory was populated by jhalfs
465 if [ ! -d $JHALFSDIR ] || [ ! -d $BUILDDIR/sources ] ; then
[73e5448]466 echo "Looks like $BUILDDIR was not populated by a previous jhalfs run."
[877cc6a]467 exit 1
468 else
469 # Clean the build directory
470 echo -ne "Cleaning $BUILDDIR...\n"
471 rm -rf $BUILDDIR/{bin,boot,dev,etc,home,lib,media,mnt,opt,proc,root,sbin,srv,sys,tmp,tools,cross-tools,usr,var}
472 echo -ne "Cleaning $JHALFSDIR...\n"
473 rm -rf $JHALFSDIR/{0*,1*,envars,sources-dir,*commands,logs,Makefile,*.xsl,makefile-functions,packages,patches}
474 echo -ne "Cleaning remainig extracted sources in $BUILDDIR/sources...\n"
475 rm -rf `find $BUILDDIR/sources/* -maxdepth 0 -type d`
476 echo -ne "done\n"
477 fi
478 fi
479}
480
481#----------------------------#
[261eea6]482get_book() { #
[877cc6a]483#----------------------------#
484 cd $JHALFSDIR
485
486 if [ -z $WC ] ; then
487 # Check for Subversion instead of just letting the script hit 'svn' and fail.
488 test `type -p svn` || eval "echo \"This feature requires Subversion.\"
489 exit 1"
490 echo -n "Downloading the $PROGNAME document, $LFSVRS version... "
491
492 case $PROGNAME in
493 lfs) svn_root="LFS" ;;
494 hlfs) svn_root="HLFS" ;;
495 clfs) svn_root="cross-lfs" ;;
496 blfs) svn_root="BLFS" ;;
497 *) echo "BOOK not defined in function <get_book>"
498 exit 1 ;;
499 esac
500 # Grab a fresh book if it's missing, otherwise, update it from the
501 # repo. If we've already extracted the commands, move on to getting the
502 # sources.
503 if [ -d ${PROGNAME}-$LFSVRS ] ; then
504 cd ${PROGNAME}-$LFSVRS
[19528f8]505 if LC_ALL=C svn up | grep -q At && test -d $JHALFSDIR/${PROGNAME}-commands && \
506 test -f $JHALFSDIR/packages ; then
[877cc6a]507 echo -ne "done\n"
508 # Set the canonical book version
509 cd $JHALFSDIR
510 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
511 get_sources
512 else
513 echo -ne "done\n"
514 # Set the canonical book version
515 cd $JHALFSDIR
516 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
517 extract_commands
518 fi
519 else
520 case $LFSVRS in
521 development)
522 svn co $SVN/${svn_root}/trunk/BOOK ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1 ;;
523 esac
524 echo -ne "done\n"
525 # Set the canonical book version
526 cd $JHALFSDIR
527 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
528 extract_commands
529 fi
530 else
531 echo -ne "Using $BOOK as book's sources ...\n"
532 # Set the canonical book version
533 cd $JHALFSDIR
534 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
535 extract_commands
536 fi
537}
538
539#----------------------------#
540extract_commands() { #
541#----------------------------#
542
543 # Check for libxslt instead of just letting the script hit 'xsltproc' and fail.
544 test `type -p xsltproc` || eval "echo \"This feature requires libxslt.\"
545 exit 1"
546
547 cd $JHALFSDIR
548 VERSION=`grep "ENTITY version " $BOOK/general.ent | sed 's@<!ENTITY version "@@;s@">@@'`
549
550 # Start clean
[bfc07d6]551 if [ -d ${PROGNAME}-commands ]; then
552 rm -rf ${PROGNAME}-commands
553 mkdir -v ${PROGNAME}-commands
[877cc6a]554 fi
555 echo -n "Extracting commands for"
556
557 # Dump the commands in shell script form from the HLFS book.
558 case ${PROGNAME} in
559 clfs)
560 echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture"
561 xsltproc --nonet \
562 --xinclude \
563 --stringparam method $METHOD \
564 --stringparam testsuite $TEST \
565 --stringparam vim-lang $VIMLANG \
566 --stringparam timezone $TIMEZONE \
567 --stringparam page $PAGE \
568 --stringparam lang $LANG \
569 --stringparam keymap $KEYMAP \
570 -o ./${PROGNAME}-commands/ $XSL $BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1
571 ;;
572 hlfs)
573 echo -n " ${L_arrow}${BOLD}$MODEL${R_arrow} HLFS libc implementation"
574 xsltproc --nonet \
575 --xinclude \
576 --stringparam model $MODEL \
577 --stringparam testsuite $TEST \
578 --stringparam timezone $TIMEZONE \
579 --stringparam page $PAGE \
580 --stringparam lang $LANG \
581 --stringparam lc_all $LC_ALL \
582 --stringparam keymap $KEYMAP \
583 --stringparam grsecurity_host $GRSECURITY_HOST \
584 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
585 ;;
586 lfs)
587 echo -n " ${L_arrow}${BOLD}LFS${R_arrow} build"
588 xsltproc --nonet \
589 --xinclude \
590 --stringparam testsuite $TEST \
591 --stringparam vim-lang $VIMLANG \
592 --stringparam timezone $TIMEZONE \
593 --stringparam page $PAGE \
594 --stringparam lang $LANG \
595 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
596 ;;
597 blfs)
598 echo -n " ${L_arrow}${BOLD}BLFS${R_arrow} build"
599 xsltproc --nonet \
600 --xinclude \
601 --stringparam testsuite $TEST \
602 --stringparam server $SERVER \
603 -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
604 ;;
[15cad16]605 *) exit 1 ;;
[877cc6a]606 esac
607
608 echo " ...OK"
609
610 # Make the scripts executable.
611 chmod -R +x $JHALFSDIR/${PROGNAME}-commands
612
[15cad16]613 # Create the packages file. We need it for proper Makefile creation
614 rm -f packages
[877cc6a]615 case "${PROGNAME}" in
616 clfs)
[15cad16]617 echo -n "Creating <${PROGNAME}> specific packages file"
[877cc6a]618 grep "\-version " $BOOK/packages.ent | sed -e 's@<!ENTITY @@' \
619 -e 's@">@"@' \
[15cad16]620 -e '/generic/d' > packages
[877cc6a]621 echo " ...OK"
622 ;;
623
624 hlfs)
625 echo -n "Creating <${PROGNAME}> specific packages file"
626 grep "\-version" $BOOK/general.ent | sed -e 's@<!ENTITY @@' \
627 -e 's@">@"@' \
628 -e '/generic/d' >> packages
629 echo " ...OK"
630 ;;
631
632 lfs)
633 echo -n "Creating <${PROGNAME}> specific packages file"
634 grep "\-version" $BOOK/general.ent | sed -e 's@<!ENTITY @@' \
635 -e 's@">@"@' \
636 -e '/generic/d' >> packages
637 echo " ...OK"
638 ;;
639 esac
640
641 # Done. Moving on...
642 get_sources
643}
644
645#----------------------------#
[15cad16]646get_sources() { # Download file, write name to MISSING_FILES.DMP if an error
[93135fd]647#----------------------------#
648 local saveIFS=$IFS
[26053c4]649 local IFS line URL1 URL2 FILE BOOKMD5 MD5 HAVEMD5 fromARCHIVE
[93135fd]650
651 # Test if the packages must be downloaded
652 [ ! "$GETPKG" = "1" ] && return
653
654 gs_wrt_message(){
655 echo "${RED}$1${OFF}"
[c7dbe78]656 echo "$1" >> MISSING_FILES.DMP
657 }
[93135fd]658 # Housekeeping
659 [[ ! -d $BUILDDIR/sources ]] && mkdir $BUILDDIR/sources
660 cd $BUILDDIR/sources
661 [[ -f MD5SUMS ]] && rm MD5SUMS
662 [[ -f MISSING_FILES.DMP ]] && rm MISSING_FILES.DMP
663 [[ -f urls.lst ]] && rm urls.lst
664
665 # Generate URLs file
666 create_urls
667
668 IFS=$'\x0A' # Modify the 'internal field separator' to break on 'LF' only
669 for line in `cat urls.lst`; do
670 IFS=$saveIFS # Restore the system defaults
671
672 # Skip some packages if they aren't needed
673 case $line in
674 */tcl* | */expect* | */dejagnu* | */tree* | */gcc-testsuite* )
675 [[ "$TEST" = "0" ]] && continue
676 ;;
677 */vim-*-lang* )
678 [[ "$VIMLANG" = "0" ]] && continue
679 ;;
680 esac
681
682 # Locations
[296ae69]683 URL1=`echo $line | cut -d" " -f2` # Preferred URL
684 URL2=`echo $line | cut -d" " -f1` # Fallback Upstream URL
[26053c4]685 FILE=`basename $URL1` # File name
686 BOOKMD5=`echo $line | cut -d" " -f3` # MD5 book value
687
[8a43b5b]688 # Validation pair
689 MD5="$BOOKMD5 $FILE"
690 HAVEMD5=1
[93135fd]691
692 set -e
[c7dbe78]693 # If the file exists in the archive copy it to the
[93135fd]694 # $BUILDDIR/sources dir. MD5SUM will be validated later.
695 if [ ! -z ${SRC_ARCHIVE} ] &&
696 [ -d ${SRC_ARCHIVE} ] &&
697 [ -f ${SRC_ARCHIVE}/$FILE ]; then
698 cp ${SRC_ARCHIVE}/$FILE .
699 echo "$FILE: -- copied from $SRC_ARCHIVE"
700 fromARCHIVE=1
701 else
702 echo "${BOLD}${YELLOW}$FILE: not found in ${SRC_ARCHIVE}${OFF}"
703 fromARCHIVE=0
[8a43b5b]704 # If the file does not exist yet in /sources download a fresh one
[93135fd]705 if [ ! -f $FILE ] ; then
706 if ! wget $URL1 && ! wget $URL2 ; then
[c7dbe78]707 gs_wrt_message "$FILE not found in the SRC_ARCHIVE or on any server..SKIPPING"
708 continue
[93135fd]709 fi
710 fi
711 fi
712
[8a43b5b]713 # IF the md5sum does not match the existing files
714 if ! echo "$MD5" | md5sum -c - >/dev/null ; then
715 [[ $fromARCHIVE = "1" ]] && echo "${BOLD}${YELLOW}MD5SUM did not match SRC_ARCHIVE copy${OFF}"
716 [[ $fromARCHIVE = "0" ]] && echo "${BOLD}${YELLOW}MD5SUM did not match REMOTE copy${OFF}"
717 # Remove the old file and download a new one
718 rm -fv $FILE
719 # Force storage in SRC_ARCHIVE
720 fromARCHIVE=0;
721 # Try to retrieve again the file. Servers in reverse order.
722 if ! wget $URL2 && ! wget $URL1 ; then
723 gs_wrt_message "$FILE not found on the servers.. SKIPPING"
724 continue
[93135fd]725 fi
726 fi
727
728 # Validate the MD5SUM one last time
[8a43b5b]729 if ! echo "$MD5" | md5sum -c - >/dev/null ; then
[93135fd]730 gs_wrt_message "$FILE does not match MD5SUMS value"
[0910f55]731 # Force generation of MD5SUM
732 HAVEMD5=0
[93135fd]733 fi
734
735 # Generate a fresh MD5SUM for this file
736 if [[ "$HAVEMD5" = "0" ]] ; then
737 echo "${BOLD}${YELLOW}Generating a new MD5SUM for ${OFF}$FILE"
[8a43b5b]738 echo "NEW MD5SUM: $(md5sum $FILE)" >> MISSING_FILES.DMP
[93135fd]739 fi
740
741 # Good or bad we write the original md5sum to a file
[8a43b5b]742 echo "$MD5" >> MD5SUMS
[93135fd]743
744 # Copy the freshly downloaded file
745 # to the source archive.
746 if [ ! -z ${SRC_ARCHIVE} ] &&
747 [ -d ${SRC_ARCHIVE} ] &&
748 [ -w ${SRC_ARCHIVE} ] &&
749 [ "$fromARCHIVE" = "0" ] ; then
750 echo "Storing file:<$FILE> in the package archive"
751 cp -f $FILE ${SRC_ARCHIVE}
752 fi
753
754 done
755
756 if [[ -s MISSING_FILES.DMP ]]; then
757 echo -e "\n\n${tab_}${RED} One or more files were not retrieved or have a bad MD5SUMS chechsum.\n${tab_} Check ${L_arrow}$BUILDDIR/sources/MISSING_FILES.DMP${R_arrow} for names ${OFF}\n"
758 # Do not allow the automatic exection of the Makefile.
[261eea6]759 echo "${tab_}${BOLD}${RED}*** ${YELLOW}Automatic execution of the generated makefile has been inhibited. ${RED}***${OFF}${nl_}"
[93135fd]760 RUNMAKE=0
761 fi
762}
763
764
[877cc6a]765#----------------------------#
[15cad16]766create_urls() { #
[877cc6a]767#----------------------------#
[15cad16]768 cd $JHALFSDIR
[877cc6a]769
[15cad16]770 case ${PROGNAME} in
771 clfs)
772 echo -n "Creating CLFS <${ARCH}> specific URLs file"
773 xsltproc --nonet --xinclude \
774 --stringparam server $SERVER \
775 -o $BUILDDIR/sources/urls.lst urls.xsl \
776 $BOOK/materials/$ARCH-chapter.xml >>$LOGDIR/$LOG 2>&1
777 echo " ...OK"
778 ;;
779 hlfs)
780 echo -n "Creating HLFS <${MODEL}> specific URLs file"
781 xsltproc --nonet --xinclude \
782 --stringparam server $SERVER \
783 --stringparam model $MODEL \
784 -o $BUILDDIR/sources/urls.lst urls.xsl \
785 $BOOK/chapter04/chapter04.xml >>$LOGDIR/$LOG 2>&1
786 echo " ...OK"
787 ;;
788 lfs)
789 echo -n "Creating LFS specific URLs file"
790 xsltproc --nonet --xinclude \
791 --stringparam server $SERVER \
792 -o ../sources/urls.lst urls.xsl \
793 $BOOK/chapter03/chapter03.xml >>$LOGDIR/$LOG 2>&1
794 echo " ...OK"
795 ;;
796 esac
[877cc6a]797
[15cad16]798 cd $BUILDDIR/sources
[877cc6a]799}
Note: See TracBrowser for help on using the repository browser.