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
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
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 pkg-config
173 ipfire_make pkg-config
175 ### Building some network stuff
178 ipfire_make linux-atm
183 ipfire_make libnfnetlink
184 ipfire_make libnetfilter_queue
185 ipfire_make libnetfilter_conntrack
187 ipfire_make l7-protocols
189 ipfire_make bridge-utils
193 ### Building some general stuff
196 ipfire_make pam PASS
=1
198 ipfire_make pam PASS
=2
200 #ipfire_make libidn ### Do we need this?
209 ipfire_make cyrus-sasl
216 #ipfire_make libjpeg ### Do we need this?
223 ipfire_make br2684ctl
224 ipfire_make etherwake
228 ### Building vpn stuff
230 ipfire_make strongswan
232 ### Building filesystem stuff
234 ipfire_make reiserfsprogs
236 ipfire_make reiser4progs
238 ipfire_make sysfsutils
240 ### Building hardware utils
246 ipfire_make smartmontools
247 ipfire_make lm-sensors
249 ### Building some important tools
256 ipfire_make ntp
### Needs config.
258 ipfire_make ez-ipupdate
263 #ipfire_make logrotate
264 #ipfire_make logwatch
268 ipfire_make memtest86
+
270 #ipfire_make initscripts
272 ### -------------------------------------------------------------------------
273 ### Tools that maybe not needed
282 #ipfire_make wireless
286 ################################################################################
287 # This builds the entire stage "misc" #
288 ################################################################################
291 PATH
=/usr
/local
/ccache
/bin
:/usr
/local
/distcc
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/usr
/${MACHINE_REAL}-linux/bin
295 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.misc.log"
304 #ipfire_make traceroute
310 #ipfire_make squidguard ## CAN THIS BE BANISHED BY ANYTHING BETTER?
311 #ipfire_make calamaris ## CAN THIS BE BANISHED BY ANYTHING BETTER?
314 ### Programs that are still for discussion
315 # package or in the standard system
327 #ipfire_make linux-igd
329 ### These will become addons as usual but will be integrated later
332 #ipfire_make oinkmaster
333 #ipfire_make centerim
334 #ipfire_make tripwire
337 #ipfire_make ghostscript
338 #ipfire_make foomatic
342 #ipfire_make fetchmail
343 #ipfire_make cyrus-imapd
348 #ipfire_make guardian
349 #ipfire_make libid3tag
352 #ipfire_make libvorbis
355 #ipfire_make libshout
357 #ipfire_make icegenerator
361 #ipfire_make libmpeg2
362 #ipfire_make videolan
364 #ipfire_make asterisk
365 #ipfire_make libsigc++
366 #ipfire_make applejuice
367 #ipfire_make libtorrent
368 #ipfire_make rtorrent
369 #ipfire_make ipfireseeder
372 # ---------------------------------------------------------------------------
377 ################################################################################
378 # This builds the entire stage "installer" #
379 ################################################################################
382 PATH
=/usr
/local
/ccache
/bin
:/usr
/local
/distcc
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/usr
/${MACHINE_REAL}-linux/bin
386 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.installer.log"
391 ipfire_make installer
392 ipfire_make initramfs
395 ################################################################################
396 # This builds the entire stage "packages" #
397 ################################################################################
400 PATH
=/usr
/local
/ccache
/bin
:/usr
/local
/distcc
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/usr
/${MACHINE_REAL}-linux/bin
404 LOGFILE
="$BASEDIR/log_${MACHINE}/_build.packages.log"
409 # Generating list of packages used
414 # Check if there is a loop device for building in virtual environments
415 #if [ -e /dev/loop/0 ] || [ -e /dev/loop0 ]; then
416 # ipfire_make usb-stick
418 mv $LFS/$IMAGES_DIR/{*.iso
,*.tgz
,*.img.gz
} $BASEDIR >> $LOGFILE 2>&1
420 #ipfire_make core-updates
423 for i
in $
(ls -1 $BASEDIR/src
/rootfiles
/extras
); do
424 if [ -e $BASEDIR/lfs
/$i ]; then
426 ### Do nothing at the moment, we are gonna use a new packager
429 beautify message SKIP
440 # See what we're supposed to do
444 #a prebuilt toolchain package is only used if found in cache
445 if [ ! -d $BASEDIR/cache
]; then
446 exiterror
"Use make.sh downloadsrc first!"
448 cd $BASEDIR/cache
/toolchains
449 PACKAGE
=`ls -v -r $TOOLCHAINNAME.tar.bz2 2> /dev/null | head -n 1`
450 #only restore on a clean disk
452 echo -ne "Building for ${BOLD}${MACHINE} on ${MACHINE_REAL}${NORMAL}\n"
454 if [ -f $BASEDIR/log_
${MACHINE}/02_base
/stage2-LFS
]; then
456 echo "Using installed toolchain" >> $LOGFILE
457 beautify message DONE
"Stage toolchain already built or extracted"
459 if [ -z "$PACKAGE" ]; then
460 echo "Full toolchain compilation" |
tee -a $LOGFILE
463 # Check if host can build the toolchain
464 check_toolchain_prerequisites
466 beautify build_stage
"Building toolchain"
469 echo "Restore from $PACKAGE" |
tee -a $LOGFILE
470 if [ `md5sum $BASEDIR/cache/toolchains/$PACKAGE | awk '{print $1}'` == `cat $BASEDIR/cache/toolchains/$TOOLCHAINNAME.md5 | awk '{print $1}'` ]; then
471 cd $BASEDIR && tar jxf
$BASEDIR/cache
/toolchains
/$PACKAGE
474 exiterror
"$TOOLCHAINNAME md5 did not match, check downloaded package"
479 beautify build_stage
"Building base"
482 beautify build_stage
"Building $NAME"
485 beautify build_stage
"Building miscellaneous"
488 beautify build_stage
"Building installer"
491 beautify build_stage
"Building packages"
495 echo "... and all this hard work for this:"
496 du
-bsh $BASEDIR/${SNAME}-${VERSION}.${MACHINE}.iso
500 # enter a shell inside LFS chroot
501 # may be used to changed kernel settings
507 echo -n "Loading new Changelog from SVN: "
508 svn log http
://svn.ipfire.org
/svn
/ipfire
> doc
/ChangeLog
509 beautify message DONE
513 echo -ne "Cleaning ${BOLD}$MACHINE${NORMAL} buildtree"
514 for i
in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`
516 $LOSETUP -d $i 2>/dev
/null
519 for i
in `mount | grep $BASEDIR | cut -d " " -f 1`
528 if ( losetup
/dev
/loop
${i} 2>/dev
/null |
grep -q "/install/images" ); then
529 umount
/dev
/loop
${i} 2>/dev
/null
;
530 losetup
-d /dev
/loop
${i} 2>/dev
/null
;
534 rm -rf $BASEDIR/build_
${MACHINE}
535 rm -rf $BASEDIR/log_
${MACHINE}
536 rm -rf $BASEDIR/packages
538 if [ -h $TOOLS_DIR ]; then
541 beautify message DONE
545 LOGFILE
=$BASEDIR/log_
${MACHINE}/_build.preparation.log
547 if [ ! -d $BASEDIR/cache
]; then
550 mkdir
-p $BASEDIR/log_
${MACHINE}
551 echo -e "${BOLD}Preload all source files${NORMAL}" |
tee -a $LOGFILE
554 for c
in `seq $MAX_RETRIES`; do
555 if (( FINISHED
==1 )); then
561 if [ -f "$i" -a "$i" != "Config" ]; then
562 echo -ne "Loading $i"
563 make -s -f $i LFS_BASEDIR
=$BASEDIR MESSAGE
="$i\t ($c/$MAX_RETRIES)" download
>> $LOGFILE 2>&1
564 if [ $?
-ne 0 ]; then
565 beautify message FAIL
568 if [ $c -eq 1 ]; then
569 beautify message DONE
580 # Check if host can build the toolchain
581 check_toolchain_prerequisites
583 echo "Create toolchain tar.bz for $MACHINE" |
tee -a $LOGFILE
584 # Safer inside the chroot
585 echo -ne "Stripping lib"
586 chroot
$LFS $TOOLS_DIR/bin
/find $TOOLS_DIR/lib \
587 -type f \
( -name '*.so' -o -name '*.so[\.0-9]*' \
) \
588 -exec $TOOLS_DIR/bin
/strip
--strip-debug {} \
; 2>/dev
/null
589 beautify message DONE
590 echo -ne "Stripping binaries"
591 chroot
$LFS $TOOLS_DIR/bin
/find /usr
/local /usr
/src
/binutils-build
$TOOLS_DIR/bin
$TOOLS_DIR/sbin \
593 -exec $TOOLS_DIR/bin
/strip
--strip-all {} \
; 2> /dev
/null
594 beautify message DONE
596 echo -ne "Tar creation "
597 [ -d cache
/toolchains
] || mkdir cache
/toolchains
598 cd $BASEDIR && tar cj \
599 --exclude='log_${MACHINE}/_build.*.log' \
600 --file=cache
/toolchains
/$TOOLCHAINNAME.
tar.bz2 \
602 log_
${MACHINE} >> $LOGFILE
603 beautify message DONE
604 echo `ls -sh cache/toolchains/$TOOLCHAINNAME.tar.bz2`
605 md5sum cache
/toolchains
/$TOOLCHAINNAME.
tar.bz2 \
606 > cache
/toolchains
/$TOOLCHAINNAME.md5
612 if [ ! -f $BASEDIR/cache
/toolchains
/$TOOLCHAINNAME.
tar.bz2
]; then
613 URL_TOOLCHAIN
=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
614 test -d $BASEDIR/cache
/toolchains || mkdir
$BASEDIR/cache
/toolchains
615 echo "Loading toolchain for $MACHINE"
616 cd $BASEDIR/cache
/toolchains
617 wget
-c -nv $URL_TOOLCHAIN/$TOOLCHAINNAME.
tar.bz2
$URL_TOOLCHAIN/$TOOLCHAINNAME.md5
618 if [ $?
-ne 0 ]; then
619 echo -n "ERROR: Downloading toolchain for $MACHINE machine"
620 beautify message FAIL
621 echo "Precompiled toolchain not always available for every machine"
623 if [ "`md5sum $TOOLCHAINNAME.tar.bz2 | awk '{print $1}'`" = "`cat $TOOLCHAINNAME.md5 | awk '{print $1}'`" ]; then
624 beautify message DONE
625 echo "Toolchain md5 ok"
627 exiterror
"$TOOLCHAINNAME.md5 did not match, check downloaded package"
631 echo -n "Toolchain for $MACHINE is already existing"
632 beautify message SKIP
638 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" |
tee -a $LOGFILE
639 chroot
$LFS /tools
/bin
/env
-i HOME
=/root \
640 TERM
=$TERM PS1
='\u:\w\$ ' \
641 PATH
=/usr
/local
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin \
642 VERSION
=$VERSION NAME
="$NAME" SNAME
="$SNAME" MACHINE
=$MACHINE \
643 /bin
/bash
-x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
644 mv $LFS/install
/images
/ipfire-
* $BASEDIR >> $LOGFILE 2>&1
645 if [ $?
-eq "0" ]; then
646 beautify message DONE
648 beautify message FAIL
654 .
$BASEDIR/tools
/make-subversion
676 echo -e "Uploading cache to ftp server:"
678 echo "${i}" | fgrep
-q .md5
&& continue
679 [ -e ${i}.md5
] && continue
680 md5sum ${i} |
tee ${i}.md5
682 ncftpls
-u $FTP_CACHE_USER -p $FTP_CACHE_PASS ftp://$FTP_CACHE_URL/$FTP_CACHE_PATH/ > /tmp
/ftplist
684 if [ "$(basename $i)" == "toolchains" ]; then continue; fi
685 grep -q $
(basename $i) /tmp
/ftplist
686 if [ "$?" -ne "0" ]; then
687 echo -ne "$(basename $i)"
688 ncftpput
-u $FTP_CACHE_USER -p $FTP_CACHE_PASS $FTP_CACHE_URL $FTP_CACHE_PATH/ $
(basename $i)
689 if [ "$?" -ne "0" ]; then
690 beautify message FAIL
700 FTP_ISO_PORT
=`echo "$FTP_ISO_URL" | awk -F: '{ print $2 }'`
701 FTP_ISO_URL
=`echo "$FTP_ISO_URL" | awk -F: '{ print $1 }'`
702 if [ -z $FTP_ISO_PORT ]; then
705 cat <<EOF > .ftp-commands
706 mkdir -p $FTP_ISO_PATH$SVN_REVISION
707 mkdir -p $FTP_ISO_PATH$SVN_REVISION/paks
710 ncftp
-u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL < .ftp-commands
715 echo -e "Uploading the iso to $FTP_ISO_PATH/$SVN_REVISION."
717 md5sum ipfire-
$VERSION.
$MACHINE-full.iso
> ipfire-
$VERSION.
$MACHINE-full.iso.md5
718 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
720 ncftpput
-u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ $i
721 if [ "$?" -eq "0" ]; then
722 echo "The file with name $i was successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
724 echo "There was an error while uploading the file $i to the ftp server."
729 rm -f ipfire-
$VERSION.
$MACHINE-full.iso.md5
730 if [ "$3" = "--with-sources-cd" ]; then
731 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
735 ncftpput
-u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/paks packages
/*
736 if [ "$?" -eq "0" ]; then
737 echo -e "The packages were successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
739 echo -e "There was an error while uploading the packages to the ftp server."
747 if [ "$2" = "--background" ]; then
751 if [ `screen -ls | grep -q ipfire` ]; then
752 echo "Build is already running, sorry!"
755 if [ "$2" = "--rebuild" ]; then
756 export IPFIRE_REBUILD
=1
759 export IPFIRE_REBUILD
=0
761 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
762 screen
-dmS ipfire
$0 batch --background
773 cat doc
/make.sh-usage