X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=tools%2Fmake-functions;h=00d7d337cd6eab53c2274b270e9c483106176672;hp=147d76b6fbd5b3b210637e43c0c334a31b04d538;hb=9ed81c4116805d454563e95e29cf8bec38105ce4;hpb=b4b6bcdbdf1d96b436f657786840acec0455bacb diff --git a/tools/make-functions b/tools/make-functions index 147d76b6fb..00d7d337cd 100644 --- a/tools/make-functions +++ b/tools/make-functions @@ -1,9 +1,28 @@ #!/bin/bash -############################################################################ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# # +# 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 @@ -108,8 +127,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 @@ -259,7 +298,6 @@ entershell() { # lfsmakecommoncheck() { - # Script present? if [ ! -f $BASEDIR/lfs/$1 ]; then exiterror "No such file or directory: $BASEDIR/$1" @@ -272,7 +310,7 @@ lfsmakecommoncheck() local i for i in $SKIP_PACKAGE_LIST do - if [ "$i" == "$1" ]; then + if [ "$i" == "$1" ]; then beautify result SKIP return 1; fi @@ -334,6 +372,7 @@ lfsmake2() { CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \ KVER=$KVER MAKETUNING=$MAKETUNING \ BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ + IPFVER="$IPFVER" \ /tools/bin/bash -x -c "cd /usr/src/lfs && \ make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 local COMPILE_SUCCESS=$? @@ -358,12 +397,14 @@ ipfiremake() { TERM=$TERM PS1='\u:\w\$ ' \ PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \ VERSION=$VERSION \ + CORE=$CORE \ CONFIG_ROOT=$CONFIG_ROOT \ NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \ CFLAGS="$C2FLAGS" CXXFLAGS="$CXX2FLAGS" \ CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \ KVER=$KVER MAKETUNING=$MAKETUNING \ BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ + IPFVER="$IPFVER" \ /bin/bash -x -c "cd /usr/src/lfs && \ make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 @@ -380,58 +421,62 @@ 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 \ - 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 + + 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 \ + 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 + + 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 } installmake() { - if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then - echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE - cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR 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 - if [ $? -ne 0 ]; then - exiterror "md5sum error in $1, check file in cache or signature" - fi + lfsmakecommoncheck $* + [ $? == 1 ] && return 0 + + local PKG_TIME_START=`date +%s` chroot $LFS /tools/bin/env -i HOME=/root \ TERM=$TERM PS1='\u:\w\$ ' \ - PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \ + PATH=/opt/i586-uClibc/i586-linux-uclibc/bin:/opt/i586-uClibc/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \ VERSION=$VERSION \ 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 \ + 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 - if [ $? -ne 0 ]; then - exiterror "Building $*" - fi + + 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 "Building $*"; 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 } @@ -442,42 +487,38 @@ update_logs() { } batch_script() { - echo -ne "### UPDATE LOGS" + echo -ne "${BOLD}***This is our auto buildscript! Have fun...${NORMAL}\n" update_logs evaluate 1 if [ "$IPFIRE_REBUILD" -eq "0" ]; then - echo -ne "### SAVING TIME" export IPFIRE_START_TIME=`date` + + $0 clean evaluate 1 - echo "### RUNNING SVN-UPDATE" - $0 svn update - evaluate 1 mail SVNUPDATE + $0 git update --force + evaluate 1 mail_me UPDATE echo "### EXPORT SOURCES" - $0 svn dist - evaluate 1 mail SVNDIST - - echo "### RUNNING PREFETCH" - $0 prefetch | grep -q "md5 difference" - evaluate 1 mail PREFETCH + $0 git dist + evaluate 1 mail_me DIST fi echo "### RUNNING BUILD" $0 build - evaluate 1 mail ERROR + evaluate 1 mail_me ERROR echo "### UPLOADING ISO" $0 upload iso - evaluate 1 mail ISO + evaluate 1 mail_me ISO echo -ne "### UPLOADING PAKS" $0 upload paks - evaluate 1 mail PAKS + evaluate 1 mail_me PAKS - echo -n "${BOLD}***SUCCESS!${NORMAL}" - evaluate 0 mail SUCCESS + echo -ne "${BOLD}***SUCCESS!${NORMAL}" + mail_me success exit 0 } @@ -487,15 +528,15 @@ watch_screen() { screen -x ipfire } -mail() { - chmod 755 tools/sendEmail - ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz +mail_me() { + echo "From: $MAIL_FROM" > /tmp/ipfire_mail_body.$$ + echo "To: $MAIL_TO" >> /tmp/ipfire_mail_body.$$ 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. + cat <> /tmp/ipfire_mail_body.$$ +Subject: SUCCESS: IPFIRE-BUILD on `hostname` +Building IPFire on `hostname` was successfull! +You can find the ISO on your ftp server if you told the script where it is. Statistics: ----------- @@ -509,8 +550,8 @@ END echo -ne "${BOLD}***Sending success message${NORMAL}" ;; *) - SUBJECT="ERROR $1: IPFIRE-BUILD R$SVN_REVISION on `hostname`" - cat < /tmp/ipfire_mail_body + cat <> /tmp/ipfire_mail_body.$$ +Subject: ERROR $1: IPFIRE-BUILD on `hostname` 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. @@ -526,107 +567,168 @@ 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 + +sleep 15 + python tools/sendEmail < /tmp/ipfire_mail_body.$$ if [ "$?" -eq "0" ]; then beautify message DONE else beautify message FAIL fi - rm -f /tmp/ipfire_mail_body $ATTACHMENT + rm -f /tmp/ipfire_mail_body.$$ } 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!" + clear + echo -e "${BOLD}***This will create your configuration...${NORMAL}" + echo -ne "***If your are ready press !" + read + clear + echo -ne "***The buildscript will create a full iso image.\n" + echo -ne "***If you want to skip any package please enter its name here seperated with space.\n" + echo -ne "Actually in the list are: $SKIP_PACKAGE_LIST\n" + echo -ne "Do you want to change this? (y/N) " + read YESNO + if [ "$YESNO" == "y" ]; then + echo -ne "Please type: " + read SKIP_PACKAGE_LIST + echo -ne "You entered: $SKIP_PACKAGE_LIST\n" 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!" + + clear + echo -ne "***When you have compiled successfully, there is the possibility\n" + echo -ne "***to upload the iso image to a ftp server.\n" + echo -ne "***If the url is empty there will be no upload.\n" + echo -ne "Actually there is: $FTP_ISO_URL\n" + echo -ne "Do you want to change this? (y/N) " + read YESNO + if [ "$YESNO" == "y" ]; then + echo -ne "Please type the url: " + read FTP_ISO_URL + echo -ne "Please type the path: " + read FTP_ISO_PATH + echo -ne "Please type the username: " + read FTP_ISO_USER + echo -ne "Please type the password (hidden): " + read -s FTP_ISO_PASS + + fi + + clear + echo -ne "***When you add some new software you can easyly\n" + echo -ne "***upload the source code to our repository server.\n" + echo -ne "***If the url is empty there will be no upload.\n" + echo -ne "Actually there is: $FTP_CACHE_URL\n" + echo -ne "Do you want to change this? (y/N) " + read YESNO + if [ "$YESNO" == "y" ]; then + echo -ne "Please type the url: " + read FTP_CACHE_URL + echo -ne "Please type the path: " + read FTP_CACHE_PATH + echo -ne "Please type the username: " + read FTP_CACHE_USER + echo -ne "Please type the password (hidden): " + read -s FTP_CACHE_PASS + + fi + + clear + echo -ne "***If there are some important messages you\n" + echo -ne "***can get a notification mail.\n" + echo -ne "***Please type one ore more email adresses (seperated by comma).\n" + echo -ne "Actually there is: $MAIL_TO\n" + echo -ne "Do you want to change this? (y/N) " + read YESNO + if [ "$YESNO" == "y" ]; then + echo -ne "Please type: " + read MAIL_TO + echo -ne "You should enter a mail server to login...\n" + echo -ne "Please type the url: " + read MAIL_SERVER + echo -ne "Please type where the email is from: " + read MAIL_FROM + echo -ne "Please type the username: " + read MAIL_USER + echo -ne "Please type the password (hidden): " + read -s MAIL_PASS + 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 + echo -ne "\n${BOLD}***Saving...${NORMAL}" + cat < $BASEDIR/.config +### iso server +FTP_ISO_URL=$FTP_ISO_URL +FTP_ISO_PATH=$FTP_ISO_PATH +FTP_ISO_USER=$FTP_ISO_USER +FTP_ISO_PASS=$FTP_ISO_PASS ### 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 +FTP_CACHE_URL=$FTP_CACHE_URL +FTP_CACHE_PATH=$FTP_CACHE_PATH +FTP_CACHE_USER=$FTP_CACHE_USER +FTP_CACHE_PASS=$FTP_CACHE_PASS ### 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 +MAIL_TO="$MAIL_TO" +MAIL_FROM=$MAIL_FROM +MAIL_SERVER=$MAIL_SERVER +MAIL_USER=$MAIL_USER +MAIL_PASS=$MAIL_PASS +### misc +SKIP_PACKAGE_LIST="$SKIP_PACKAGE_LIST" END beautify message DONE -} \ No newline at end of file +} + +compile_tftpd() { + mkdir $BASEDIR/tmp + tar xvfz $BASEDIR/cache/tftp-hpa-0.42.tar.gz -C $BASEDIR/tmp + cd $BASEDIR/tmp/tftp-hpa-* + ./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-* +} + +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 + 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.$MACHINE-pxe.tgz ]; then + mkdir -p $BASEDIR/tftpboot + tar xfz $BASEDIR/ipfire-$VERSION.$MACHINE-pxe.tgz -C $BASEDIR/tftpboot + return 0 + fi + return 1 +} + +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/check_strings.pl en > $BASEDIR/doc/language_issues.en + $BASEDIR/tools/check_strings.pl de > $BASEDIR/doc/language_issues.de + $BASEDIR/tools/check_langs.sh > $BASEDIR/doc/language_missings + beautify message DONE +}