Index: LFS/master.sh =================================================================== --- LFS/master.sh (revision 2727) +++ LFS/master.sh (working copy) @@ -173,6 +173,11 @@ # Keep the script file name this_script=`basename $file` + # If $this_script corresponds to a paco script, then skip it + case "${this_script}" in + *paco) continue ;; + esac + # We'll run the chroot commands differently than the others, so skip them in the # dependencies and target creation. case "${this_script}" in @@ -180,6 +185,18 @@ *stripping*) [[ "${STRIP}" = "0" ]] && continue ;; esac + # Install paco as the first package in ch6, before installing + # linux-libc-headers, except in iterartive builds + if [[ -z "$N" ]]; then + case $this_script in + *linux-libc-headers) + TMP_SCRIPT="$this_script" + this_script=`echo $this_script | sed -e 's/linux-libc-headers/a-paco/'` + wrt_paco_inst "$this_script" + this_script="$TMP_SCRIPT" ;; + esac + fi + # Grab the name of the target name=`echo ${this_script} | sed -e 's@[0-9]\{3\}-@@'` @@ -223,7 +240,9 @@ # and not to use chroot. case "${this_script}" in *kernfs) wrt_run_as_root "${this_script}" "$file" ;; - *) wrt_run_as_chroot1 "${this_script}" "$file" ;; + *) wrt_paco_prep + wrt_run_as_chroot1 "${this_script}" "$file" + wrt_paco_log "$name" "$vrs" ;; esac # Remove the build directory(ies) except if the package build fails. @@ -243,6 +262,16 @@ PREV=${this_script}${N} # Set system_build envar for iteration targets system_build=$chapter6 + + # Reinstalling paco after readsjusting the toolchain. + case "${this_script}" in + *readjusting) + TMP_SCRIPT="$this_script" + this_script=`echo ${this_script} | sed -e 's/readjusting/x-paco/'` + wrt_paco_inst "$this_script" + this_script="$TMP_SCRIPT" ;; + esac + done # end for file in chapter06/* } @@ -304,6 +333,14 @@ wrt_run_as_chroot2 "$this_script" "$file" fi ;; + *kernel) wrt_paco_prep + wrt_run_as_chroot2 "$this_script" "$file" + wrt_paco_log "linux-kernel" "$vrs" + ;; + *bootscripts) wrt_paco_prep + wrt_run_as_chroot2 "$this_script" "$file" + wrt_paco_log "lfs-bootscripts" "$vrs" + ;; *) wrt_run_as_chroot2 "$this_script" "$file" ;; esac Index: LFS/lfs.xsl =================================================================== --- LFS/lfs.xsl (revision 2727) +++ LFS/lfs.xsl (working copy) @@ -32,6 +32,9 @@ + + + @@ -190,6 +193,33 @@ || true + + + + export LD_PRELOAD=/usr/lib/libpaco-log.so + + + + + + export LD_PRELOAD=/usr/lib/libpaco-log.so + + + + + + unset LD_PRELOAD + + + + Index: common/paco-build-hlfs.sh =================================================================== --- common/paco-build-hlfs.sh (revision 0) +++ common/paco-build-hlfs.sh (revision 0) @@ -0,0 +1,11 @@ +#!/bin/sh +set -e + +cd $PKGDIR +./configure --with-pic \ + --disable-static \ + --disable-gpaco \ + --sysconfdir=/etc && +make && +make install && +make logme Index: common/config =================================================================== --- common/config (revision 2727) +++ common/config (working copy) @@ -84,6 +84,14 @@ #--- Run farce testing 0(no)/1(yes) RUN_FARCE=0 +#==== PACO VARIABLES ==== +#--- Use paco? 0(no)/1(yes) +USE_PACO=1 +PACO_VERSION=1.10.7 + +#--- Name of the Paco source package +PACO_FILE=paco-$PACO_VERSION.tar.* + #==== INTERNAL VARIABLES ==== # Don't edit it unless you know what you are doing @@ -96,3 +104,9 @@ #--- farce report log directory FARCELOGDIR=$LOGDIR/farce + +#--- Variables needed by paco +PACO_INCLUDE=/ +PACO_EXCLUDE=/sys:/dev:/proc:/tmp:/usr/src:/usr/share/info/dir:/jhalfs +PACO_TMPFILE=/tmp/paco.tmp +LD_PRELOAD=/usr/lib/libpaco-log.so Index: common/func_validate_configs.sh =================================================================== --- common/func_validate_configs.sh (revision 2727) +++ common/func_validate_configs.sh (working copy) @@ -84,9 +84,9 @@ inline_doc # First internal variables, then the ones that change the book's flavour, and lastly system configuration variables - local -r hlfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE MODEL GRSECURITY_HOST TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB CONFIG GETKERNEL KEYMAP PAGE TIMEZONE LANG LC_ALL" - local -r clfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE METHOD ARCH TARGET TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB BOOT_CONFIG CONFIG GETKERNEL KEYMAP VIMLANG PAGE TIMEZONE LANG" - local -r lfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB CONFIG GETKERNEL VIMLANG PAGE TIMEZONE LANG" + local -r hlfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE USE_PACO GETPKG RUNMAKE MODEL GRSECURITY_HOST TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB CONFIG GETKERNEL KEYMAP PAGE TIMEZONE LANG LC_ALL" + local -r clfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE USE_PACO GETPKG RUNMAKE METHOD ARCH TARGET TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB BOOT_CONFIG CONFIG GETKERNEL KEYMAP VIMLANG PAGE TIMEZONE LANG" + local -r lfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE USE_PACO GETPKG RUNMAKE TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB CONFIG GETKERNEL VIMLANG PAGE TIMEZONE LANG" local -r ERROR_MSG_pt1='The variable \"${L_arrow}${config_param}${R_arrow}\" value ${L_arrow}${BOLD}${!config_param}${R_arrow} is invalid,' local -r ERROR_MSG_pt2=' check the config file ${BOLD}${GREEN}\<$(echo $PROGNAME | tr [a-z] [A-Z])/config\> or \${OFF}' @@ -176,6 +176,7 @@ [[ "$GETPKG" = "1" ]] && validate_against_str "x0x x1x" fi ;; RUNMAKE) validate_against_str "x0x x1x" ;; + USE_PACO) validate_against_str "x0x x1x" ;; REPORT) validate_against_str "x0x x1x" if [[ "${!config_param}" = "1" ]]; then if [[ `type -p bc` ]]; then Index: common/paco-functions =================================================================== --- common/paco-functions (revision 0) +++ common/paco-functions (revision 0) @@ -0,0 +1,105 @@ +#!/bin/bash + + +#----------------------------# +wrt_paco_inst() { # +#----------------------------# + +# Not using Paco with uClibc, even if requested +if [ $PROGNAME = "hlfs" ]; then + if [ $MODEL = "uclibc" ]; then + USE_PACO=0 + fi +fi + +if [ $USE_PACO != 0 ]; then + paco_script="$1" + paco_file="chapter06/$paco_script" + chapter6="$chapter6 $paco_script" + + # Copy the paco build script to the correct directory and make it executable + cp $JHALFSDIR/paco-build-$PROGNAME.sh $JHALFSDIR/${PROGNAME}-commands/$paco_file && + chmod +x $JHALFSDIR/${PROGNAME}-commands/$paco_file + + # Write target, dependency and unpack + wrt_target "$paco_script" "$PREV" + wrt_unpack2 "$PACO_FILE" + + # Run the script + wrt_run_as_chroot1 "${paco_script}" "${paco_file}" + + # Clean up + wrt_remove_build_dirs "paco" + echo -e '\t@touch $@' >> $MKFILE.tmp + + # Override the PREV variable + PREV="$paco_script" +fi +} + + +#----------------------------------# +wrt_paco_prep() { # Export Paco variables +#----------------------------------# and remove tmpfile + +# Not using Paco with uClibc, even if requested +if [ $PROGNAME = "hlfs" ]; then + if [ $MODEL = "uclibc" ]; then + USE_PACO=0 + fi +fi + +if [ $USE_PACO != 0 ] && [ "$vrs" != "" ]; then +( +cat << EOF + @echo "export PACO_INCLUDE=$PACO_INCLUDE" >> envars && \\ + echo "export PACO_EXCLUDE=\$(SRC):$JHALFSDIR:$PACO_EXCLUDE" >> envars && \\ + echo "export PACO_TMPFILE=$PACO_TMPFILE" >> envars && \\ + rm -f \$(MOUNT_PT)$PACO_TMPFILE +EOF +) >> $MKFILE.tmp +fi +} + + +#----------------------------------# +wrt_paco_log() { # If the tmpfile exist, then log the current package +#----------------------------------# and remove tempfile +local PACKAGE + +# Allow packages to be logged without version +if [[ $2 != "" ]] ; then + PACKAGE="$1-$2"; +else + PACKAGE="$1" +fi + +# Not using Paco with uClibc, even if requested +if [ $PROGNAME = "hlfs" ]; then + if [ $MODEL = "uclibc" ]; then + USE_PACO=0 + fi +fi + +if [ $USE_PACO != 0 ] && [ "$vrs" != "" ]; then +( +cat << EOF + @if [ -e \$(MOUNT_PT)$PACO_TMPFILE ]; then \\ + \$(CHROOT1) 'paco -lp+ $PACKAGE < $PACO_TMPFILE' && \\ + rm -f \$(MOUNT_PT)$PACO_TMPFILE; \\ + fi; +EOF +) >> $MKFILE.tmp +fi + +# Glibc uses 'sln' to install symlinks in /lib +# add these to the log since paco can't track statically linked executables +# Glibc is the first package to install into /lib, so a simple 'find' will suffice +if [ $USE_PACO != 0 ] && [ "$name" = "glibc" ]; then +( +cat << EOF + @\$(CHROOT1) 'find /lib -type l | paco -lp+ $PACKAGE' +EOF +) >> $MKFILE.tmp +fi +} Index: common/paco-build-lfs.sh =================================================================== --- common/paco-build-lfs.sh (revision 0) +++ common/paco-build-lfs.sh (revision 0) @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +cd $PKGDIR +./configure --disable-gpaco \ + --sysconfdir=/etc && +make && +make install && +make logme Index: common/common-functions =================================================================== --- common/common-functions (revision 2727) +++ common/common-functions (working copy) @@ -65,6 +65,9 @@ in the configuration file has the proper packages and patches for the book version being processed. +${BOLD} --no-paco${OFF} + dissables paco logging feature. + ${BOLD} -O, --optimize${OFF} Optimize [0-2] 0 = no optimization @@ -556,6 +559,7 @@ --stringparam lc_all $LC_ALL \ --stringparam keymap $KEYMAP \ --stringparam grsecurity_host $GRSECURITY_HOST \ + --stringparam use_paco $USE_PACO \ -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1 ;; lfs) @@ -567,6 +571,7 @@ --stringparam timezone $TIMEZONE \ --stringparam page $PAGE \ --stringparam lang $LANG \ + --stringparam use_paco $USE_PACO \ -o ./${PROGNAME}-commands/ $XSL $BOOK/index.xml >>$LOGDIR/$LOG 2>&1 ;; *) exit 1 ;; Index: HLFS/hlfs.xsl =================================================================== --- HLFS/hlfs.xsl (revision 2727) +++ HLFS/hlfs.xsl (working copy) @@ -39,6 +39,9 @@ + + + @@ -191,6 +194,10 @@ + + + export LD_PRELOAD=/usr/lib/libpaco-log.so + make install cd ../blfs-bootscripts-&blfs-bootscripts-version; @@ -248,6 +255,25 @@ || true + + + + export LD_PRELOAD=/usr/lib/libpaco-log.so + + + + + + export LD_PRELOAD=/usr/lib/libpaco-log.so + + + + Index: HLFS/master.sh =================================================================== --- HLFS/master.sh (revision 2727) +++ HLFS/master.sh (working copy) @@ -245,6 +245,11 @@ # Keep the script file name this_script=`basename $file` + # If this script is *-paco, then skip it + case $this_script in + *paco ) continue ;; + esac + # Skip this script depending on jhalfs.conf flags set. case $this_script in # We'll run the chroot commands differently than the others, so skip them in the @@ -254,6 +259,18 @@ *-stripping* ) [[ "$STRIP" = "0" ]] && continue ;; esac + # Install paco as the first package in ch6, before installing + # linux-libc-headers, except in iterartive builds + if [[ -z "$N" ]]; then + case $this_script in + *linux-libc-headers) + TMP_SCRIPT="$this_script" + this_script=`echo $this_script | sed -e 's/linux-libc-headers/a-paco/'` + wrt_paco_inst "$this_script" + this_script="$TMP_SCRIPT" ;; + esac + fi + # Grab the name of the target name=`echo $this_script | sed -e 's@[0-9]\{3\}-@@'` @@ -324,7 +341,9 @@ wrt_run_as_root "${this_script}" "${file}" ;; *) # The rest of Chapter06 + wrt_paco_prep wrt_run_as_chroot1 "${this_script}" "${file}" + wrt_paco_log "$name" "$vrs" ;; esac # @@ -357,6 +376,16 @@ PREV=${this_script}${N} # Set system_build envar for iteration targets system_build=$chapter6 + + # Reinstall paco after the toolchain has been readjusted. + case "${this_script}" in + *readjusting) + TMP_SCRIPT="$this_script" + this_script=`echo $this_script | sed -e 's/readjusting/x-paco/'` + wrt_paco_inst "$this_script" + this_script="$TMP_SCRIPT" ;; + esac + done # end for file in chapter06/* } @@ -419,6 +448,15 @@ wrt_run_as_chroot2 "${this_script}" "${file}" fi ;; + *kernel) wrt_paco_prep + wrt_run_as_chroot2 "$this_script" "$file" + version=`grep "^linux-version" $JHALFSDIR/packages | sed -e 's/.* //' -e 's/"//g'` + wrt_paco_log "linux-kernel" "$version" + ;; + *bootscripts) wrt_paco_prep + wrt_run_as_chroot2 "$this_script" "$file" + wrt_paco_log "hlfs-bootscripts" + ;; *) # All other scripts wrt_run_as_chroot2 "${this_script}" "${file}" ;; Index: master.sh =================================================================== --- master.sh (revision 2727) +++ master.sh (working copy) @@ -147,6 +147,8 @@ --help | -h ) usage | more && exit ;; + --no-paco ) USE_PACO=0 ;; + --optimize | -O ) test $# = 1 && eval "$exit_missing_arg" shift @@ -438,6 +440,14 @@ [[ $VERBOSITY > 0 ]] && echo "OK" fi # +# paco module +if [[ "$USE_PACO" = "1" ]]; then + [[ $VERBOSITY > 0 ]] && echo -n "Loading paco module..." + source $COMMON_DIR/paco-functions + [[ $? > 0 ]] && echo "$COMMON_DIR/paco-functions did not load.." && exit 2 + [[ $VERBOSITY > 0 ]] && echo "OK" +fi +# # optimize module if [[ "$OPTIMIZE" != "0" ]]; then [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..." @@ -482,7 +492,11 @@ # if [[ "$PWD" != "$JHALFSDIR" ]]; then cp $COMMON_DIR/makefile-functions $JHALFSDIR/ + # + [[ $USE_PACO != "0" ]] && cp $COMMON_DIR/paco-build-$PROGNAME.sh $JHALFSDIR/ + # [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/ + # if [[ "$COMPARE" != "0" ]] ; then mkdir -p $JHALFSDIR/extras cp extras/* $JHALFSDIR/extras