X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=tools%2Fmake-functions;h=b6e0ff3c3f45f4e3d4f3f97b8757142b9c5bbe2c;hb=a1531946206be54d01ccb7c9266c8d6f8fcce172;hp=48b5df696996aaee5a80d3ed9ca0ffce3f7c411f;hpb=d733119b38a5c84af64e423fce82f1ccad193914;p=people%2Fteissler%2Fipfire-2.x.git diff --git a/tools/make-functions b/tools/make-functions index 48b5df696..a50538e9d 100644 --- a/tools/make-functions +++ b/tools/make-functions @@ -1,9 +1,28 @@ #!/bin/bash -############################################################################ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007-2011 IPFire Team # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### +############################################################################### # # Beautifying variables & presentation & input output interface # -############################################################################ +############################################################################### ## Screen Dimentions # Find current screen size @@ -41,6 +60,69 @@ WARN="\\033[1;35m" FAIL="\\033[1;31m" NORMAL="\\033[0;39m" +configure_target() { + local target_arch="${1}" + + if [ "${target_arch}" = "default" ]; then + target_arch="$(configure_target_guess)" + fi + + case "${target_arch}" in + i586) + BUILDTARGET="${TARGET_ARCH}-pc-linux-gnu" + CROSSTARGET="${BUILD_ARCH}-cross-linux-gnu" + CFLAGS_ARCH="-march=i586 -fomit-frame-pointer" + ;; + + armv5tel) + BUILDTARGET="${TARGET_ARCH}-unknown-linux-gnueabi" + CROSSTARGET="${BUILD_ARCH}-cross-linux-gnueabi" + CFLAGS_ARCH="-march=armv5te -mfloat-abi=soft -fomit-frame-pointer" + MACHINE_TYPE="arm" + ;; + + *) + exiterror "Cannot build for architure ${target_arch}" + ;; + esac + + # Check if the QEMU helper is available if needed. + if qemu_is_required "${target_arch}"; then + local qemu_target_helper="$(qemu_find_target_helper_name "${target_arch}")" + + if [ -n "${qemu_target_helper}" ]; then + QEMU_TARGET_HELPER="${qemu_target_helper}" + else + exiterror "Could not find a binfmt_misc helper entry for ${target_arch}" + fi + fi + + TARGET_ARCH="${target_arch}" + + # Old variable names + MACHINE="${TARGET_ARCH}" + + CFLAGS="-O2 -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fPIC" + CFLAGS="${CFLAGS} -fstack-protector-all --param=ssp-buffer-size=4 ${CFLAGS_ARCH}" + CXXFLAGS="${CFLAGS}" + C2FLAGS="${CFLAGS}" + CXX2FLAGS="${CXXFLAGS}" +} + +configure_target_guess() { + case "${BUILD_ARCH}" in + x86_64|i686|i586) + echo "i586" + ;; + armv7*|armv6*|armv5*) + echo "armv5tel" + ;; + *) + exiterror "Cannot guess target architecture" + ;; + esac +} + evaluate() { if [ "$?" -eq "0" ]; then beautify message DONE @@ -108,8 +190,28 @@ beautify() ;; build_stage) MESSAGE=$2 - echo -ne "${BOLD}*** ${MESSAGE}${SET_VER_COL} version${SET_OPT_COL} options" - echo -ne "${SET_TIME_COL} time (sec)${SET_RESULT_COL} status${NORMAL}\n" + if [ "$STAGE_TIME_START" ]; then + LAST_STAGE_TIME=$[ `date +%s` - $STAGE_TIME_START ] + fi + STAGE_TIME_START=`date +%s` + echo -ne "${BOLD}*** ${MESSAGE}${NORMAL}" + if [ "$LAST_STAGE_TIME" ]; then + echo -ne "${DONE} (Last stage took $LAST_STAGE_TIME secs)${NORMAL}" + fi + echo -ne "${BOLD}${SET_VER_COL} version${SET_OPT_COL} options${SET_TIME_COL} time (sec)${SET_RESULT_COL} status${NORMAL}\n" + ;; + build_start) + BUILD_TIME_START=`date +%s` + ;; + build_end) + BUILD_TIME_END=`date +%s` + seconds=$[ $BUILD_TIME_END - $BUILD_TIME_START ] + hours=$((seconds / 3600)) + seconds=$((seconds % 3600)) + minutes=$((seconds / 60)) + seconds=$((seconds % 60)) + + echo -ne "${DONE}***Build is finished now and took $hours hour(s) $minutes minute(s) $seconds second(s)!${NORMAL}\n" ;; make_pkg) echo "$2" | while read PKG_VER PROGRAM OPTIONS @@ -146,7 +248,6 @@ beautify() echo -ne "${SET_RESULT_COL}[${FAIL} FAIL ${NORMAL}]\n" ;; SKIP) - echo -ne "${SET_TIME_COL}[ ${BOLD}${SET_TIME_COL_REAL}$PKG_TIME${NORMAL} ]" echo -ne "${SET_RESULT_COL}[${SKIP} SKIP ${NORMAL}]\n" ;; esac @@ -157,12 +258,14 @@ beautify() get_pkg_ver() { - PKG_VER=`grep ^VER $1 | awk '{print $3}'` + PKG_VER=`grep -E "^VER |^VER=|^VER " $1 | awk '{print $3}'` if [ -z $PKG_VER ]; then PKG_VER=`grep "Exp " $1 | awk '{print $4}'` fi - + if [ -z $PKG_VER ]; then + PKG_VER="?" + fi if [ ${#PKG_VER} -gt $VER_WIDTH ]; then # If a package version number is greater than $VER_WIDTH, we keep the first 4 characters # and replace enough characters to fit the resulting string on the screen. We'll replace @@ -177,19 +280,6 @@ get_pkg_ver() echo "$PKG_VER" } # End of get_pkg_ver() -if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE ]; then - echo "`date -u '+%b %e %T'`: Machine is iX86 (or equivalent)" >> $LOGFILE - MACHINE=i586 - BUILDTARGET=i586-pc-linux-gnu - CFLAGS="-O2 -march=i586 -pipe -fomit-frame-pointer" - CXXFLAGS="-O2 -march=i586 -pipe -fomit-frame-pointer" - C2FLAGS="-O2 -march=i586 -mtune=i586 -pipe -fomit-frame-pointer" - CXX2FLAGS="-O2 -march=i586 -mtune=i586 -pipe -fomit-frame-pointer" -else - echo "`date -u '+%b %e %T'`: Can't determine your architecture - $MACHINE" >> $LOGFILE - exit 1 -fi - # Define immediately stdumount() { umount $BASEDIR/build/sys 2>/dev/null; @@ -221,22 +311,158 @@ exiterror() { exit 1 } +fake_environ() { + [ -e "${BASEDIR}/build/tools/lib/libpakfire_preload.so" ] || return + + local env="LD_PRELOAD=/tools/lib/libpakfire_preload.so" + + # Fake kernel version, because some of the packages do not compile + # with kernel 3.0 and later. + env="${env} UTS_RELEASE=${KVER}" + + # Fake machine version. + env="${env} UTS_MACHINE=${TARGET_ARCH}" + + echo "${env}" +} + +qemu_environ() { + local env + + # Don't add anything if qemu is not used. + if ! qemu_is_required; then + return + fi + + # Set default qemu options + case "${TARGET_ARCH}" in + arm*) + QEMU_CPU="${QEMU_CPU:-cortex-a9}" + + env="${env} QEMU_CPU=${QEMU_CPU}" + ;; + esac + + # Enable QEMU strace + #env="${env} QEMU_STRACE=1" + + echo "${env}" +} + +qemu_is_required() { + local target_arch="${1}" + + if [ -z "${target_arch}" ]; then + target_arch="${TARGET_ARCH}" + fi + + case "${BUILD_ARCH},${target_arch}" in + x86_64,arm*|i?86,arm*) + return 0 + ;; + *) + return 1 + ;; + esac +} + +qemu_install_helper() { + # Do nothing, if qemu is not required + if ! qemu_is_required; then + return 0 + fi + + if [ -z "${QEMU_TARGET_HELPER}" ]; then + exiterror "QEMU_TARGET_HELPER not set" + fi + + # Check if the helper is already installed. + if [ -x "${LFS}${QEMU_TARGET_HELPER}" ]; then + return 0 + fi + + # Try to find a suitable binary that we can install + # to the build environment. + local file + for file in "${QEMU_TARGET_HELPER}" "${QEMU_TARGET_HELPER}-static"; do + # file must exist and be executable. + [ -x "${file}" ] || continue + + # Must be static. + file_is_static "${file}" || continue + + local dirname="${LFS}$(dirname "${file}")" + mkdir -p "${dirname}" + + install -m 755 "${file}" "${LFS}${QEMU_TARGET_HELPER}" + return 0 + done + + exiterror "Could not find a statically-linked QEMU emulator: ${QEMU_TARGET_HELPER}" +} + +qemu_find_target_helper_name() { + local target_arch="${1}" + + local magic + case "${target_arch}" in + arm*) + magic="7f454c4601010100000000000000000002002800" + ;; + esac + + [ -z "${magic}" ] && return 1 + + local file + for file in /proc/sys/fs/binfmt_misc/*; do + # Search for the file with the correct magic value. + grep -qE "^magic ${magic}$" "${file}" || continue + + local interpreter="$(grep "^interpreter" "${file}" | awk '{ print $2 }')" + + [ -n "${interpreter}" ] || continue + [ "${interpreter:0:1}" = "/" ] || continue + [ -x "${interpreter}" ] || continue + + echo "${interpreter}" + return 0 + done + + return 1 +} + +file_is_static() { + local file="${1}" + + file ${file} 2>/dev/null | grep -q "statically linked" +} + entershell() { if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/" fi + + # Install QEMU helper, if needed + qemu_install_helper + echo "Entering to a shell inside LFS chroot, go out with exit" chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ + PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ VERSION=$VERSION CONFIG_ROOT=$CONFIG_ROOT \ NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ CFLAGS="$CF2LAGS" CXXFLAGS="$CXX2FLAGS" \ CCACHE_DIR=/usr/src/ccache \ - CCACHE_HASHDIR=1 \ + CCACHE_COMPRESS=1 \ + CCACHE_COMPILERCHECK="none" \ KVER=$KVER \ - BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ + BUILDTARGET="$BUILDTARGET" \ + CROSSTARGET="${CROSSTARGET}" \ + MACHINE="$MACHINE" \ + MACHINE_TYPE="$MACHINE_TYPE" \ KGCC="ccache /usr/bin/gcc" \ - /tools/bin/bash + $(fake_environ) \ + $(qemu_environ) \ + /tools/bin/bash -i if [ $? -ne 0 ]; then beautify message FAIL exiterror "chroot error" @@ -259,7 +485,6 @@ entershell() { # lfsmakecommoncheck() { - # Script present? if [ ! -f $BASEDIR/lfs/$1 ]; then exiterror "No such file or directory: $BASEDIR/$1" @@ -268,11 +493,21 @@ lfsmakecommoncheck() local PKG_VER=`get_pkg_ver $BASEDIR/lfs/$1` beautify make_pkg "$PKG_VER $*" + # Check if this package is supported by our architecture. + # If no SUP_ARCH is found, we assume the package can be built for all. + if grep "^SUP_ARCH" ${BASEDIR}/lfs/${1} >/dev/null; then + # Check if package supports ${MACHINE} or all architectures. + if ! grep -E "^SUP_ARCH.*${MACHINE}|^SUP_ARCH.*all" ${BASEDIR}/lfs/${1} >/dev/null; then + beautify result SKIP + return 1 + fi + fi + # Script slipped? local i for i in $SKIP_PACKAGE_LIST do - if [ "$i" == "$1" ]; then + if [ "$i" == "$1" ]; then beautify result SKIP return 1; fi @@ -280,12 +515,16 @@ lfsmakecommoncheck() echo -ne "`date -u '+%b %e %T'`: Building $* " >> $LOGFILE - cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download >> $LOGFILE 2>&1 + cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \ + MACHINE_TYPE="$MACHINE_TYPE" \ + MESSAGE="$1\t " download >> $LOGFILE 2>&1 if [ $? -ne 0 ]; then exiterror "Download error in $1" fi - cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1 + cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \ + MACHINE_TYPE="$MACHINE_TYPE" \ + MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1 if [ $? -ne 0 ]; then exiterror "md5sum error in $1, check file in cache or signature" fi @@ -300,7 +539,9 @@ lfsmake1() { local PKG_TIME_START=`date +%s` cd $BASEDIR/lfs && make -f $* BUILDTARGET=$BUILDTARGET \ + CROSSTARGET="${CROSSTARGET}" \ MACHINE=$MACHINE \ + MACHINE_TYPE=$MACHINE_TYPE \ LFS_BASEDIR=$BASEDIR \ ROOT=$LFS \ KVER=$KVER \ @@ -323,18 +564,27 @@ lfsmake2() { lfsmakecommoncheck $* [ $? == 1 ] && return 0 + # Install QEMU helper, if needed + qemu_install_helper + local PKG_TIME_START=`date +%s` chroot $LFS /tools/bin/env -i HOME=/root \ TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ - VERSION=$VERSION \ + PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ + VERSION=$VERSION PAKFIRE_CORE="${PAKFIRE_CORE}" \ + SYSTEM_RELEASE="${SYSTEM_RELEASE}" \ CONFIG_ROOT=$CONFIG_ROOT \ NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ CFLAGS="$C2FLAGS" CXXFLAGS="$CXX2FLAGS" \ - CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \ + CCACHE_DIR=/usr/src/ccache CCACHE_COMPRESS=1 \ + CCACHE_COMPILERCHECK="none" \ KVER=$KVER MAKETUNING=$MAKETUNING \ - BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ - IPFVER="$IPFVER" \ + BUILDTARGET="$BUILDTARGET" \ + CROSSTARGET="${CROSSTARGET}" \ + MACHINE="$MACHINE" \ + MACHINE_TYPE="$MACHINE_TYPE" \ + $(qemu_environ) \ + $(fake_environ) \ /tools/bin/bash -x -c "cd /usr/src/lfs && \ make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 local COMPILE_SUCCESS=$? @@ -354,18 +604,28 @@ ipfiremake() { lfsmakecommoncheck $* [ $? == 1 ] && return 0 + # Install QEMU helper, if needed + qemu_install_helper + local PKG_TIME_START=`date +%s` chroot $LFS /tools/bin/env -i HOME=/root \ TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \ + PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \ VERSION=$VERSION \ + CORE=$CORE \ CONFIG_ROOT=$CONFIG_ROOT \ NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ + SYSTEM_RELEASE="$SYSTEM_RELEASE" \ CFLAGS="$C2FLAGS" CXXFLAGS="$CXX2FLAGS" \ - CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \ + CCACHE_DIR=/usr/src/ccache CCACHE_COMPRESS=1 \ + CCACHE_COMPILERCHECK="none" \ KVER=$KVER MAKETUNING=$MAKETUNING \ - BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ - IPFVER="$IPFVER" \ + BUILDTARGET="$BUILDTARGET" \ + CROSSTARGET="${CROSSTARGET}" \ + MACHINE="$MACHINE" \ + MACHINE_TYPE="$MACHINE_TYPE" \ + $(qemu_environ) \ + $(fake_environ) \ /bin/bash -x -c "cd /usr/src/lfs && \ make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 @@ -382,25 +642,40 @@ ipfiremake() { } ipfiredist() { - if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then - echo "`date -u '+%b %e %T'`: Packaging $1" | tee -a $LOGFILE - chroot $LFS /tools/bin/env -i HOME=/root \ - TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \ - VERSION=$VERSION \ - CONFIG_ROOT=$CONFIG_ROOT \ - NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ - CFLAGS="$C2FLAGS" CXXFLAGS="$CXX2FLAGS" \ - CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \ - KVER=$KVER IPFVER="$IPFVER" \ - BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ - /bin/bash -x -c "cd /usr/src/lfs && \ - make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1 - if [ $? -ne 0 ]; then - exiterror "Packaging $1" - fi + lfsmakecommoncheck $* + [ $? == 1 ] && return 0 + + # Install QEMU helper, if needed + qemu_install_helper + + local PKG_TIME_START=`date +%s` + chroot $LFS /tools/bin/env -i HOME=/root \ + TERM=$TERM PS1='\u:\w\$ ' \ + PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \ + VERSION=$VERSION \ + CONFIG_ROOT=$CONFIG_ROOT \ + NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ + CFLAGS="$C2FLAGS" CXXFLAGS="$CXX2FLAGS" \ + CCACHE_DIR=/usr/src/ccache CCACHE_COMPRESS=1 \ + CCACHE_COMPILERCHECK="none" \ + KVER=$KVER \ + BUILDTARGET="$BUILDTARGET" \ + CROSSTARGET="${CROSSTARGET}" \ + MACHINE="$MACHINE" \ + MACHINE_TYPE="$MACHINE_TYPE" \ + $(qemu_environ) \ + $(fake_environ) \ + /bin/bash -x -c "cd /usr/src/lfs && \ + make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1 + + local COMPILE_SUCCESS=$? + local PKG_TIME_END=`date +%s` + + if [ $COMPILE_SUCCESS -ne 0 ]; then + beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] + exiterror "Packaging $*"; else - exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1" + beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] fi return 0 } @@ -409,20 +684,27 @@ installmake() { lfsmakecommoncheck $* [ $? == 1 ] && return 0 + # Install QEMU helper, if needed + qemu_install_helper + local PKG_TIME_START=`date +%s` - chroot $LFS /tools/bin/env -i HOME=/root \ + chroot $LFS /tools/bin/env -i HOME=/root \ TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/opt/i586-uClibc/i586-linux-uclibc/bin:/opt/i586-uClibc/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \ + PATH=/tools/ccache/bin:/bin:/usr/bin:/sbin:/usr/sbin \ VERSION=$VERSION \ + SYSTEM_RELEASE="${SYSTEM_RELEASE}" \ CONFIG_ROOT=$CONFIG_ROOT \ - LFS_PASS="install" \ NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ CFLAGS="-Os" CXXFLAGS="-Os" \ - CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \ - KVER=$KVER IPFVER="$IPFVER" \ - BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ - /bin/bash -x -c "cd /usr/src/lfs && \ - make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 + CCACHE_DIR=/usr/src/ccache CCACHE_COMPRESS=1 CCACHE_HASHDIR=1 \ + KVER=$KVER \ + BUILDTARGET="$BUILDTARGET" \ + CROSSTARGET="${CROSSTARGET}" \ + MACHINE="$MACHINE" \ + MACHINE_TYPE="$MACHINE_TYPE" \ + LD_LIBRARY_PATH=/tools/lib \ + /tools/bin/bash -x -c "cd /usr/src/lfs && \ + /tools/bin/make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 local COMPILE_SUCCESS=$? local PKG_TIME_END=`date +%s` @@ -436,241 +718,25 @@ installmake() { return 0 } -update_logs() { - tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.* - rm -f log/_build.* -} - -batch_script() { - echo -ne "### UPDATE LOGS" - update_logs - evaluate 1 - - if [ "$IPFIRE_REBUILD" -eq "0" ]; then - echo -ne "### SAVING TIME" - export IPFIRE_START_TIME=`date` - evaluate 1 - - echo "### RUNNING SVN-UPDATE" - $0 svn update - evaluate 1 mail SVNUPDATE - - echo "### EXPORT SOURCES" - $0 svn dist - evaluate 1 mail SVNDIST - - echo "### RUNNING PREFETCH" - $0 prefetch | grep -q "md5 difference" - evaluate 1 mail PREFETCH - fi - - echo "### RUNNING BUILD" - $0 build - evaluate 1 mail ERROR - - echo "### UPLOADING ISO" - $0 upload iso - evaluate 1 mail ISO - - echo -ne "### UPLOADING PAKS" - $0 upload paks - evaluate 1 mail PAKS - - echo -n "${BOLD}***SUCCESS!${NORMAL}" - evaluate 0 mail SUCCESS - exit 0 -} - -watch_screen() { - echo -e "${BOLD}Exit with Ctrl+A, Ctrl+D.${NORMAL}" - sleep 0.5 - screen -x ipfire -} - -mail() { - chmod 755 tools/sendEmail - ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz - case "$1" in - success) - SUBJECT="SUCCESS: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - cat < /tmp/ipfire_mail_body -Building IPFire on `hostname` in Revision $SVN_REVISION was successfull! -You can find the ISO on your ftp server. - -Statistics: ------------ -Started: $IPFIRE_START_TIME -Finished: `date` - -Best Regards -Your IPFire-Build-Script - -END - echo -ne "${BOLD}***Sending success message${NORMAL}" - ;; - *) - SUBJECT="ERROR $1: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - cat < /tmp/ipfire_mail_body -When I was building IPFire on `hostname`, I have found an ERROR with name $1! -Here you can see the logs and detect the reason for this error. - -Best Regards -Your IPFire-Build-Script - - -Here is a summary... The full logs are in the attachment. ---------------------------------------------------------- - -`tail log/_*` -END - echo -ne "${BOLD}***Sending error message${NORMAL}" - ;; - esac - tar cfz $ATTACHMENT log/_build* - cat /tmp/ipfire_mail_body | tools/sendEmail -q \ - -f $IPFIRE_MAIL_FROM \ - -t $IPFIRE_MAIL_REPORT \ - -u $SUBJECT \ - -s $IPFIRE_MAIL_SERVER:25 \ - -xu $IPFIRE_MAIL_USER \ - -xp $IPFIRE_MAIL_PASS \ - -l log/_build.mail.log \ - -a $ATTACHMENT # -v - if [ "$?" -eq "0" ]; then - beautify message DONE - else - beautify message FAIL - fi - rm -f /tmp/ipfire_mail_body $ATTACHMENT -} - -make_config() { - echo -e "This is for creating your configuration..." - echo -e "We will need some input:" - echo -e "" - echo -n "FTP-DOMAIN FOR THE ISO: " - read IPFIRE_FTP_URL_EXT - echo -n "PATH FOR $IPFIRE_FTP_URL_EXT: " - read IPFIRE_FTP_PATH_EXT - echo -n "USERNAME FOR $IPFIRE_FTP_URL_EXT: " - read IPFIRE_FTP_USER_EXT - echo -n "PASSWORD FOR $IPFIRE_FTP_URL_EXT: " - read -s IPFIRE_FTP_PASS_EXT - echo "" - echo "(You can leave this empty if the cache-server is the same as your iso-server.)" - echo -n "FTP-DOMAIN FOR THE CACHE: " - read IPFIRE_FTP_URL_INT - echo -n "PATH FOR $IPFIRE_FTP_URL_INT: " - read IPFIRE_FTP_PATH_INT - if [ $IPFIRE_FTP_URL_INT ]; then - echo -n "USERNAME FOR $IPFIRE_FTP_URL_INT: " - read IPFIRE_FTP_USER_INT - echo -n "PASSWORD FOR $IPFIRE_FTP_URL_INT: " - read -s IPFIRE_FTP_PASS_INT - else - IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_EXT - IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_EXT - IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_EXT - echo "USERNAME FOR $IPFIRE_FTP_URL_INT: $IPFIRE_FTP_USER_INT" - echo "PASSWORD FOR $IPFIRE_FTP_URL_INT: !HIDDEN!" - fi - echo "" - echo "(You can leave this empty if the pak-server is the same as your iso-server.)" - echo -n "FTP-DOMAIN FOR THE PAKS: " - read IPFIRE_FTP_URL_PAK - echo -n "PATH FOR $IPFIRE_FTP_URL_PAK: " - read IPFIRE_FTP_PATH_PAK - if [ $IPFIRE_FTP_URL_PAK ]; then - echo -n "USERNAME FOR $IPFIRE_FTP_URL_PAK: " - read IPFIRE_FTP_USER_PAK - echo -n "PASSWORD FOR $IPFIRE_FTP_URL_PAK: " - read -s IPFIRE_FTP_PASS_PAK - else - IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_EXT - IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_EXT - IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_EXT - echo "USERNAME FOR $IPFIRE_FTP_URL_PAK: $IPFIRE_FTP_USER_PAK" - echo "PASSWORD FOR $IPFIRE_FTP_URL_PAK: !HIDDEN!" - fi - echo "" - echo -e "ONE OR MORE EMAIL ADDRESS(ES) TO WHICH THE REPORTS WILL BE SENT" - echo -e "(seperated by comma)" - read IPFIRE_MAIL_REPORT - echo -n "EMAIL FROM: " - read IPFIRE_MAIL_FROM - echo -n "EMAIL SERVER: " - read IPFIRE_MAIL_SERVER - echo -n "LOGIN TO MAIL SERVER: " - read IPFIRE_MAIL_USER - echo -n "MAIL PASSWORD: " - read -s IPFIRE_MAIL_PASS - echo -n "Saving..." - cat < .config -### ISO server -IPFIRE_FTP_URL_EXT=$IPFIRE_FTP_URL_EXT -IPFIRE_FTP_PATH_EXT=$IPFIRE_FTP_PATH_EXT -IPFIRE_FTP_USER_EXT=$IPFIRE_FTP_USER_EXT -IPFIRE_FTP_PASS_EXT=$IPFIRE_FTP_PASS_EXT -### cache server -IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_INT -IPFIRE_FTP_PATH_INT=$IPFIRE_FTP_PATH_INT -IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_INT -IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_INT -### paks server -IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_PAK -IPFIRE_FTP_PATH_PAK=$IPFIRE_FTP_PATH_PAK -IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_PAK -IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_PAK -### mail reports -IPFIRE_MAIL_REPORT=$IPFIRE_MAIL_REPORT -IPFIRE_MAIL_FROM=$IPFIRE_MAIL_FROM -IPFIRE_MAIL_SERVER=$IPFIRE_MAIL_SERVER -IPFIRE_MAIL_USER=$IPFIRE_MAIL_USER -IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS -END - beautify message DONE -} - -compile_tftpd() { - mkdir $BASEDIR/tmp - tar xvfz $BASEDIR/cache/tftp-hpa-0.42.tar.gz -C $BASEDIR/tmp - cd $BASEDIR/tmp/tftp-hpa-0.42 - ./configure --prefix=/ipfire/trunk/tools/ \ - --sbindir=/ipfire/trunk/tools/ --disable-nls - make - install -c tftpd/tftpd $BASEDIR/tools/in.tftpd - cd - - rm -rf $BASEDIR/tmp/tftp-hpa-0.42 -} - -start_tftpd() { - if [ ! -e $BASEDIR/tools/in.tftpd ]; then - compile_tftpd - fi - reload_tftpd - if [ "$?" == "0" ]; then - $BASEDIR/tools/in.tftpd -l -s $BASEDIR/tftpboot +update_langs() { + echo -ne "Checking the translations for missing or obsolete strings..." + chmod 755 $BASEDIR/tools/{check_strings.pl,sort_strings.pl,check_langs.sh} + $BASEDIR/tools/sort_strings.pl en + $BASEDIR/tools/sort_strings.pl de + $BASEDIR/tools/sort_strings.pl fr + $BASEDIR/tools/sort_strings.pl es + $BASEDIR/tools/sort_strings.pl pl + $BASEDIR/tools/sort_strings.pl ru + $BASEDIR/tools/sort_strings.pl nl + $BASEDIR/tools/sort_strings.pl tr + $BASEDIR/tools/check_strings.pl en > $BASEDIR/doc/language_issues.en + $BASEDIR/tools/check_strings.pl de > $BASEDIR/doc/language_issues.de + $BASEDIR/tools/check_strings.pl fr > $BASEDIR/doc/language_issues.fr + $BASEDIR/tools/check_strings.pl es > $BASEDIR/doc/language_issues.es + $BASEDIR/tools/check_strings.pl es > $BASEDIR/doc/language_issues.pl + $BASEDIR/tools/check_strings.pl ru > $BASEDIR/doc/language_issues.ru + $BASEDIR/tools/check_strings.pl nl > $BASEDIR/doc/language_issues.nl + $BASEDIR/tools/check_strings.pl tr > $BASEDIR/doc/language_issues.tr + $BASEDIR/tools/check_langs.sh > $BASEDIR/doc/language_missings beautify message DONE - else - echo -en "You don not have a pxe boot image in your base directory.\nPlease compile first." - beautify message FAIL - exit 1 - fi -} - -stop_tftpd() { - echo -n "Stopping TFTPD..." - killall in.tftpd >/dev/null 2>&1 - sleep 3 - killall -9 in.tftp >/dev/null 2>&1 - beautify message DONE -} - -reload_tftpd() { - if [ -e $BASEDIR/ipfire-$VERSION-pxe-$MACHINE.tgz ]; then - mkdir -p $BASEDIR/tftpboot - tar xfz $BASEDIR/ipfire-$VERSION-pxe-$MACHINE.tgz -C $BASEDIR/tftpboot - return 0 - fi - return 1 }