Netzwerkscripts erweitert.
[people/pmueller/ipfire-2.x.git] / make.sh
1 #!/bin/bash
2 ############################################################################
3 #                                                                          #
4 # This file is part of the IPFire Firewall.                                #
5 #                                                                          #
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.                                      #
10 #                                                                          #
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.                             #
15 #                                                                          #
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 #
19 #                                                                          #
20 # Copyright (C) 2006 IPFire-Team <info@ipfire.eu>.                         #
21 #                                                                          #
22 ############################################################################
23 #
24
25 NAME="IPFire"                           # Software name
26 SNAME="ipfire"                  # Short name
27 VERSION="2.0b"                  # Version number
28 SLOGAN="www.ipfire.org"         # Software slogan
29 CONFIG_ROOT=/var/ipfire         # Configuration rootdir
30 NICE=10                         # Nice level
31 MAX_RETRIES=1                           # prefetch/check loop
32 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
33 MACHINE=`uname -m`
34 SVN_REVISION=`svn info | grep Revision | cut -c 11-`
35
36 IPFVER="full"                           # Which versions should be compiled? (full|light|voice|devel)
37
38 # Set an information about the build number
39 if [ -e ./.svn ]; then
40         FIREBUILD=`cat .svn/entries |sed -n 's/^[ \t]*revision=\"// p' | sed -n 's/\".*$// p'`
41 fi
42
43 # Debian specific settings
44 if [ ! -e /etc/debian_version ]; then
45         FULLPATH=`which $0`
46 else
47         if [ -x /usr/bin/realpath ]; then
48                 FULLPATH=`/usr/bin/realpath $0`
49         else
50                 echo "ERROR: Need to do apt-get install realpath"
51                 exit 1
52         fi
53 fi
54
55 PWD=`pwd`
56 BASENAME=`basename $0`
57 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
58 LOGFILE=$BASEDIR/log/_build.preparation.log
59 export BASEDIR LOGFILE
60 DIR_CHK=$BASEDIR/cache/check
61 mkdir $BASEDIR/log/ 2>/dev/null
62
63 # Include funtions
64 . tools/make-functions
65
66 if [ -f .config ]; then
67         . .config
68 else
69         echo -e  "${BOLD}No configuration found!${NORMAL}"
70         echo -ne "Do you want to create one (y/N)?"
71         read CREATE_CONFIG
72         echo ""
73         if [ "$CREATE_CONFIG" == "y" ]; then
74                 make_config
75         fi
76 fi
77
78 prepareenv() {
79     ############################################################################
80     #                                                                          #
81     # Are we running the right shell?                                          #
82     #                                                                          #
83     ############################################################################
84     if [ ! "$BASH" ]; then
85         exiterror "BASH environment variable is not set.  You're probably running the wrong shell."
86     fi
87
88     if [ -z "${BASH_VERSION}" ]; then
89         exiterror "Not running BASH shell."
90     fi
91
92
93     ############################################################################
94     #                                                                          #
95     # Trap on emergency exit                                                   #
96     #                                                                          #
97     ############################################################################
98     trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
99
100
101     ############################################################################
102     #                                                                          #
103     # Resetting our nice level                                                 #
104     #                                                                          #
105     ############################################################################
106     echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
107     renice $NICE $$ > /dev/null
108     if [ `nice` != "$NICE" ]; then
109         beautify message FAIL
110         exiterror "Failed to set correct nice level"
111     else
112         beautify message DONE
113     fi
114
115
116     ############################################################################
117     #                                                                          #
118     # Checking if running as root user                                         #
119     #                                                                          #
120     ############################################################################
121     echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
122     if [ `id -u` != 0 ]; then
123         beautify message FAIL
124         exiterror "Not building as root"
125     else
126         beautify message DONE
127     fi
128
129
130     ############################################################################
131     #                                                                          #
132     # Checking for necessary temporary space                                   #
133     #                                                                          #
134     ############################################################################
135     echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
136     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
137     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
138     if (( 2048000 > $BASE_ASPACE )); then
139         BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
140         if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
141                 beautify message FAIL
142                 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
143         fi
144     else
145         beautify message DONE
146     fi
147
148     ############################################################################
149     #                                                                          #
150     # Building Linux From Scratch system                                       #
151     #                                                                          #
152     ############################################################################
153     # Set umask
154     umask 022
155
156     # Set LFS Directory
157     LFS=$BASEDIR/build
158
159     # Check /tools symlink
160     if [ -h /tools ]; then
161         rm -f /tools
162     fi
163     if [ ! -a /tools ]; then
164         ln -s $BASEDIR/build/tools /
165     fi
166     if [ ! -h /tools ]; then
167         exiterror "Could not create /tools symbolic link."
168     fi
169
170     # Setup environment
171     set +h
172     LC_ALL=POSIX
173     MAKETUNING="-j4"
174     export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
175     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
176
177     # Make some extra directories
178     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
179     mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
180     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
181     mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
182
183     mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
184     mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
185
186     # Make all sources and proc available under lfs build
187     mount --bind /dev            $BASEDIR/build/dev
188     mount --bind /dev/pts        $BASEDIR/build/dev/pts
189     mount --bind /dev/shm        $BASEDIR/build/dev/shm
190     mount --bind /proc           $BASEDIR/build/proc
191     mount --bind /sys            $BASEDIR/build/sys
192     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
193     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
194     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
195     mount --bind $BASEDIR/doc    $BASEDIR/build/usr/src/doc
196     mount --bind $BASEDIR/html   $BASEDIR/build/usr/src/html
197     mount --bind $BASEDIR/langs  $BASEDIR/build/usr/src/langs
198     mount --bind $BASEDIR/lfs    $BASEDIR/build/usr/src/lfs
199     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
200     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
201
202     # This is a temporary hack!!!
203     if [ ! -f /tools/bin/hostname ]; then
204       cp -f /bin/hostname /tools/bin/hostname 2>/dev/null
205     fi
206
207     # Run LFS static binary creation scripts one by one
208     export CCACHE_DIR=$BASEDIR/ccache
209     export CCACHE_HASHDIR=1
210
211     # Remove pre-install list of installed files in case user erase some files before rebuild
212     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
213 }
214
215 buildtoolchain() {
216     LOGFILE="$BASEDIR/log/_build.toolchain.log"
217     export LOGFILE
218     ORG_PATH=$PATH
219     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
220     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
221     lfsmake1 ccache
222     lfsmake1 binutils   PASS=1
223     lfsmake1 gcc                PASS=1
224     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
225     lfsmake1 linux-libc-header
226     lfsmake1 glibc
227     lfsmake1 cleanup-toolchain PASS=1
228     lfsmake1 tcl
229     lfsmake1 expect
230     lfsmake1 dejagnu
231     lfsmake1 gcc                PASS=2
232     lfsmake1 binutils   PASS=2
233     lfsmake1 ncurses
234     lfsmake1 bash
235     lfsmake1 bzip2
236     lfsmake1 coreutils
237     lfsmake1 diffutils
238     lfsmake1 findutils
239     lfsmake1 gawk
240     lfsmake1 gettext
241     lfsmake1 grep
242     lfsmake1 gzip
243     lfsmake1 m4
244     lfsmake1 make
245     lfsmake1 patch
246     lfsmake1 perl
247     lfsmake1 sed
248     lfsmake1 tar
249     lfsmake1 texinfo
250     lfsmake1 util-linux
251     lfsmake1 cleanup-toolchain  PASS=2
252     export PATH=$ORG_PATH
253 }
254
255 buildbase() {
256     LOGFILE="$BASEDIR/log/_build.base.log"
257     export LOGFILE
258     lfsmake2 stage2
259     lfsmake2 linux-libc-header
260     lfsmake2 man-pages
261     lfsmake2 glibc
262     lfsmake2 cleanup-toolchain  PASS=3
263     lfsmake2 binutils
264     lfsmake2 gcc
265     lfsmake2 berkeley
266     lfsmake2 coreutils
267     lfsmake2 iana-etc
268     lfsmake2 m4
269     lfsmake2 bison
270     lfsmake2 ncurses
271     lfsmake2 procps
272     lfsmake2 sed
273     lfsmake2 libtool
274     lfsmake2 perl
275     lfsmake2 readline
276     lfsmake2 zlib
277     lfsmake2 autoconf
278     lfsmake2 automake
279     lfsmake2 bash
280     lfsmake2 bzip2
281     lfsmake2 diffutils
282     lfsmake2 e2fsprogs
283     lfsmake2 ed
284     lfsmake2 file
285     lfsmake2 findutils
286     lfsmake2 flex
287     lfsmake2 gawk
288     lfsmake2 gettext
289     lfsmake2 grep
290     lfsmake2 groff
291     lfsmake2 gzip
292     lfsmake2 inetutils
293     lfsmake2 iproute2
294     lfsmake2 kbd
295     lfsmake2 less
296     lfsmake2 libaal
297     lfsmake2 make
298     lfsmake2 man
299     lfsmake2 mktemp
300     lfsmake2 modutils
301     lfsmake2 net-tools
302     lfsmake2 patch
303     lfsmake2 psmisc
304     lfsmake2 reiser4progs
305     lfsmake2 shadow
306     lfsmake2 sysklogd
307     lfsmake2 sysvinit
308     lfsmake2 tar
309     lfsmake2 texinfo
310     lfsmake2 udev
311     lfsmake2 util-linux
312     lfsmake2 vim
313     lfsmake2 grub
314 }
315
316 buildipfire() {
317   LOGFILE="$BASEDIR/log/_build.ipfire.log"
318   export LOGFILE
319   ipfiremake configroot
320   ipfiremake dhcp
321   ipfiremake dhcpcd
322   ipfiremake libusb
323   ipfiremake libpcap
324   ipfiremake linux-atm
325   ipfiremake ppp
326   ipfiremake rp-pppoe
327   ipfiremake unzip
328   ipfiremake linux                      SMP=1
329   ipfiremake ipp2p                      SMP=1
330   ipfiremake fcdsl                      SMP=1
331   ipfiremake fcdsl2                     SMP=1
332   ipfiremake fcdslsl                    SMP=1
333   ipfiremake fcdslusb           SMP=1
334   ipfiremake fcdslslusb         SMP=1
335   ipfiremake fcpci                      SMP=1
336 #  ipfiremake promise-sata-300-tx       SMP=1
337   ipfiremake zaptel                     SMP=1
338   ipfiremake fuse                       SMP=1
339   ipfiremake linux
340   ipfiremake ipp2p
341   ipfiremake fcdsl
342   ipfiremake fcdsl2
343   ipfiremake fcdslsl
344   ipfiremake fcdslusb
345   ipfiremake fcdslslusb
346   ipfiremake fcpci
347 #  ipfiremake promise-sata-300-tx
348   ipfiremake zaptel
349   ipfiremake fuse
350   ipfiremake pkg-config
351   ipfiremake cpio
352   ipfiremake expat
353   ipfiremake gdbm
354   ipfiremake gmp
355   ipfiremake pam
356   ipfiremake openssl
357   ipfiremake python
358   ipfiremake libnet
359   ipfiremake libjpeg
360   ipfiremake libpng
361   ipfiremake libtiff
362   ipfiremake lcms
363   ipfiremake libmng
364   ipfiremake freetype
365   ipfiremake libart
366   ipfiremake gd
367   ipfiremake popt
368   ipfiremake pcre
369   ipfiremake slang
370   ipfiremake newt
371   ipfiremake libcap
372   ipfiremake pciutils
373   ipfiremake libxml2
374   ipfiremake BerkeleyDB
375   ipfiremake mysql
376   ipfiremake cyrus-sasl
377   ipfiremake openldap
378   ipfiremake apache2
379   ipfiremake php
380   ipfiremake apache2                    PASS=C
381   ipfiremake arping
382   ipfiremake beep
383   ipfiremake bind
384   ipfiremake capi4k-utils
385   ipfiremake cdrtools
386   ipfiremake dnsmasq
387   ipfiremake libaal
388   ipfiremake dosfstools
389   ipfiremake reiserfsprogs
390   ipfiremake squashfstools
391   ipfiremake sysfsutils
392   ipfiremake ntfs-3g
393   ipfiremake ethtool
394   ipfiremake ez-ipupdate
395   ipfiremake fcron
396   ipfiremake GD
397   ipfiremake GD-Graph
398   ipfiremake GD-TextUtil
399   ipfiremake gnupg
400   ipfiremake hdparm
401   ipfiremake ibod
402   ipfiremake initscripts
403   ipfiremake whatmask
404   ipfiremake iptables
405   ipfiremake libupnp
406   ipfiremake ipp2p                      IPT=1
407   ipfiremake moblock
408   ipfiremake linux-igd
409   ipfiremake ipac-ng
410   ipfiremake ipaddr
411   ipfiremake iptstate
412   ipfiremake iputils
413   ipfiremake l7-protocols
414   ipfiremake isapnptools
415 #  ipfiremake isdn4k-utils # What about mISDN???
416   ipfiremake hwdata
417   ipfiremake kudzu
418   ipfiremake logrotate
419   ipfiremake logwatch
420   ipfiremake misc-progs
421   ipfiremake mtools
422   ipfiremake nano
423   ipfiremake nash
424   ipfiremake nasm
425   ipfiremake URI
426   ipfiremake HTML-Tagset
427   ipfiremake HTML-Parser
428   ipfiremake Compress-Zlib
429   ipfiremake Digest
430   ipfiremake Digest-SHA1
431   ipfiremake Digest-HMAC
432   ipfiremake libwww-perl
433   ipfiremake Net-DNS
434   ipfiremake Net-IPv4Addr
435   ipfiremake Net_SSLeay
436   ipfiremake IO-Stringy
437   ipfiremake Unix-Syslog
438   ipfiremake Mail-Tools
439   ipfiremake MIME-Tools
440   ipfiremake Net-Server
441   ipfiremake Convert-TNEF
442   ipfiremake Convert-UUlib
443   ipfiremake Archive-Tar
444   ipfiremake Archive-Zip
445   ipfiremake Text-Tabs+Wrap
446   ipfiremake Locale-Country
447   ipfiremake XML-Parser
448   ipfiremake glib
449   ipfiremake dbus
450   ipfiremake hal
451   ipfiremake hwinfo
452   ipfiremake GeoIP
453   ipfiremake fwhits
454   ipfiremake noip_updater
455   ipfiremake ntp
456   ipfiremake oinkmaster
457   ipfiremake openssh
458   ipfiremake openswan
459   ipfiremake pptpclient
460   ipfiremake rrdtool
461   ipfiremake setserial
462   ipfiremake setup
463   ipfiremake snort
464   ipfiremake squid
465   ipfiremake squid-graph
466   ipfiremake squidguard
467   ipfiremake tcpdump
468   ipfiremake traceroute
469   ipfiremake vlan
470   ipfiremake wireless
471   ipfiremake libsafe
472   ipfiremake 3c5x9setup
473   ipfiremake pakfire
474   ipfiremake java
475   ipfiremake bootsplash
476   ipfiremake spandsp
477   ipfiremake lzo
478   ipfiremake openvpn
479   ipfiremake pammysql
480   ipfiremake xinetd
481   ipfiremake ghostscript
482   ipfiremake cups
483   ipfiremake samba
484   ipfiremake sudo
485   ipfiremake mc
486   ipfiremake wget
487   ipfiremake wput
488   ipfiremake bridge-utils
489   ipfiremake screen
490   ipfiremake hddtemp
491   ipfiremake smartmontools
492   ipfiremake htop
493   ipfiremake lynx
494   ipfiremake postfix
495   ipfiremake procmail
496   ipfiremake fetchmail
497   ipfiremake cyrusimap
498   ipfiremake webcyradm
499   ipfiremake mailx
500   ipfiremake clamav
501   ipfiremake razor
502   ipfiremake spamassassin
503   ipfiremake amavisd
504   ipfiremake stund
505   ipfiremake libpri
506 # ipfiremake bristuff
507   ipfiremake asterisk
508   ipfiremake mpg123
509   ipfiremake libmad
510   ipfiremake libogg
511   ipfiremake libvorbis
512   ipfiremake lame
513   ipfiremake xvid
514   ipfiremake mpeg2dec
515   ipfiremake ffmpeg
516   ipfiremake sox
517   ipfiremake gnump3d
518   ipfiremake videolan
519   ipfiremake applejuice
520   ipfiremake ocaml
521   ipfiremake mldonkey
522   ipfiremake ntop
523   ipfiremake rsync
524   ipfiremake tcpwrapper
525   ipfiremake portmap
526   ipfiremake nfs
527   ipfiremake nmap
528   ipfiremake mbmon
529   ipfiremake iftop
530   ipfiremake ncftp
531   ipfiremake cftp
532   ipfiremake etherwake
533   ipfiremake ethereal
534   ipfiremake tftp-hpa
535   ipfiremake iptraf
536   ipfiremake bwm-ng
537   ipfiremake nagios
538 }
539
540 buildinstaller() {
541   # Run installer scripts one by one
542   LOGFILE="$BASEDIR/log/_build.installer.log"
543   export LOGFILE
544   ipfiremake syslinux
545   ipfiremake as86
546   ipfiremake mbr
547   ipfiremake memtest
548   installmake linux-libc-header
549   installmake binutils
550   ipfiremake uClibc                     PASS=1
551   ipfiremake gcc                        INST=1
552   installmake uClibc                    PASS=2
553   installmake gcc                       INST=2
554   installmake uClibc                    PASS=3
555   installmake busybox
556   installmake udev
557   installmake slang
558   installmake newt
559   installmake gettext
560   installmake kbd
561   installmake popt
562   installmake sysvinit
563   installmake misc-progs
564   installmake e2fsprogs
565   installmake libaal
566   installmake reiser4progs
567   installmake reiserfsprogs
568   installmake sysfsutils
569   installmake util-linux
570   installmake pciutils
571   installmake zlib
572   installmake wget
573   installmake libxml2
574   installmake dbus
575   installmake hal
576   installmake hwdata
577   installmake hwinfo
578   installmake kudzu
579   installmake installer
580   installmake initrd
581 }
582
583 buildpackages() {
584   LOGFILE="$BASEDIR/log/_build.packages.log"
585   export LOGFILE
586   echo "... see detailed log in _build.*.log files" >> $LOGFILE
587
588   installmake strip
589   
590   # Generating list of packages used
591   echo -n "Generating packages list from logs" | tee -a $LOGFILE
592   rm -f $BASEDIR/doc/packages-list
593   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
594         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
595                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
596         fi
597   done
598   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
599   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$' \
600         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
601   rm -f $BASEDIR/doc/packages-list
602   # packages-list.txt is ready to be displayed for wiki page
603   beautify message DONE
604
605   # Create images for install
606   if [ ! -f ipfire-$VERSION.i586-devel.iso ]; then
607                 ipfiremake cdrom ED=devel
608         fi
609         ipfiremake cdrom ED=full
610         
611   # Check if there is a loop device for building in virtual environments
612   if [ -e /dev/loop0 ]; then
613         ipfiremake usb-stick
614   fi
615   ipfiremake pxe
616   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz} $BASEDIR >> $LOGFILE 2>&1
617
618 #  ipfirepackages
619
620   # Cleanup
621   stdumount
622   rm -rf $BASEDIR/build/tmp/*
623
624   # Generating total list of files
625   echo "Generating files list from logs" | tee -a $LOGFILE
626   rm -f $BASEDIR/log/FILES
627   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
628         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
629                 echo "##" >>$BASEDIR/log/FILES
630                 echo "## `basename $i`" >>$BASEDIR/log/FILES
631                 echo "##" >>$BASEDIR/log/FILES
632                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
633         fi
634   done
635   cd $BASEDIR/packages; ls -w1 *.ipfire | awk -F ".ipfire" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
636   echo -n "###EOF###" >> $BASEDIR/packages/packages_list.txt
637
638   cd $PWD
639 }
640
641 ipfirepackages() {
642   if [ -d "$BASEDIR/packages" ]; then
643           for i in `ls $BASEDIR/packages`; do
644                 touch $BASEDIR/build/install/packages/$i.empty
645           done
646   fi
647 #  ipfiredist amavisd
648   ipfiredist applejuice
649   ipfiredist asterisk
650   ipfiredist clamav
651   ipfiredist cups
652   ipfiredist cyrusimap
653   ipfiredist fetchmail
654   ipfiredist ffmpeg
655   ipfiredist gnump3d
656   ipfiredist iptraf
657   ipfiredist java
658   ipfiredist lame
659   ipfiredist libmad
660   ipfiredist libogg
661   ipfiredist libvorbis
662   ipfiredist mailx
663   ipfiredist mldonkey
664   ipfiredist mpeg2dec
665   ipfiredist nagios
666   ipfiredist nfs
667   ipfiredist nmap
668   ipfiredist ntop
669   ipfiredist portmap
670   ipfiredist postfix
671   ipfiredist procmail
672   ipfiredist samba
673   ipfiredist sox
674   ipfiredist spamassassin
675   ipfiredist subversion
676   ipfiredist videolan
677   ipfiredist webcyradm
678   ipfiredist xvid
679   ipfiredist yasuc
680   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
681   mv -f $LFS/install/packages/*.{ipfire,md5} $BASEDIR/packages >> $LOGFILE 2>&1
682   rm -rf  $BASEDIR/build/install/packages/*
683 }
684
685 # See what we're supposed to do
686 case "$1" in 
687 build)
688         clear
689         BUILDMACHINE=`uname -m`
690         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
691         #only restore on a clean disk
692         if [ ! -f log/cleanup-toolchain-2-tools ]; then
693                 if [ ! -n "$PACKAGE" ]; then
694                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
695                         prepareenv
696                         buildtoolchain
697                 else
698                         PACKAGENAME=${PACKAGE%.tar.gz}
699                         beautify build_stage "Packaged toolchain compilation"
700                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
701                                 tar zxf $PACKAGE
702                                 prepareenv
703                         else
704                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
705                         fi
706                 fi
707         else
708                 echo -n "Using installed toolchain" | tee -a $LOGFILE
709                 beautify message SKIP
710                 prepareenv
711         fi
712
713         beautify build_start
714         beautify build_stage "Building LFS"
715         buildbase
716
717         beautify build_stage "Building IPFire"
718         buildipfire
719
720         # Setzen des IPFire Builds
721         if [ "$FIREBUILD" ]; then
722                 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
723         else
724                 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
725         fi
726
727         beautify build_stage "Building installer"
728         buildinstaller
729
730         beautify build_stage "Building packages"
731         buildpackages
732         beautify build_end
733         ;;
734 shell)
735         # enter a shell inside LFS chroot
736         # may be used to changed kernel settings
737         prepareenv
738         entershell
739         ;;
740 changelog)
741         echo -n "Loading new Changelog from SVN: "
742         svn log http://svn.ipfire.org/svn/ipfire > doc/ChangeLog
743         beautify message DONE
744         ;;
745 clean)
746         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
747         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
748                 $LOSETUP -d $i 2>/dev/null
749         done
750         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
751                 umount $i
752         done
753         stdumount
754         for i in `seq 0 7`; do
755             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
756                 umount /dev/loop${i}     2>/dev/null;
757                 losetup -d /dev/loop${i} 2>/dev/null;
758             fi;
759         done
760         rm -rf $BASEDIR/build
761         rm -rf $BASEDIR/cdrom
762         rm -rf $BASEDIR/packages
763         rm -rf $BASEDIR/log
764         if [ -h /tools ]; then
765                 rm -f /tools
766         fi
767         beautify message DONE
768         ;;
769 downloadsrc)
770         if [ ! -d $BASEDIR/cache ]; then
771                 mkdir $BASEDIR/cache
772         fi
773         mkdir -p $BASEDIR/log
774         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
775         FINISHED=0
776         cd $BASEDIR/lfs
777         for c in `seq $MAX_RETRIES`; do
778                 if (( FINISHED==1 )); then 
779                         break
780                 fi
781                 FINISHED=1
782                 cd $BASEDIR/lfs
783                 for i in *; do
784                         if [ -f "$i" -a "$i" != "Config" ]; then
785                                 echo -ne "Loading $i"
786                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
787                                 if [ $? -ne 0 ]; then
788                                         beautify message FAIL
789                                         FINISHED=0
790                                 else
791                                         if [ $c -eq 1 ]; then
792                                         beautify message DONE
793                                         fi
794                                 fi
795                         fi
796                 done
797         done
798         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
799         ERROR=0
800         for i in *; do
801                 if [ -f "$i" -a "$i" != "Config" ]; then
802                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
803                         if [ $? -ne 0 ]; then
804                                 echo -ne "MD5 difference in lfs/$i"
805                                 beautify message FAIL
806                                 ERROR=1
807                         fi
808                 fi
809         done
810         if [ $ERROR -eq 0 ]; then
811                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
812                 beautify message DONE
813         else
814                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
815                 beautify message FAIL
816         fi
817         cd - >/dev/null 2>&1
818         ;;
819 toolchain)
820         clear
821         prepareenv
822         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
823         buildtoolchain
824         BUILDMACHINE=`uname -m`
825         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
826         test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
827         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
828                 build/{bin,etc,usr/bin,usr/local} \
829                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
830                 log >> $LOGFILE
831         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
832                 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
833         stdumount
834         ;;
835 gettoolchain)
836         BUILDMACHINE=`uname -m`
837         # arbitrary name to be updated in case of new toolchain package upload
838         PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
839         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
840                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
841                 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
842                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
843                 cd $BASEDIR/cache/toolchains
844                 wget $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
845                 if [ $? -ne 0 ]; then
846                         echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
847                 else
848                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
849                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
850                         else
851                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
852                         fi
853                 fi
854         else
855                 echo "Toolchain is already downloaded. Exiting..."
856         fi
857         ;;
858 othersrc)
859         prepareenv
860         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
861         chroot $LFS /tools/bin/env -i   HOME=/root \
862         TERM=$TERM PS1='\u:\w\$ ' \
863         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
864         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
865         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
866         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
867         if [ $? -eq "0" ]; then
868                 beautify message DONE
869         else
870                 beautify message FAIL
871         fi
872         stdumount
873         ;;
874 svn)
875         case "$2" in
876           update|up)
877                 # clear
878                 echo -ne "Loading the latest source files...\n"
879                 if [ $3 ]; then
880                         svn update -r $3 | tee -a $PWD/log/_build.svn.update.log
881                 else
882                         svn update | tee -a $PWD/log/_build.svn.update.log
883                 fi
884                 if [ $? -eq "0" ]; then
885                         beautify message DONE
886                 else
887                         beautify message FAIL
888                         exit 1
889                 fi
890                 echo -ne "Writing the svn-info to a file"
891                 svn info > $PWD/svn_status
892                 if [ $? -eq "0" ]; then
893                         beautify message DONE
894                 else
895                         beautify message FAIL
896                         exit 1
897                 fi
898                 chmod 755 $0
899                 exit 0
900           ;;
901           commit|ci)
902                 clear
903                 if [ -f /usr/bin/mcedit ]; then
904                         export EDITOR=/usr/bin/mcedit
905                 fi
906                 if [ -f /usr/bin/nano ]; then
907                         export EDITOR=/usr/bin/nano
908                 fi
909                 echo -ne "Selecting editor $EDITOR..."
910                 beautify message DONE
911                 if [ -e /sbin/yast ]; then
912                         if [ "`echo $SVN_REVISION | cut -c 3`" -eq "0" ]; then
913                                 $0 changelog
914                         fi
915                 fi
916                 update_langs
917                 svn commit
918                 $0 svn up
919                 if [ -n "$FTP_CACHE_URL" ]; then
920                         $0 uploadsrc
921                 fi
922           ;;
923           dist)
924                 if [ $3 ]; then
925                         SVN_REVISION=$3
926                 fi
927                 if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
928                         echo -ne "REV $SVN_REVISION: SKIPPED!\n"
929                         exit 0
930                 fi
931                 echo -en "REV $SVN_REVISION: Downloading..."
932                 svn export http://svn.ipfire.org/svn/ipfire/trunk ipfire-source/ --force > /dev/null
933                 svn log http://svn.ipfire.org/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
934                 #svn info http://svn.ipfire.org/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
935                 evaluate 1
936
937                 echo -en "REV $SVN_REVISION: Compressing files..."
938                 if [ -e ipfire-source/trunk/make.sh ]; then
939                         chmod 755 ipfire-source/trunk/make.sh
940                 fi
941                 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
942                 evaluate 1
943                 echo -en "REV $SVN_REVISION: Cleaning up..."
944                 rm ipfire-source/ -r
945                 evaluate 1
946           ;;
947           diff|di)
948                 echo -ne "Make a local diff to last svn revision"
949                 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
950                 evaluate 1
951                 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
952                 svn status
953           ;;
954         esac
955         ;;
956 uploadsrc)
957         PWD=`pwd`
958         cd $BASEDIR/cache/
959         echo -e "Uploading cache to ftp server:"
960         ncftpls -u $FTP_CACHE_USER -p $FTP_CACHE_PASS ftp://$FTP_CACHE_URL$FTP_CACHE_PATH/ > /tmp/ftplist
961         for i in *; do
962                 if [ "$i" == "toolchains" ]; then continue; fi
963                 grep -q $i /tmp/ftplist
964                 if [ "$?" -ne "0" ]; then
965                         echo -ne "$i"
966                         ncftpput -u $FTP_CACHE_USER -p $FTP_CACHE_PASS $FTP_CACHE_URL $FTP_CACHE_PATH/ $i
967                         if [ "$?" -ne "0" ]; then
968                                 beautify message FAIL
969                         fi
970                 fi
971         done
972         rm -f /tmp/ftplist
973         cd $PWD
974         exit 0
975         ;;
976 upload)
977         case "$2" in
978           iso)
979                 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
980                 cat <<EOF > .ftp-commands
981 mkdir $IPFIRE_FTP_PATH_EXT
982 ls -lah
983 quit
984 EOF
985                 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
986                 rm -f .ftp-commands
987                 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
988                 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH/ ipfire-install-$VERSION.i386.iso
989                 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH/ ipfire-install-$VERSION.i386.iso.md5
990                 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH/ ipfire-source-r$SVN_REVISION.tar.gz
991                 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH/ svn_status
992                 if [ "$?" -eq "0" ]; then
993                         echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
994                 else
995                         echo -e "There was an error while uploading the iso to the ftp server."
996                         exit 1
997                 fi
998                 if [ "$3" = "--with-sources-cd" ]; then
999                         ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS $FTP_ISO_URL $FTP_ISO_PATH/ ipfire-sources-cd-$VERSION.$MACHINE.iso
1000                 fi
1001                 ;;
1002           paks)
1003                 cat <<EOF > .ftp-commands
1004 mkdir $IPFIRE_FTP_PATH_PAK
1005 ls -lah
1006 quit
1007 EOF
1008                 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
1009                 rm -f .ftp-commands
1010                 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1011                 if [ "$?" -eq "0" ]; then
1012                         echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
1013                 else
1014                         echo -e "There was an error while uploading the packages to the ftp server."
1015                         exit 1
1016                 fi
1017           ;;
1018         esac
1019         ;;
1020 batch)
1021         if [ "$2" = "--background" ]; then
1022                 batch_script
1023                 exit $?
1024         fi
1025         if [ `screen -ls | grep -q ipfire` ]; then
1026                 echo "Build is already running, sorry!"
1027                 exit 1
1028         else
1029                 if [ "$2" = "--rebuild" ]; then
1030                         export IPFIRE_REBUILD=1
1031                         echo "REBUILD!"
1032                 else
1033                         export IPFIRE_REBUILD=0
1034                 fi
1035                 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1036                 screen -dmS ipfire $0 batch --background
1037                 evaluate 1
1038                 exit 0
1039         fi
1040         ;;
1041 watch)
1042         watch_screen
1043         ;;
1044 pxe)
1045         case "$2" in
1046           start)
1047                 start_tftpd
1048                 ;;
1049           stop)
1050                 stop_tftpd
1051                 ;;
1052           reload|restart)
1053                 reload_tftpd
1054                 ;;              
1055         esac
1056         exit 0
1057         ;;
1058 lang)
1059         update_langs
1060         ;;
1061 "")
1062         clear
1063         svn info
1064         select name in "Exit" "IPFIRE: Downloadsrc" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "SVN: Commit" "SVN: Update" "SVN: Status" "SVN: Diff" "LOG: Tail" "Help"
1065         do
1066         case $name in
1067         "IPFIRE: Downloadsrc")
1068                 $0 downloadsrc
1069                 ;;
1070         "IPFIRE: Build (silent)")
1071                 $0 build-silent
1072                 ;;
1073         "IPFIRE: Watch Build")
1074                 $0 watch
1075                 ;;
1076         "IPFIRE: Batch")
1077                 $0 batch
1078                 ;;
1079         "IPFIRE: Clean")
1080                 $0 clean
1081                 ;;
1082         "SVN: Update")
1083                 $0 svn update
1084                 ;;
1085         "Help")
1086                 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1087                 cat doc/make.sh-usage
1088                 ;;
1089         "LOG: Tail")
1090                 tail -f log/_*
1091                 ;;
1092         "Exit")
1093                 break
1094                 ;;
1095         esac
1096         done
1097         ;;
1098 config)
1099         make_config
1100         ;;
1101 *)
1102         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1103         cat doc/make.sh-usage
1104         ;;
1105 esac