2 ############################################################################
4 # This file is part of the IPFire Firewall. #
6 # IPFire is free software; you can redistribute it and/or modify #
7 # it under the terms of the GNU General Public License as published by #
8 # the Free Software Foundation; either version 2 of the License, or #
9 # (at your option) any later version. #
11 # IPFire is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
16 # You should have received a copy of the GNU General Public License #
17 # along with IPFire; if not, write to the Free Software #
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
20 # Copyright (C) 2007 IPFire-Team <info@ipfire.org>. #
22 ############################################################################
25 NAME
="IPFire" # Software name
26 SNAME
="ipfire" # Short name
27 VERSION
="2.9" # Version number
28 TOOLCHAINVERSION
="${VERSION}" # Toolchain
29 SLOGAN
="www.ipfire.org" # Software slogan
35 ################################################################################
36 # This builds the entire stage "toolchain" #
37 ################################################################################
41 export PATH
=$BASEDIR/build_
${MACHINE}/usr/local/ccache/bin:$BASEDIR/build_${MACHINE}/usr/local/distcc/bin:$BASEDIR/build_${MACHINE}/$TOOLS_DIR/bin
:$PATH
45 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.toolchain.log"
48 NATIVEGCC
=`gcc --version | grep GCC | awk {'print $3'}`
49 export NATIVEGCC GCCmajor
=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
51 # make distcc first so that CCACHE_PREFIX works immediately
52 [ -z "$DISTCC_HOSTS" ] || toolchain_make distcc
55 toolchain_make binutils PASS
=1
56 toolchain_make gcc PASS
=1
59 toolchain_make adjust-toolchain
62 toolchain_make dejagnu
63 toolchain_make gcc PASS
=2
64 toolchain_make binutils PASS
=2
65 toolchain_make ncurses
68 toolchain_make coreutils
69 toolchain_make diffutils
70 toolchain_make findutils
72 toolchain_make
gettext
80 toolchain_make texinfo
81 toolchain_make util-linux-ng
86 ################################################################################
87 # This builds the entire stage "base" #
88 ################################################################################
91 PATH
=/usr
/local
/ccache
/bin
:/usr
/local
/distcc
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:$TOOLS_DIR/bin
95 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.base.log"
100 ipfire_make man-pages
102 ipfire_make adjust-toolchain
107 ipfire_make e2fsprogs
108 ipfire_make coreutils
122 ipfire_make diffutils
124 ipfire_make findutils
132 ipfire_make inetutils
139 ipfire_make module-init-tools
147 ipfire_make udev
## NEED TO INSTALL CONFIG
148 ipfire_make util-linux-ng
152 ################################################################################
153 # This builds the entire stage "ipfire" #
154 ################################################################################
156 PATH
=/usr
/local
/ccache
/bin
:/usr
/local
/distcc
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/usr
/${MACHINE_REAL}-linux/bin
160 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.ipfire.log"
163 ### Building the configuration dirs and files
167 ### Building the kernel stuff
171 ### Building some general stuff
173 ipfire_make pkg-config
179 ipfire_make perl
### We are building the modules here.
182 #ipfire_make libidn ### Do we need this?
188 ### Building some network stuff
191 ipfire_make linux-atm
196 ipfire_make libnfnetlink
197 ipfire_make libnetfilter_queue
198 ipfire_make libnetfilter_conntrack
199 ipfire_make libnetfilter_log
201 ipfire_make l7-protocols
203 ipfire_make bridge-utils
207 ### Building some general stuff
209 ipfire_make pam PASS
=1
211 ipfire_make pam PASS
=2
214 ipfire_make cyrus-sasl
220 #ipfire_make libjpeg ### Do we need this?
227 ipfire_make br2684ctl
228 ipfire_make etherwake
232 ### Building vpn stuff
234 ipfire_make strongswan
236 ### Building filesystem stuff
238 ipfire_make reiserfsprogs
240 ipfire_make reiser4progs
242 ipfire_make sysfsutils
244 ### Building hardware utils
250 ipfire_make smartmontools
251 ipfire_make lm-sensors
254 ### Building some important tools
262 ipfire_make ntp
### Needs config.
264 ipfire_make ez-ipupdate
269 #ipfire_make logrotate
270 #ipfire_make logwatch
274 ipfire_make memtest86
+
276 #ipfire_make initscripts
280 ### -------------------------------------------------------------------------
281 ### Tools that maybe not needed
290 #ipfire_make wireless
294 ################################################################################
295 # This builds the entire stage "misc" #
296 ################################################################################
299 PATH
=/usr
/local
/ccache
/bin
:/usr
/local
/distcc
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/usr
/${MACHINE_REAL}-linux/bin
303 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.misc.log"
311 #ipfire_make traceroute
317 #ipfire_make squidguard ## CAN THIS BE BANISHED BY ANYTHING BETTER?
318 #ipfire_make calamaris ## CAN THIS BE BANISHED BY ANYTHING BETTER?
321 ### Programs that are still for discussion
322 # package or in the standard system
334 #ipfire_make linux-igd
336 ### These will become addons as usual but will be integrated later
339 #ipfire_make oinkmaster
340 #ipfire_make centerim
341 #ipfire_make tripwire
344 #ipfire_make ghostscript
345 #ipfire_make foomatic
349 #ipfire_make fetchmail
350 #ipfire_make cyrus-imapd
355 #ipfire_make guardian
356 #ipfire_make libid3tag
359 #ipfire_make libvorbis
362 #ipfire_make libshout
364 #ipfire_make icegenerator
368 #ipfire_make libmpeg2
369 #ipfire_make videolan
371 #ipfire_make asterisk
372 #ipfire_make libsigc++
373 #ipfire_make applejuice
374 #ipfire_make libtorrent
375 #ipfire_make rtorrent
376 #ipfire_make ipfireseeder
379 # ---------------------------------------------------------------------------
384 ################################################################################
385 # This builds the entire stage "installer" #
386 ################################################################################
389 PATH
=/usr
/local
/ccache
/bin
:/usr
/local
/distcc
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/usr
/${MACHINE_REAL}-linux/bin
393 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.installer.log"
398 ipfire_make installer
399 ipfire_make initramfs
402 ################################################################################
403 # This builds the entire stage "packages" #
404 ################################################################################
407 PATH
=/usr
/local
/ccache
/bin
:/usr
/local
/distcc
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/usr
/${MACHINE_REAL}-linux/bin
411 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.packages.log"
416 # Generating list of packages used
421 # Check if there is a loop device for building in virtual environments
422 #if [ -e /dev/loop/0 ] || [ -e /dev/loop0 ]; then
423 # ipfire_make usb-stick
425 mv $LFS/$IMAGES_DIR/{*.iso
,*.tgz
,*.img.gz
} $BASEDIR >> $LOGFILE 2>&1
427 #ipfire_make core-updates
430 for i
in $
(ls -1 $BASEDIR/src
/rootfiles
/extras
); do
431 if [ -e $BASEDIR/lfs
/$i ]; then
433 ### Do nothing at the moment, we are gonna use a new packager
436 beautify message SKIP
447 # See what we're supposed to do
451 #a prebuilt toolchain package is only used if found in cache
452 if [ ! -d $BASEDIR/cache
]; then
453 exiterror
"Use make.sh downloadsrc first!"
455 cd $BASEDIR/cache
/toolchains
456 PACKAGE
=`ls -v -r $TOOLCHAINNAME.tar.bz2 2> /dev/null | head -n 1`
457 #only restore on a clean disk
459 echo -ne "Building for ${BOLD}${MACHINE} on ${MACHINE_REAL}${NORMAL}\n"
461 if [ -f $BASEDIR/log_
${MACHINE}/02_base
/stage2-LFS
]; then
463 echo "Using installed toolchain" >> $LOGFILE
464 beautify message DONE
"Stage toolchain already built or extracted"
466 if [ -z "$PACKAGE" ]; then
467 echo "Full toolchain compilation" |
tee -a $LOGFILE
470 # Check if host can build the toolchain
471 check_toolchain_prerequisites
473 beautify build_stage
"Building toolchain"
476 echo "Restore from $PACKAGE" |
tee -a $LOGFILE
477 if [ `md5sum $BASEDIR/cache/toolchains/$PACKAGE | awk '{print $1}'` == `cat $BASEDIR/cache/toolchains/$TOOLCHAINNAME.md5 | awk '{print $1}'` ]; then
478 cd $BASEDIR && tar jxf
$BASEDIR/cache
/toolchains
/$PACKAGE
481 exiterror
"$TOOLCHAINNAME md5 did not match, check downloaded package"
486 beautify build_stage
"Building base"
489 beautify build_stage
"Building $NAME"
492 beautify build_stage
"Building miscellaneous"
495 beautify build_stage
"Building installer"
498 beautify build_stage
"Building packages"
502 echo "... and all this hard work for this:"
503 du
-bsh $BASEDIR/${SNAME}-${VERSION}.${MACHINE}.iso
507 # enter a shell inside LFS chroot
508 # may be used to changed kernel settings
514 echo -n "Loading new Changelog from SVN: "
515 svn log http
://svn.ipfire.org
/svn
/ipfire
> doc
/ChangeLog
516 beautify message DONE
520 echo -ne "Cleaning ${BOLD}$MACHINE${NORMAL} buildtree"
521 for i
in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`
523 $LOSETUP -d $i 2>/dev
/null
526 for i
in `mount | grep $BASEDIR | cut -d " " -f 1`
535 if ( losetup
/dev
/loop
${i} 2>/dev
/null |
grep -q "/install/images" ); then
536 umount
/dev
/loop
${i} 2>/dev
/null
;
537 losetup
-d /dev
/loop
${i} 2>/dev
/null
;
541 rm -rf $BASEDIR/build_
${MACHINE}
542 rm -rf $BASEDIR/log_
${MACHINE}
543 rm -rf $BASEDIR/packages
545 if [ -h $TOOLS_DIR ]; then
548 beautify message DONE
552 LOGFILE
=$BASEDIR/log_
${MACHINE}/_build.preparation.log
554 if [ ! -d $BASEDIR/cache
]; then
557 mkdir
-p $BASEDIR/log_
${MACHINE}
558 echo -e "${BOLD}Preload all source files${NORMAL}" |
tee -a $LOGFILE
561 if [ -f "$i" -a "$i" != "Config" ]; then
562 echo -ne "Loading $i"
563 make -s -f $i LFS_BASEDIR
=$BASEDIR MESSAGE
="$i\t" download
>> $LOGFILE 2>&1
564 if [ $?
-ne 0 ]; then
565 beautify message FAIL
567 beautify message DONE
576 # Check if host can build the toolchain
577 check_toolchain_prerequisites
579 echo "Create toolchain tar.bz for $MACHINE" |
tee -a $LOGFILE
580 # Safer inside the chroot
581 echo -ne "Stripping lib"
582 chroot
$LFS $TOOLS_DIR/bin
/find $TOOLS_DIR/lib \
583 -type f \
( -name '*.so' -o -name '*.so[\.0-9]*' \
) \
584 -exec $TOOLS_DIR/bin
/strip
--strip-debug {} \
; 2>/dev
/null
585 beautify message DONE
586 echo -ne "Stripping binaries"
587 chroot
$LFS $TOOLS_DIR/bin
/find /usr
/local /usr
/src
/binutils-build
$TOOLS_DIR/bin
$TOOLS_DIR/sbin \
589 -exec $TOOLS_DIR/bin
/strip
--strip-all {} \
; 2> /dev
/null
590 beautify message DONE
592 echo -ne "Tar creation "
593 [ -d cache
/toolchains
] || mkdir cache
/toolchains
594 cd $BASEDIR && tar cj \
595 --exclude='log_${MACHINE}/_build.*.log' \
596 --file=cache
/toolchains
/$TOOLCHAINNAME.
tar.bz2 \
598 log_
${MACHINE} >> $LOGFILE
599 beautify message DONE
600 echo `ls -sh cache/toolchains/$TOOLCHAINNAME.tar.bz2`
601 md5sum cache
/toolchains
/$TOOLCHAINNAME.
tar.bz2 \
602 > cache
/toolchains
/$TOOLCHAINNAME.md5
608 if [ ! -f $BASEDIR/cache
/toolchains
/$TOOLCHAINNAME.
tar.bz2
]; then
609 URL_TOOLCHAIN
=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
610 test -d $BASEDIR/cache
/toolchains || mkdir
$BASEDIR/cache
/toolchains
611 echo "Loading toolchain for $MACHINE"
612 cd $BASEDIR/cache
/toolchains
613 wget
-c -nv $URL_TOOLCHAIN/$TOOLCHAINNAME.
tar.bz2
$URL_TOOLCHAIN/$TOOLCHAINNAME.md5
614 if [ $?
-ne 0 ]; then
615 echo -n "ERROR: Downloading toolchain for $MACHINE machine"
616 beautify message FAIL
617 echo "Precompiled toolchain not always available for every machine"
619 if [ "`md5sum $TOOLCHAINNAME.tar.bz2 | awk '{print $1}'`" = "`cat $TOOLCHAINNAME.md5 | awk '{print $1}'`" ]; then
620 beautify message DONE
621 echo "Toolchain md5 ok"
623 exiterror
"$TOOLCHAINNAME.md5 did not match, check downloaded package"
627 echo -n "Toolchain for $MACHINE is already existing"
628 beautify message SKIP
634 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" |
tee -a $LOGFILE
635 chroot
$LFS /tools
/bin
/env
-i HOME
=/root \
636 TERM
=$TERM PS1
='\u:\w\$ ' \
637 PATH
=/usr
/local
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin \
638 VERSION
=$VERSION NAME
="$NAME" SNAME
="$SNAME" MACHINE
=$MACHINE \
639 /bin
/bash
-x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
640 mv $LFS/install
/images
/ipfire-
* $BASEDIR >> $LOGFILE 2>&1
641 if [ $?
-eq "0" ]; then
642 beautify message DONE
644 beautify message FAIL
650 .
$BASEDIR/tools
/make-subversion
672 echo -e "Uploading cache to ftp server:"
674 echo "${i}" | fgrep
-q .md5
&& continue
675 [ -e ${i}.md5
] && continue
676 md5sum ${i} |
tee ${i}.md5
678 ncftpls
-u $FTP_CACHE_USER -p $FTP_CACHE_PASS ftp://$FTP_CACHE_URL/$FTP_CACHE_PATH/ > /tmp
/ftplist
680 if [ "$(basename $i)" == "toolchains" ]; then continue; fi
681 grep -q $
(basename $i) /tmp
/ftplist
682 if [ "$?" -ne "0" ]; then
683 echo -ne "$(basename $i)"
684 ncftpput
-u $FTP_CACHE_USER -p $FTP_CACHE_PASS $FTP_CACHE_URL $FTP_CACHE_PATH/ $
(basename $i)
685 if [ "$?" -ne "0" ]; then
686 beautify message FAIL
696 FTP_ISO_PORT
=`echo "$FTP_ISO_URL" | awk -F: '{ print $2 }'`
697 FTP_ISO_URL
=`echo "$FTP_ISO_URL" | awk -F: '{ print $1 }'`
698 if [ -z $FTP_ISO_PORT ]; then
701 cat <<EOF > .ftp-commands
702 mkdir -p $FTP_ISO_PATH$SVN_REVISION
703 mkdir -p $FTP_ISO_PATH$SVN_REVISION/paks
706 ncftp
-u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL < .ftp-commands
711 echo -e "Uploading the iso to $FTP_ISO_PATH/$SVN_REVISION."
713 md5sum ipfire-
$VERSION.
$MACHINE-full.iso
> ipfire-
$VERSION.
$MACHINE-full.iso.md5
714 for i
in svn_status ipfire-source-r
$SVN_REVISION.
tar.gz ipfire-
$VERSION.
$MACHINE-full.iso ipfire-
$VERSION.
$MACHINE-full.iso.md5 ipfire-
$VERSION.
$MACHINE-devel.iso ipfire-
$VERSION.
$MACHINE-devel.iso.md5
; do
716 ncftpput
-u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ $i
717 if [ "$?" -eq "0" ]; then
718 echo "The file with name $i was successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
720 echo "There was an error while uploading the file $i to the ftp server."
725 rm -f ipfire-
$VERSION.
$MACHINE-full.iso.md5
726 if [ "$3" = "--with-sources-cd" ]; then
727 ncftpput
-u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH/$SVN_REVISION/ ipfire-sources-cd-
$VERSION.
$MACHINE.iso
731 ncftpput
-u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/paks packages
/*
732 if [ "$?" -eq "0" ]; then
733 echo -e "The packages were successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
735 echo -e "There was an error while uploading the packages to the ftp server."
743 if [ "$2" = "--background" ]; then
747 if [ `screen -ls | grep -q ipfire` ]; then
748 echo "Build is already running, sorry!"
751 if [ "$2" = "--rebuild" ]; then
752 export IPFIRE_REBUILD
=1
755 export IPFIRE_REBUILD
=0
757 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
758 screen
-dmS ipfire
$0 batch --background
769 cat doc
/make.sh-usage