#
###############################################################################
-CONFIG_ROOT=/etc/$SNAME # Configuration rootdir
-NICE=10 # Nice level
-TARGET=i686 # Default target
-KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }' | tr -d '\n'; grep --max-count=1 LOCALVERSION lfs/linux | awk '{ print $3 }' | tail -1`
-MACHINE_REAL=`uname -m`
-GIT_TAG=$(git tag | tail -1)
-
-# Security options
-SSP=1
-PIE=1
-PAX=1
-
-# Parallelism flag
-PARALLELISMFLAGS=-j$(( $(grep processor < /proc/cpuinfo | wc -l) * 2 + 1 ))
-DISTCC_HOSTS=localhost
-
-PWD=`pwd`
-BASENAME=`basename $0`
+PWD=$(pwd)
+BASENAME=$(basename $0)
# Debian specific settings
if [ ! -e /etc/debian_version ]; then
- FULLPATH=`which $0`
+ FULLPATH=$(which $0)
else
if [ -x /usr/bin/realpath ]; then
- FULLPATH=`/usr/bin/realpath $0`
+ FULLPATH=$(/usr/bin/realpath $0)
else
echo "ERROR: Need to do apt-get install realpath"
exit 1
fi
fi
-BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
+BASEDIR=$(echo $FULLPATH | sed "s/\/$BASENAME//g")
export BASEDIR
-. $BASEDIR/tools/make-beautify # Load this very early
-
-###############################################################################
-#
-# Read the local configuration to override the environment variables
-#
-###############################################################################
-
-if ! [ -e .config ]; then
- sed -e "s/@UUID@/$(uuidgen 2>/dev/null || cat /proc/sys/kernel/random/uuid)/" \
- -e "s/^#UUID=/UUID=/" < $BASEDIR/.config-default > $BASEDIR/.config
-fi
-
-. $BASEDIR/.config
-
-###############################################################################
-#
-# Variables that are not modifyable by .config
-#
-###############################################################################
-
-if [ 'i686' = $MACHINE_REAL \
- -o 'i586' = $MACHINE_REAL \
- -o 'i486' = $MACHINE_REAL \
- -o 'x86_64' = $MACHINE_REAL ]; then
- IFS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
-else
- beautify message FAIL
- echo "Can't determine your architecture - $MACHINE_REAL"
- exit 1
-fi
-
-if [ 'i686' = $TARGET -o 'i586' = $TARGET \
- -o 'i486' = $TARGET ]; then
- MACHINE=${TARGET}
- MACHINE_REAL=${MACHINE_REAL}
- LINKER=/lib/ld-linux.so.2
- IFS_TARGET="${MACHINE}-pc-linux-gnu"
- CFLAGS="-march=${MACHINE} -O2 -pipe -fomit-frame-pointer"
- CXXFLAGS="${CFLAGS}"
- UCLIBC_TARGET=${MACHINE}-pc-linux-uclibc
- UCLIBC_CFLAGS="-march=${MACHINE} -Os -pipe"
-elif [ 'via-c7' = $TARGET ]; then
- MACHINE=i686
- MACHINE_REAL=${MACHINE_REAL}
- LINKER=/lib/ld-linux.so.2
- IFS_TARGET="${MACHINE}-pc-linux-gnu"
- CFLAGS="-march=${MACHINE} -mmmx -msse -msse2 -msse3 -O2 -pipe"
- CXXFLAGS="${CFLAGS}"
- UCLIBC_TARGET=${MACHINE}-pc-linux-uclibc
- UCLIBC_CFLAGS="-march=i386 -Os -pipe"
-elif [ 'via-c3' = $TARGET ]; then
- MACHINE=i586
- MACHINE_REAL=${MACHINE_REAL}
- LINKER=/lib/ld-linux.so.2
- IFS_TARGET="${MACHINE}-pc-linux-gnu"
- CFLAGS="-march=c3 -m3dnow -O2 -pipe -fomit-frame-pointer"
- CXXFLAGS="${CFLAGS}"
- UCLIBC_TARGET=${MACHINE}-pc-linux-uclibc
- UCLIBC_CFLAGS="-march=${MACHINE} -Os -pipe"
-elif [ 'geodelx' = $TARGET ]; then
- MACHINE=i586
- MACHINE_REAL=${MACHINE_REAL}
- LINKER=/lib/ld-linux.so.2
- IFS_TARGET="${MACHINE}-pc-linux-gnu"
- CFLAGS="-march=geode -Os -pipe -fomit-frame-pointer"
- CXXFLAGS="${CFLAGS}"
- UCLIBC_TARGET=${MACHINE}-pc-linux-uclibc
- UCLIBC_CFLAGS="-march=geode -Os -pipe"
-else
- beautify message FAIL
- echo "Not a valid target arch (i686|i586|i486|via-c7|via-c3|geodelx) - $TARGET"
- exit 1
-fi
-
-mkdir $BASEDIR/log_${MACHINE}/ 2>/dev/null
-
-# Set up what used to be /tools
-TOOLS_DIR=/tools_${MACHINE}
-
-# Set up /installer
-INSTALLER_DIR=/installer
-
-# A place to build the iso
-CDROM_DIR=/cdrom
-
-# A place to keep the images
-IMAGES_DIR=/images
-
-# include machine in TOOLCHAINNAME
-TOOLCHAINNAME=$SNAME-$TOOLCHAINVERSION-toolchain-t${TARGET}-m${MACHINE}
-
-# The place where all uclibc files are stored in
-UCLIBC_DIR=/usr/${UCLIBC_TARGET}
-UCLIBC_CC_CORE_STATIC_DIR=${UCLIBC_DIR}/gcc-core-static
-
-#UCLIBC_SYSROOT_DIR=${UCLIBC_DIR}/${UCLIBC_TARGET}/sys-root
-UCLIBC_SYSROOT_DIR=${INSTALLER_DIR}
+. $BASEDIR/tools/make-constants # Load this very early
+. $BASEDIR/tools/make-beautify
-# Files that indicates that we are running or failed
-RUNNING=$BASEDIR/.running
-FAILED=$BASEDIR/.failed
+mkdir $BASEDIR/log_${TARGET}/ 2>/dev/null
################################################################################
# #
. $BASEDIR/tools/make-batch
. $BASEDIR/tools/make-compilers
. $BASEDIR/tools/make-git
+. $BASEDIR/tools/make-packages
+. $BASEDIR/tools/make-rootfiles
+. $BASEDIR/tools/make-vm
+. $BASEDIR/tools/make-cron
evaluate() {
RETVAL=$?
stdumount() {
sleep 0.3 # Wait one second for finish of processes
- for fs in `mount | grep $BASEDIR/build_${MACHINE} | awk '{print $3}'`; do
- umount $fs #2>/dev/null;
+ for fs in $(mount | grep $BASEDIR/build_${TARGET} | awk '{print $3}'); do
+ umount $fs 2>/dev/null;
done
} # End of stdumount()
exiterror() {
stdumount
dialogerror $*
- build_spy error
+ build_spy state error
+ if [ -n "$LOGFILE" ]; then
+ echo "$(date -u '+%b %e %T') ERROR: $*" >> $LOGFILE
+ build_spy log $(tail -n16 $LOGFILE | $BASEDIR/tools/base64)
+ fi
+ build_spy exit
touch $FAILED
rm -f $RUNNING 2>/dev/null
exit 1
} # End of exiterror()
+logger() {
+ local logfile=$LOGFILE
+ case "$1" in
+ --distcc)
+ logfile=$BASEDIR/log_$TARGET/_build.00-distcc.log
+ shift
+ ;;
+ esac
+ echo "$(date -u '+%b %e %T') $*" >> $logfile
+}
+
################################################################################
# This is the function that sets the environment of a chroot and enters it #
################################################################################
if [ ! -e $LFS/usr/src/lfs/ ]; then
exiterror "No such file or directory: $LFS/usr/src/lfs/"
fi
+
+ COMMAND=${@-bash} # Run command, given as parameters.
echo -ne "Entering ${BOLD}$MACHINE${NORMAL} LFS chroot, type exit to return to host environment\n"
KVER=$KVER \
STAGE=$STAGE \
STAGE_ORDER=$STAGE_ORDER \
- LOGFILE=`echo $LOGFILE | sed "s,$BASEDIR,/usr/src,g"` \
- bash
+ LOGFILE=$(echo $LOGFILE | sed "s,$BASEDIR,/usr/src,g") \
+ $COMMAND
if [ $? -ne 0 ]; then
exiterror "chroot error"
################################################################################
lfsmakecommoncheck()
{
+ logger "Building $*"
+ build_spy package $1
+
# Script present?
if [ ! -f $BASEDIR/lfs/$1 ]; then
exiterror "No such file or directory: $BASEDIR/lfs/$1"
fi
- local PKG_VER=`get_pkg_ver $BASEDIR/lfs/$1`
+ local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1)
beautify make_pkg "$PKG_VER $*"
# Script slipped?
local i
- for i in $SKIP_PACKAGE_LIST
- do
+ for i in $SKIP_PACKAGE_LIST; do
if [ "$i" == "$1" ]; then
beautify result SKIP
- return 1;
+ return 1
fi
done
- echo -e "`date -u '+%b %e %T'`: Building $* " >> $LOGFILE
+ # On debug build, we don't strip
+ if [ "$STAGE" != "toolchain" -a \
+ "$1" == "strip" -a "$BUILD_DEBUG" == "1" ]; then
+ beautify result SKIP
+ return 1
+ fi
+
+ # Don't create addons?
+ local EXTRA=$(grep ^EXTRA $BASEDIR/lfs/$1 | awk '{print $3}')
+ if [ "$EXTRA" == "yes" ] && [ "$BUILD_EXTRAS" == "0" ]; then
+ beautify result SKIP
+ return 1
+ fi
+
+ # Don't create debugging tools?
+ local DEBUG=$(grep ^DEBUG $BASEDIR/lfs/$1 | awk '{print $3}')
+ if [ "$DEBUG" == "yes" ] && [ "$BUILD_DEBUG" == "0" ]; then
+ beautify result SKIP
+ return 1
+ fi
+
+ # Searching for dependencies
+ local found message
+ for dep in $(pkg_deps $1); do
+ found=0
+ for package in $PACKAGES_DONE; do
+ if [ "$dep" = "$package" ]; then
+ found=1
+ break
+ fi
+ done
+ [ "$found" = "0" ] && message="$message $dep"
+ done
+ if [ "$message" != "" ]; then
+ message="Deps are missing: $message"
+ if [ "$EXTRA" = "yes" ]; then
+ echo -ne "${WARN}${message}${NORMAL}"
+ beautify message SKIP
+ return 1
+ else
+ exiterror "$message"
+ fi
+ fi
cd $BASEDIR/lfs && make -s -f $* MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download >> $LOGFILE 2>&1
if [ $? -ne 0 ]; then
exiterror "Download error in $1"
fi
- build_spy set package $1 &
+ distcc_reload &
return 0 # pass all!
} # End of lfsmakecommoncheck()
lfsmakecommoncheck $*
[ $? == 1 ] && return 0
- local PKG_VER=`get_pkg_ver $BASEDIR/lfs/$1`
+ local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1)
local EXTRA_MAKE=$EXTRA_MAKE
- local PKG_TIME_START=`date +%s`
+ local PKG_TIME_START=$(date +%s)
cd $BASEDIR/lfs && $EXTRA_MAKE make -f $* \
CONFIG_ROOT=$CONFIG_ROOT \
LINKER=$LINKER \
MACHINE_REAL="$MACHINE_REAL" \
IFS_HOST="$IFS_HOST" \
IFS_TARGET="$IFS_TARGET" \
+ TARGET="$TARGET" \
LFS_BASEDIR=$BASEDIR \
LFS=$LFS \
INSTALLER_DIR=$INSTALLER_DIR \
KVER=$KVER \
STAGE=$STAGE \
STAGE_ORDER=$STAGE_ORDER \
- SSP=$SSP \
- PIE=$PIE \
- PAX=$PAX \
install >> $LOGFILE 2>&1
local COMPILE_SUCCESS=$?
- local PKG_TIME_END=`date +%s`
+ local PKG_TIME_END=$(date +%s)
if [ $COMPILE_SUCCESS -ne 0 ]; then
beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
- exiterror "Building $*";
+ exiterror "Building $*"
else
beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
+ PACKAGES_DONE="$PACKAGES_DONE $1"
fi
return 0
lfsmakecommoncheck $*
[ $? == 1 ] && return 0
- local PKG_VER=`get_pkg_ver $BASEDIR/lfs/$1`
+ local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1)
local EXTRA_MAKE=$EXTRA_MAKE
# When cross-compiling, make sure the kernel is compiled for the target
if grep -qEi 'KERNEL_MOD = yes' $1 ; then
unset EXTRA_MAKE
fi
-
- local MYCFLAGS MYCXXFLAGS
- if [ "${STAGE}" = "installer" ]; then
- MYCFLAGS=${UCLIBC_CFLAGS}
- MYCXXFLAGS=${UCLIBC_CFLAGS}
- else
- MYCFLAGS=${CFLAGS}
- MYCXXFLAGS=${CXXFLAGS}
- fi
- local PKG_TIME_START=`date +%s`
+ local PKG_TIME_START=$(date +%s)
chroot $LFS $TOOLS_DIR/bin/env -i \
HOME=/root \
TERM=$TERM \
INSTALLER_DIR=$INSTALLER_DIR \
CDROM_DIR=$CDROM_DIR \
IMAGES_DIR=$IMAGES_DIR \
- UCLIBC_DIR=$UCLIBC_DIR \
- UCLIBC_SYSROOT_DIR=$UCLIBC_SYSROOT_DIR \
- UCLIBC_TARGET=$UCLIBC_TARGET \
- UCLIBC_CC_CORE_STATIC_DIR=${UCLIBC_CC_CORE_STATIC_DIR} \
MACHINE="$MACHINE" \
MACHINE_REAL="$MACHINE_REAL" \
- CFLAGS="$MYCFLAGS" \
- CXXFLAGS="$MYCXXFLAGS" \
+ CFLAGS="$CFLAGS" \
+ CXXFLAGS="$CXXFLAGS" \
IFS_HOST="$IFS_HOST" \
IFS_TARGET="$IFS_TARGET" \
+ TARGET="$TARGET" \
+ BUILD_DEBUG=$BUILD_DEBUG \
+ BUILD_EXTRAS=$BUILD_EXTRAS \
KVER=$KVER \
STAGE=$STAGE \
STAGE_ORDER=$STAGE_ORDER \
- SSP=$SSP \
- PIE=$PIE \
- PAX=$PAX \
- LOGFILE=`echo $LOGFILE | sed "s,$BASEDIR,/usr/src,g"` \
+ EMB=$EMB \
+ IMAGENAME=$IMAGENAME \
+ LOGFILE=$(echo $LOGFILE | sed "s,$BASEDIR,/usr/src,g") \
bash -x -c "cd /usr/src/lfs && \
$EXTRA_MAKE make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
local COMPILE_SUCCESS=$?
- local PKG_TIME_END=`date +%s`
+ local PKG_TIME_END=$(date +%s)
if [ $COMPILE_SUCCESS -ne 0 ]; then
beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
- exiterror "Building $*";
+ exiterror "Building $*"
else
beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE
+ PACKAGES_DONE="$PACKAGES_DONE $1"
fi
return 0
# This prepares the build environment #
################################################################################
prepareenv() {
- LOGFILE=$BASEDIR/log_${MACHINE}/_build.00-preparation.log
+ LOGFILE=$BASEDIR/log_${TARGET}/_build.00-preparation.log
export LOGFILE
- mkdir -p $BASEDIR/log_${MACHINE}/01_toolchain 2>/dev/null
- mkdir -p $BASEDIR/log_${MACHINE}/02_base 2>/dev/null
- mkdir -p $BASEDIR/log_${MACHINE}/03_${SNAME} 2>/dev/null
- mkdir -p $BASEDIR/log_${MACHINE}/04_misc 2>/dev/null
- mkdir -p $BASEDIR/log_${MACHINE}/05_installer 2>/dev/null
- mkdir -p $BASEDIR/log_${MACHINE}/06_packages 2>/dev/null
+ mkdir -p $BASEDIR/log_${TARGET}/01_toolchain 2>/dev/null
+ mkdir -p $BASEDIR/log_${TARGET}/02_base 2>/dev/null
+ mkdir -p $BASEDIR/log_${TARGET}/03_${SNAME} 2>/dev/null
+ mkdir -p $BASEDIR/log_${TARGET}/04_misc 2>/dev/null
+ mkdir -p $BASEDIR/log_${TARGET}/05_installer 2>/dev/null
+ mkdir -p $BASEDIR/log_${TARGET}/06_packages 2>/dev/null
#############################################################################
# Are we running the right shell? #
#############################################################################
echo -ne "Resetting our nice level to $NICE"
renice $NICE $$ > /dev/null
- if [ `nice` != "$NICE" ]; then
+ if [ $(nice) != "$NICE" ]; then
beautify message FAIL
exiterror "Failed to set correct nice level"
else
# Set SCHED_BATCH
if [ -x /usr/bin/schedtool ]; then
- echo -ne "Setting kernel schedular to SCHED_BATCH"
/usr/bin/schedtool -B $$
- if [ $? -eq 0 ]; then
- beautify message DONE
- else
+ if [ $? -ne 0 ]; then
+ echo -ne "Setting kernel schedular to SCHED_BATCH"
beautify message FAIL
fi
fi
##############################################################################
# Checking if running as root user #
##############################################################################
- echo -ne "Checking if we're running as root user"
- if [ `id -u` != 0 ]; then
+ if [ $(id -u) != 0 ]; then
+ echo -ne "Checking if we're running as root user"
beautify message FAIL
exiterror "Not building as root"
- else
- beautify message DONE
fi
##############################################################################
# Checking for necessary temporary space #
##############################################################################
- echo -ne "Checking for necessary space on disk $BASE_DEV"
- BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
- BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
+ BASE_DEV=$(df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }')
+ BASE_ASPACE=$(df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }')
if (( 2048000 > $BASE_ASPACE )); then
- BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
+ BASE_USPACE=$(du -skx $BASEDIR | awk '{print $1}')
if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
+ echo -ne "Checking for necessary space on disk $BASE_DEV"
beautify message FAIL
exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
fi
- beautify message DONE
- else
- beautify message DONE
fi
##############################################################################
- # Setting security features #
+ # Embedded build #
##############################################################################
- echo -ne "Stack smashing protector (SSP)"
- if [ $SSP -eq 1 ]; then
+ echo -ne "Embedded build"
+ if [ $EMB -eq 1 ]; then
beautify message ON
+ check_loop || exiterror "Can't build flash images on this machine."
else
beautify message OFF
fi
- echo -ne "Position independent executeables (PIE)"
- if [ $PIE -eq 1 ]; then
- beautify message ON
- else
- beautify message OFF
- fi
+ export EMB
- echo -ne "GRSecurity (PAX)"
- if [ $PAX -eq 1 ]; then
- beautify message ON
- else
- beautify message OFF
- fi
+ ##############################################################################
+ # Checking CPU features #
+ ##############################################################################
- export SSP PIE PAX
+ check_supported_target $TARGET || \
+ exiterror "Your host doesn't have all needed cpu features for building \"$TARGET\""
##############################################################################
# Building Linux From Scratch system configuration #
umask 022
# Set LFS Directory
- LFS=$BASEDIR/build_${MACHINE}/${SNAME}
+ LFS=$BASEDIR/build_${TARGET}/${SNAME}
# Check /tools symlink
if [ -h $TOOLS_DIR ]; then
rm -f $TOOLS_DIR
fi
if [ ! -a $TOOLS_DIR ]; then
- ln -s $BASEDIR/build_${MACHINE}/$TOOLS_DIR /
+ ln -s $BASEDIR/build_${TARGET}/$TOOLS_DIR /
fi
if [ ! -h $TOOLS_DIR ]; then
exiterror "Could not create $TOOLS_DIR symbolic link."
unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
# Make some extra directories
- mkdir -p $BASEDIR/build_${MACHINE}/{$TOOLS_DIR,cdrom} 2>/dev/null
+ mkdir -p $BASEDIR/build_${TARGET}/{$TOOLS_DIR,cdrom,$INSTALLER_DIR,$IMAGES_DIR} 2>/dev/null
mkdir -p $BASEDIR/{cache,ccache,distcc} 2>/dev/null
mkdir -p $BASEDIR/cache/{toolchains,patches,tarballs} 2>/dev/null
mkdir -p $LFS/{$TOOLS_DIR,usr/src} 2>/dev/null
- mkdir -p $LFS/dev/pts
- mkdir -p $LFS/proc
- mkdir -p $LFS/usr/src/{cache,config,doc,lfs,log_${MACHINE},src,ccache,distcc}
- mkdir -p $LFS/{$INSTALLER_DIR,cdrom,images}
- mkdir -p $LFS/etc
+ mkdir -p $LFS/{dev,etc,proc,sys} 2>/dev/null
+ mkdir -p $LFS/dev/pts 2>/dev/null
+ mkdir -p $LFS/usr/src/{cache,config,doc,lfs,log_${TARGET},src,ccache,distcc} 2>/dev/null
+ mkdir -p $LFS/{$INSTALLER_DIR,cdrom,images} 2>/dev/null
mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
# Make all sources and proc available under lfs build
mount --bind /dev $LFS/dev
mount --bind /proc $LFS/proc
+ mount --bind /sys $LFS/sys
mount --bind $BASEDIR/cache $LFS/usr/src/cache
mount --bind $BASEDIR/ccache $LFS/usr/src/ccache
mount --bind $BASEDIR/distcc $LFS/usr/src/distcc
mount --bind $BASEDIR/config $LFS/usr/src/config
mount --bind $BASEDIR/doc $LFS/usr/src/doc
mount --bind $BASEDIR/lfs $LFS/usr/src/lfs
- mount --bind $BASEDIR/log_${MACHINE} $LFS/usr/src/log_${MACHINE}
+ mount --bind $BASEDIR/log_${TARGET} $LFS/usr/src/log_${TARGET}
mount --bind $BASEDIR/src $LFS/usr/src/src
- mount --bind $BASEDIR/build_${MACHINE}/$TOOLS_DIR $LFS/$TOOLS_DIR
- mount --bind $BASEDIR/build_${MACHINE}/$CDROM_DIR $LFS/$CDROM_DIR
+ mount --bind $BASEDIR/build_${TARGET}/$TOOLS_DIR $LFS/$TOOLS_DIR
+ mount --bind $BASEDIR/build_${TARGET}/$CDROM_DIR $LFS/$CDROM_DIR
+ mount --bind $BASEDIR/build_${TARGET}/$INSTALLER_DIR $LFS/$INSTALLER_DIR
+ mount --bind $BASEDIR/build_${TARGET}/$IMAGES_DIR $LFS/$IMAGES_DIR
# Run LFS static binary creation scripts one by one
export CCACHE_DIR=$BASEDIR/ccache
export CCACHE_HASHDIR=1
- if [ ! -z "$DISTCC_HOSTS" ]; then
- export CCACHE_PREFIX="distcc"
- export DISTCC_DIR=$BASEDIR/distcc
- fi
-
- [ -z "$DISTCC_HOSTS" ] || echo "$DISTCC_HOSTS" > $DISTCC_DIR/hosts
+ export CCACHE_PREFIX="distcc"
+ export DISTCC_DIR=$BASEDIR/distcc
# Remove pre-install list of installed files in case user erase some files before rebuild
rm -f $LFS/usr/src/lsalr 2>/dev/null
}
build() {
- clear
#a prebuilt toolchain package is only used if found in cache
if [ ! -d $BASEDIR/cache ]; then
- exiterror "Use make.sh downloadsrc first!"
+ exiterror "Use make.sh source get first!"
fi
cd $BASEDIR/cache/toolchains
- PACKAGE=`ls -v -r $TOOLCHAINNAME.tar.bz2 2> /dev/null | head -n 1`
+ PACKAGE=$(ls -v -r $TOOLCHAINNAME.tar.bz2 2>/dev/null | head -n 1)
#only restore on a clean disk
- local BLD_TIME_START=`date +%s`
- touch $RUNNING; rm -f $FAILED 2>/dev/null
+ local BLD_TIME_START=$(date +%s)
+ touch $RUNNING; rm -f $FAILED $BUILD_SPY_FILENAME 2>/dev/null
echo -ne "Building for ${BOLD}${TARGET} (${MACHINE}) on ${MACHINE_REAL}${NORMAL}\n"
- build_spy_send_profile &
- build_spy compiling
+ build_spy_send_profile
+ build_spy state compiling
+ build_spy start
+ distcc_get_hosts
- if [ -f $BASEDIR/log_${MACHINE}/02_base/stage2-LFS ]; then
+ if [ -f $BASEDIR/log_${TARGET}/02_base/stage2-LFS ]; then
prepareenv
echo "Using installed toolchain" >> $LOGFILE
beautify message DONE "Stage toolchain already built or extracted"
prepareenv
fi
fi
-
+
+ # Run distcc daemon
+ distccd_start
+
beautify build_stage "Building base"
base_build
beautify build_stage "Building miscellaneous"
misc_build
+if [ "${EMB}" -eq "0" ]; then
beautify build_stage "Building installer"
installer_build
+fi
beautify build_stage "Building packages"
packages_build
echo ""
echo "... and all this hard work for this:"
- ls -sh $BASEDIR/${SNAME}-${VERSION}.${MACHINE}.iso
+ ls -sh $BASEDIR/${IMAGENAME}.iso
- local BLD_TIME_END=`date +%s`
- build_spy set duration $[ $BLD_TIME_END - $BLD_TIME_START ]
- build_spy idle
+ local BLD_TIME_END=$(date +%s)
+ build_spy duration $[ $BLD_TIME_END - $BLD_TIME_START ]
+ build_spy state idle
+ build_spy exit
rm -f $RUNNING
}
gettoolchain() {
check_user
+ DIR_TOOLCHAIN="$BASEDIR/cache/toolchains"
+ [ -d "${DIR_TOOLCHAIN}" ] || mkdir -p ${DIR_TOOLCHAIN}
if [ ! -f $BASEDIR/cache/toolchains/$TOOLCHAINNAME.tar.bz2 ]; then
URL_TOOLCHAIN=$(grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }')
DIR_TOOLCHAIN="$BASEDIR/cache/toolchains"
- echo "Loading toolchain for $MACHINE"
- scp -2C ${IPFIRE_USER}@${URL_TOOLCHAIN}/$TOOLCHAINNAME.tar.bz2 \
+ echo "Loading toolchain for $TARGET"
+ scp -2 ${IPFIRE_USER}@${URL_TOOLCHAIN}/$TOOLCHAINNAME.tar.bz2 \
${DIR_TOOLCHAIN}
else
echo -n "Toolchain \"$TOOLCHAINNAME\" is already existing"
URL_TOOLCHAIN=$(grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }')
DIR_TOOLCHAIN="$BASEDIR/cache/toolchains"
- echo "Pushing toolchain for $MACHINE"
- scp -2C ${DIR_TOOLCHAIN}/$TOOLCHAINNAME.tar.bz2 \
+ echo "Pushing toolchain for $TARGET"
+ scp -2 ${DIR_TOOLCHAIN}/$TOOLCHAINNAME.tar.bz2 \
${IPFIRE_USER}@${URL_TOOLCHAIN}
else
echo -n "Toolchain \"$TOOLCHAINNAME\" is not existing. "
if [ ! -d $BASEDIR/cache ]; then
mkdir -p $BASEDIR/cache/{tarballs,patches}
fi
- mkdir -p $BASEDIR/log_${MACHINE}
+ mkdir -p $BASEDIR/log_${TARGET}
echo -e "${BOLD}Preload all source files${NORMAL}"
cd $BASEDIR/lfs
for i in *; do
make -s -f $i \
LFS_BASEDIR=$BASEDIR \
MESSAGE="$i\t" \
- SSP=$SSP \
- PIE=$PIE \
- PAX=$PAX download 2>> $LOGFILE
+ download 2>> $LOGFILE
[ $? -ne 0 ] && beautify message FAIL
fi
done
grep -q "$file" <<<$REMOTE_FILES && continue
NEW_FILES="$NEW_FILES $file"
done
- [ -n "$NEW_FILES" ] && scp -2C $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
+ [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
cd $BASEDIR
}
+
+puttarget() {
+ check_user
+ URL_TARGET=$(grep URL_TARGET lfs/Config | awk '{ print $3 }')
+ DIR="${BASEDIR}/${HOSTNAME}/$(date '+%Y%m%d-%0k')-${TARGET}/"
+
+ # If there is no iso, we do nothing.
+ ls ${BASEDIR}/${IMAGENAME}.* &>/dev/null || return 0
+
+ rm -rf ${BASEDIR}/${HOSTNAME} 2>/dev/null
+ mkdir -p ${DIR}
+
+ [ -e "${BASEDIR}/packages" ] && cp -al ${BASEDIR}/packages ${DIR}
+ [ -e "${BATCHLOG}" ] && \
+ python ${BASEDIR}/tools/alog2html < ${BATCHLOG} > ${DIR}/build_log.html
+ pkg_list_packages > ${DIR}/packages-list.txt
+ git_log >/dev/null; cp -l ${BASEDIR}/doc/ChangeLog ${DIR}
+ git_export; cp -l ${BASEDIR}/${SNAME}-${VERSION}.source.tar.gz ${DIR}
+ git_diff >/dev/null && cp -l ${DIFF_NAME} ${DIR}
+ cp -l ${BASEDIR}/${IMAGENAME}.* ${DIR}
+
+ cd $BASEDIR && \
+ scp -2 -r ${HOSTNAME} ${IPFIRE_USER}@${URL_TARGET} || :
+
+ rm -rf ${BASEDIR}/${HOSTNAME} 2>/dev/null
+}