Installer lauft durch und IDE Systeme booten :D
[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 version should be compiled? (full|light|voice)
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="-j8"
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 file
284     lfsmake2 findutils
285     lfsmake2 flex
286     lfsmake2 grub
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 make
297     lfsmake2 man
298     lfsmake2 mktemp
299     lfsmake2 modutils
300     lfsmake2 patch
301     lfsmake2 psmisc
302     lfsmake2 shadow
303     lfsmake2 sysklogd
304     lfsmake2 sysvinit
305     lfsmake2 tar
306     lfsmake2 texinfo
307     lfsmake2 udev
308     lfsmake2 util-linux
309     lfsmake2 vim
310 }
311
312 buildipfire() {
313   LOGFILE="$BASEDIR/log/_build.ipfire.log"
314   export LOGFILE
315   ipfiremake inetutils
316   ipfiremake net-tools
317   ipfiremake ed
318   ipfiremake configroot
319   ipfiremake dhcp
320   ipfiremake dhcpcd
321   ipfiremake libusb
322   ipfiremake libpcap
323 # Temporary disabled.
324 #  ipfiremake linux-atm
325   ipfiremake ppp
326   ipfiremake rp-pppoe
327   ipfiremake unzip
328 #  ipfiremake linux                     PASS=I # Can we remove the installer kernel?
329   ipfiremake linux                      PASS=S
330 #  ipfiremake 3cp4218           PASS=SMP
331 #  ipfiremake amedyn                    PASS=SMP
332 #  ipfiremake cxacru                    PASS=SMP
333 #  ipfiremake eagle                     PASS=SMP
334 #  ipfiremake cnx_pci           PASS=SMP
335 #  ipfiremake fcdsl                     PASS=SMP
336 #  ipfiremake fcdsl2                    PASS=SMP
337 #  ipfiremake fcdslsl           PASS=SMP
338 #  ipfiremake fcdslusb          PASS=SMP
339 #  ipfiremake fcdslslusb                PASS=SMP
340 #  ipfiremake fcpci                     PASS=SMP
341 #  ipfiremake fcclassic         PASS=SMP
342 #  ipfiremake pulsar                    PASS=SMP
343 #  ipfiremake unicorn           PASS=SMP
344 #  ipfiremake promise-sata-300-tx       PASS=SMP
345   ipfiremake zaptel                     PASS=S
346   ipfiremake linux
347 #  ipfiremake 3cp4218
348 #  ipfiremake amedyn
349 #  ipfiremake cxacru
350 #  ipfiremake eciadsl
351 #  ipfiremake eagle
352 #  ipfiremake speedtouch
353 #  ipfiremake cnx_pci
354 #  ipfiremake fcdsl
355 #  ipfiremake fcdsl2
356 #  ipfiremake fcdslsl
357 #  ipfiremake fcdslusb
358 #  ipfiremake fcdslslusb
359 #  ipfiremake fcpci
360 #  ipfiremake fcclassic
361 #  ipfiremake pulsar
362 #  ipfiremake unicorn
363 #  ipfiremake promise-sata-300-tx
364   ipfiremake zaptel
365 #  ipfiremake pcmciautils
366   ipfiremake expat
367   ipfiremake gdbm
368   ipfiremake gmp
369   ipfiremake pam
370   ipfiremake openssl
371   ipfiremake python
372   ipfiremake libnet
373   ipfiremake libjpeg
374   ipfiremake libpng
375   ipfiremake libtiff
376   ipfiremake lcms
377   ipfiremake libmng
378   ipfiremake freetype
379   ipfiremake libart
380   ipfiremake gd
381   ipfiremake popt
382   ipfiremake pcre
383   ipfiremake slang
384   ipfiremake newt
385   ipfiremake libcap
386   ipfiremake pciutils
387   ipfiremake libxml2
388   ipfiremake BerkeleyDB
389   ipfiremake mysql
390   ipfiremake cyrus-sasl
391   ipfiremake openldap
392 #  ipfiremake cyrus-sasl PASS=L # Doesn't work yet. Thereby there's the question: Do we really need this?
393   ipfiremake apache2
394   ipfiremake php
395   ipfiremake subversion
396   ipfiremake apache2 PASS=C
397   ipfiremake arping
398   ipfiremake beep
399   ipfiremake bind
400   ipfiremake capi4k-utils
401   ipfiremake cdrtools
402   ipfiremake dnsmasq
403   ipfiremake dosfstools
404   ipfiremake reiserfsprogs
405   ipfiremake ethtool
406   ipfiremake ez-ipupdate
407   ipfiremake fcron
408   ipfiremake GD
409   ipfiremake gnupg
410   ipfiremake hdparm
411   ipfiremake ibod
412   ipfiremake initscripts
413   ipfiremake iptables
414   ipfiremake ipac-ng
415   ipfiremake ipaddr
416   ipfiremake iptstate
417   ipfiremake iputils
418   ipfiremake l7-protocols
419 #  ipfiremake isapnptools # ERROR :(
420 #  ipfiremake isdn4k-utils # What about mISDN???
421   ipfiremake kudzu
422   ipfiremake logrotate
423   ipfiremake logwatch
424   ipfiremake mingetty
425   ipfiremake misc-progs
426   ipfiremake mtools
427   ipfiremake nano
428   ipfiremake nash
429   ipfiremake nasm
430 ### The Perl Modules have to be updated! I will skip this now!
431   ipfiremake URI
432   ipfiremake HTML-Tagset
433   ipfiremake HTML-Parser
434   ipfiremake Compress-Zlib
435   ipfiremake Digest
436   ipfiremake Digest-SHA1
437   ipfiremake Digest-HMAC
438   ipfiremake libwww-perl
439   ipfiremake Net-DNS
440   ipfiremake Net-IPv4Addr
441   ipfiremake Net_SSLeay
442   ipfiremake IO-Stringy
443   ipfiremake Unix-Syslog
444   ipfiremake Mail-Tools
445   ipfiremake MIME-Tools
446   ipfiremake Net-Server
447   ipfiremake Convert-TNEF
448   ipfiremake Convert-UUlib
449   ipfiremake Archive-Tar
450   ipfiremake Archive-Zip
451   ipfiremake Text-Tabs+Wrap
452   ipfiremake Locale-Country
453   ipfiremake GeoIP
454 ###
455   ipfiremake fwhits
456   ipfiremake noip_updater
457   ipfiremake ntp
458   ipfiremake oinkmaster
459   ipfiremake openssh
460   ipfiremake openswan
461   ipfiremake pptpclient
462   ipfiremake rrdtool
463   ipfiremake setserial
464   ipfiremake setup
465   ipfiremake snort
466   ipfiremake squid
467   ipfiremake squid-graph
468   ipfiremake squidguard
469 #  ipfiremake tcpdump
470   ipfiremake traceroute
471   ipfiremake vlan
472   ipfiremake wireless
473   ipfiremake libsafe
474   ipfiremake 3c5x9setup
475   ipfiremake pakfire
476   ipfiremake startscripts
477   ipfiremake java
478   ipfiremake bootsplash
479   ipfiremake spandsp
480   ipfiremake lzo
481   ipfiremake openvpn
482   ipfiremake pkg-config
483   ipfiremake glib
484   ipfiremake pammysql
485   ipfiremake xinetd
486   ipfiremake ghostscript
487   ipfiremake cups
488   ipfiremake samba
489   ipfiremake sudo
490   ipfiremake mc
491   ipfiremake wget
492   ipfiremake wput
493   ipfiremake bridge-utils
494   ipfiremake screen
495   ipfiremake hddtemp
496   ipfiremake smartmontools
497   ipfiremake htop
498   ipfiremake lynx
499   ipfiremake postfix
500   ipfiremake procmail
501   ipfiremake fetchmail
502   ipfiremake cyrusimap
503   ipfiremake webcyradm
504   ipfiremake mailx
505   ipfiremake clamav
506   ipfiremake razor
507   ipfiremake spamassassin
508   ipfiremake amavisd
509   ipfiremake stund
510   ipfiremake libpri
511 # ipfiremake bristuff
512   ipfiremake asterisk
513   ipfiremake mpg123
514   ipfiremake libmad
515   ipfiremake libogg
516   ipfiremake libvorbis
517   ipfiremake lame
518   ipfiremake xvid
519   ipfiremake mpeg2dec
520   ipfiremake ffmpeg
521   ipfiremake sox
522   ipfiremake gnump3d
523   ipfiremake videolan
524   ipfiremake applejuice
525   ipfiremake ocaml
526   ipfiremake mldonkey
527   ipfiremake ntop
528   ipfiremake rsync
529   ipfiremake tcpwrapper
530   ipfiremake portmap
531   ipfiremake nfs
532   ipfiremake nmap
533   ipfiremake mbmon
534   ipfiremake iftop
535   ipfiremake ncftp
536   ipfiremake cftp
537   ipfiremake etherwake
538   ipfiremake ethereal
539   ipfiremake tftp-hpa
540   ipfiremake iptraf
541   ipfiremake nagios
542   ipfiremake yasuc
543 }
544
545 buildinstaller() {
546   # Run installer scripts one by one
547   LOGFILE="$BASEDIR/log/_build.installer.log"
548   export LOGFILE
549   ipfiremake syslinux
550   ipfiremake uClibc
551   installmake busybox
552   installmake udev
553   installmake sysvinit
554   installmake gettext
555   installmake e2fsprogs
556   installmake misc-progs
557   installmake sysfsutils
558 #  installmake hwinfo
559   installmake slang
560   installmake util-linux
561   installmake reiserfsprogs
562   installmake newt
563   installmake pciutils
564   installmake pcmciautils
565   installmake kbd
566   installmake popt
567   installmake kudzu
568   installmake installer
569   installmake scsi.img
570   installmake driver.img
571   installmake initrd
572   installmake boot.img
573 #  ipfiremake as86
574 #  ipfiremake mbr
575 }
576
577 buildpackages() {
578   LOGFILE="$BASEDIR/log/_build.packages.log"
579   export LOGFILE
580   echo "... see detailed log in _build.*.log files" >> $LOGFILE
581
582   installmake strip
583   
584   # Generating list of packages used
585   echo -n "Generating packages list from logs" | tee -a $LOGFILE
586   rm -f $BASEDIR/doc/packages-list
587   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
588         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
589                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
590         fi
591   done
592   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
593   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$' \
594         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
595   rm -f $BASEDIR/doc/packages-list
596   # packages-list.txt is ready to be displayed for wiki page
597   beautify message DONE
598
599   # Create ISO for CDROM
600   ipfiremake cdrom
601   rm -f $LFS/install/images/*usb*
602   cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
603
604 #  ipfirepackages
605
606   # Cleanup
607   stdumount
608   rm -rf $BASEDIR/build/tmp/*
609
610   # Generating total list of files
611   echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
612   rm -f $BASEDIR/log/FILES
613   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
614         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
615                 echo "##" >>$BASEDIR/log/FILES
616                 echo "## `basename $i`" >>$BASEDIR/log/FILES
617                 echo "##" >>$BASEDIR/log/FILES
618                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
619         fi
620   done
621   cd $BASEDIR/packages; ls -w1 *.ipfire | awk -F ".ipfire" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
622   echo -n "###EOF###" >> $BASEDIR/packages/packages_list.txt
623
624   cd $PWD
625
626 }
627
628 ipfirepackages() {
629   if [ -d "$BASEDIR/packages" ]; then
630           for i in `ls $BASEDIR/packages`; do
631                 touch $BASEDIR/build/install/packages/$i.empty
632           done
633   fi
634 #  ipfiredist amavisd
635   ipfiredist applejuice
636   ipfiredist asterisk
637   ipfiredist clamav
638   ipfiredist cups
639   ipfiredist cyrusimap
640   ipfiredist fetchmail
641   ipfiredist ffmpeg
642   ipfiredist gnump3d
643   ipfiredist iptraf
644   ipfiredist java
645   ipfiredist lame
646   ipfiredist libmad
647   ipfiredist libogg
648   ipfiredist libvorbis
649   ipfiredist mailx
650   ipfiredist mldonkey
651   ipfiredist mpeg2dec
652   ipfiredist nagios
653   ipfiredist nfs
654   ipfiredist nmap
655   ipfiredist ntop
656   ipfiredist portmap
657   ipfiredist postfix
658   ipfiredist procmail
659   ipfiredist samba
660   ipfiredist sox
661   ipfiredist spamassassin
662   ipfiredist subversion
663   ipfiredist videolan
664   ipfiredist webcyradm
665   ipfiredist xvid
666   ipfiredist yasuc
667   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
668   mv -f $LFS/install/packages/*.{ipfire,md5} $BASEDIR/packages >> $LOGFILE 2>&1
669   rm -rf  $BASEDIR/build/install/packages/*
670 }
671
672 # See what we're supposed to do
673 case "$1" in 
674 build)
675         clear
676         BUILDMACHINE=`uname -m`
677         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
678         #only restore on a clean disk
679         if [ ! -f log/cleanup-toolchain-2-tools ]; then
680                 if [ ! -n "$PACKAGE" ]; then
681                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
682                         prepareenv
683                         buildtoolchain
684                 else
685                         PACKAGENAME=${PACKAGE%.tar.gz}
686                         beautify build_stage "Packaged toolchain compilation"
687                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
688                                 tar zxf $PACKAGE
689                                 prepareenv
690                         else
691                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
692                         fi
693                 fi
694         else
695                 echo -n "Using installed toolchain" | tee -a $LOGFILE
696                 beautify message SKIP
697                 prepareenv
698         fi
699
700         beautify build_stage "Building base"
701         buildbase
702
703         beautify build_stage "Building IPFire"
704         buildipfire
705
706         # Setzen des IPFire Builds
707         if [ "$FIREBUILD" ]; then
708                 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
709         else
710                 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
711         fi
712
713         beautify build_stage "Building installer"
714         buildinstaller
715
716         beautify build_stage "Building packages"
717         buildpackages
718         ;;
719 shell)
720         # enter a shell inside LFS chroot
721         # may be used to changed kernel settings
722         prepareenv
723         entershell
724         ;;
725 changelog)
726         echo -n "Loading new Changelog from SVN: "
727         svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
728         echo "Finished!"
729         ;;
730 clean)
731         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
732                 $LOSETUP -d $i 2>/dev/null
733         done
734         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
735                 umount $i
736         done
737         stdumount
738         for i in `seq 0 7`; do
739             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
740                 umount /dev/loop${i}     2>/dev/null;
741                 losetup -d /dev/loop${i} 2>/dev/null;
742             fi;
743         done
744         rm -rf $BASEDIR/build
745         rm -rf $BASEDIR/cdrom
746         rm -rf $BASEDIR/packages
747         rm -rf $BASEDIR/log
748         if [ -h /tools ]; then
749                 rm -f /tools
750         fi
751         ;;
752 newpak)
753         # create structure for a new package
754         echo -e "Name of the new package: $2"
755         if [ ! -f "lfs/$2" ]; then
756                 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
757                 mkdir -p src/paks/$2
758                 cd src/paks/$2
759                 echo "`date -u '+%b %e %T'`: Creating files"
760                 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
761
762                 touch ROOTFILES
763                 touch {,un}install.sh
764         ## install.sh
765                 echo '#!/bin/bash' > install.sh
766                 echo '#' >> install.sh
767                 echo '#################################################################' >> install.sh
768                 echo '#                                                               #' >> install.sh
769                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
770                 echo '#                                                               #' >> install.sh
771                 echo '#################################################################' >> install.sh
772                 echo '#' >> install.sh
773                 echo '# Extract the files' >> install.sh
774                 echo 'tar xfz files.tgz -C /' >> install.sh
775                 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
776         ## uninstall.sh
777                 echo '#!/bin/bash' > uninstall.sh
778                 echo '#################################################################' >> uninstall.sh
779                 echo '#                                                               #' >> uninstall.sh
780                 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
781                 echo '#                                                               #' >> uninstall.sh
782                 echo '#################################################################' >> uninstall.sh
783                 echo '#' >> uninstall.sh
784                 echo '# Delete the files' >> uninstall.sh
785                 echo '## Befehl fehlt noch' >> uninstall.sh
786                 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
787                 echo "`date -u '+%b %e %T'`: Adding files to SVN"
788                 cd - && svn add lfs/$2 && svn add src/paks/$2
789
790                 echo -n "Do you want to remove the folders? [y/n]"
791                 read REM
792                 if  [ "$REM" == "y" ]; then
793                         echo "Removing the folders..."
794                         svn del src/paks/$2 --force
795                 else
796                         echo "Folders are kept."
797                 fi
798         else
799                 echo "$2 already exists"
800         fi
801         exit 0
802         ;;
803 downloadsrc)
804         if [ ! -d $BASEDIR/cache ]; then
805                 mkdir $BASEDIR/cache
806         fi
807         mkdir -p $BASEDIR/log
808         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
809         FINISHED=0
810         cd $BASEDIR/lfs
811         for c in `seq $MAX_RETRIES`; do
812                 if (( FINISHED==1 )); then 
813                         break
814                 fi
815                 FINISHED=1
816                 cd $BASEDIR/lfs
817                 for i in *; do
818                         if [ -f "$i" -a "$i" != "Config" ]; then
819                                 echo -ne "Loading $i"
820                                 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
821                                 if [ $? -ne 0 ]; then
822                                         beautify message FAIL
823                                         FINISHED=0
824                                 else
825                                         if [ $c -eq 1 ]; then
826                                         beautify message DONE
827                                         fi
828                                 fi
829                         fi
830                 done
831         done
832         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
833         ERROR=0
834         for i in *; do
835                 if [ -f "$i" -a "$i" != "Config" ]; then
836                         make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
837                         if [ $? -ne 0 ]; then
838                                 echo -ne "MD5 difference in lfs/$i"
839                                 beautify message FAIL
840                                 ERROR=1
841                         fi
842                 fi
843         done
844         if [ $ERROR -eq 0 ]; then
845                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
846                 beautify message DONE
847         else
848                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
849                 beautify message FAIL
850         fi
851         cd - >/dev/null 2>&1
852         ;;
853 toolchain)
854         clear
855         prepareenv
856         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
857         buildtoolchain
858         BUILDMACHINE=`uname -m`
859         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
860         test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
861         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
862                 build/{bin,etc,usr/bin,usr/local} \
863                 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
864                 log >> $LOGFILE
865         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
866                 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
867         stdumount
868         ;;
869 gettoolchain)
870         BUILDMACHINE=`uname -m`
871         # arbitrary name to be updated in case of new toolchain package upload
872         PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
873         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
874                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
875                 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
876                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
877                 cd $BASEDIR/cache/toolchains
878                 wget $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
879                 if [ $? -ne 0 ]; then
880                         echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
881                 else
882                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
883                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
884                         else
885                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
886                         fi
887                 fi
888         else
889                 echo "Toolchain is already downloaded. Exiting..."
890         fi
891         ;;
892 othersrc)
893         prepareenv
894         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
895         chroot $LFS /tools/bin/env -i   HOME=/root \
896         TERM=$TERM PS1='\u:\w\$ ' \
897         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
898         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
899         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
900         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
901         if [ $? -eq "0" ]; then
902                 beautify message DONE
903         else
904                 beautify message FAIL
905         fi
906         stdumount
907         ;;
908 svn)
909         case "$2" in
910           update|up)
911                 # clear
912                 echo -ne "Loading the latest source files...\n"
913                 if [ $3 ]; then
914                         svn update -r $3 | tee -a $PWD/log/_build.svn.update.log
915                 else
916                         svn update | tee -a $PWD/log/_build.svn.update.log
917                 fi
918                 if [ $? -eq "0" ]; then
919                         beautify message DONE
920                 else
921                         beautify message FAIL
922                         exit 1
923                 fi
924                 echo -ne "Writing the svn-info to a file"
925                 svn info > $PWD/svn_status
926                 if [ $? -eq "0" ]; then
927                         beautify message DONE
928                 else
929                         beautify message FAIL
930                         exit 1
931                 fi
932                 chmod 755 $0
933                 exit 0
934           ;;
935           commit|ci)
936                 clear
937                 if [ -f /usr/bin/mcedit ]; then
938                         export EDITOR=/usr/bin/mcedit
939                 else
940                         if [ -f /usr/bin/nano ]; then
941                                 export EDITOR=/usr/bin/nano
942                         fi
943                 fi
944                 echo -ne "Selecting editor $EDITOR..."
945                 beautify message DONE
946                 if [ -e /sbin/yast ]; then
947                         if [ "`echo $SVN_REVISION | cut -c 3`" -eq "0" ]; then
948                                 $0 changelog
949                         fi
950                 fi
951                 svn commit
952                 $0 svn up
953                 $0 uploadsrc
954           ;;
955           dist)
956                 if [ $3 ]; then
957                         SVN_REVISION=$3
958                 fi
959                 if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
960                         echo -ne "REV $SVN_REVISION: SKIPPED!\n"
961                         exit 0
962                 fi
963                 echo -en "REV $SVN_REVISION: Downloading..."
964                 svn export http://svn.ipfire.eu/svn/ipfire/trunk ipfire-source/ --force > /dev/null
965                 svn log http://svn.ipfire.eu/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
966                 #svn info http://svn.ipfire.eu/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
967                 evaluate 1
968
969                 echo -en "REV $SVN_REVISION: Compressing files..."
970                 if [ -e ipfire-source/trunk/make.sh ]; then
971                         chmod 755 ipfire-source/trunk/make.sh
972                 fi
973                 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
974                 evaluate 1
975                 echo -en "REV $SVN_REVISION: Cleaning up..."
976                 rm ipfire-source/ -r
977                 evaluate 1
978           ;;
979           diff|di)
980                 echo -ne "Make a local diff to last svn revision"
981                 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
982                 evaluate 1
983                 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
984           ;;
985         esac
986         ;;
987 uploadsrc)
988         PWD=`pwd`
989         cd $BASEDIR/cache/
990         echo -e "Uploading cache to ftp server:"
991         ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > /var/tmp/ftplist
992         for i in *; do
993                 if [ "$i" == "toolchains" ]; then continue; fi
994                 grep -q $i /var/tmp/ftplist
995                 if [ "$?" -ne "0" ]; then
996                         echo -ne "$i"
997                         ncftpput -bb -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ $i >> $BASEDIR/log/_build.uploadsrc.log 2>&1
998                         if [ "$?" -eq "0" ]; then
999                                 beautify message DONE
1000                         else
1001                                 beautify message FAIL
1002                         fi
1003                 fi
1004         done
1005         rm -f /var/tmp/ftplist
1006         UL_TIME_START=`date +'%s'`
1007         ncftpbatch -d > /dev/null 2>&1
1008         while ps acx | grep -q ncftpbatch
1009         do
1010                 UL_TIME=$(expr `date +'%s'` - $UL_TIME_START)
1011                 echo -ne "\r ${UL_TIME}s : Upload is running..."
1012                 sleep 1
1013         done
1014         beautify message DONE
1015         cd $PWD
1016         exit 0
1017         ;;
1018 upload)
1019         case "$2" in
1020           iso)
1021                 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
1022                 cat <<EOF > .ftp-commands
1023 mkdir $IPFIRE_FTP_PATH_EXT
1024 ls -lah
1025 quit
1026 EOF
1027                 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
1028                 rm -f .ftp-commands
1029                 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
1030                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
1031                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso.md5
1032                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-source-r$SVN_REVISION.tar.gz
1033                 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
1034                 if [ "$?" -eq "0" ]; then
1035                         echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
1036                 else
1037                         echo -e "There was an error while uploading the iso to the ftp server."
1038                         exit 1
1039                 fi
1040                 if [ "$3" = "--with-sources-cd" ]; then
1041                         ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-sources-cd-$VERSION.$MACHINE.iso
1042                 fi
1043                 ;;
1044           paks)
1045                 cat <<EOF > .ftp-commands
1046 mkdir $IPFIRE_FTP_PATH_PAK
1047 ls -lah
1048 quit
1049 EOF
1050                 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
1051                 rm -f .ftp-commands
1052                 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1053                 if [ "$?" -eq "0" ]; then
1054                         echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
1055                 else
1056                         echo -e "There was an error while uploading the packages to the ftp server."
1057                         exit 1
1058                 fi
1059           ;;
1060         esac
1061         ;;
1062 batch)
1063         if [ "$2" -eq "--background" ]; then
1064                 batch_script
1065                 exit $?
1066         fi
1067         if [ `screen -ls | grep -q ipfire` ]; then
1068                 echo "Build is already running, sorry!"
1069                 exit 1
1070         else
1071                 if [ "$2" = "--rebuild" ]; then
1072                         export IPFIRE_REBUILD=1
1073                         echo "REBUILD!"
1074                 else
1075                         export IPFIRE_REBUILD=0
1076                 fi
1077                 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1078                 screen -dmS ipfire $0 batch --background
1079                 evaluate 1
1080                 exit 0
1081         fi
1082         ;;
1083 watch)
1084         watch_screen
1085         ;;
1086 "")
1087         clear
1088         svn info
1089         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"
1090         do
1091         case $name in
1092         "IPFIRE: Downloadsrc")
1093                 $0 downloadsrc
1094                 ;;
1095         "IPFIRE: Build (silent)")
1096                 $0 build-silent
1097                 ;;
1098         "IPFIRE: Watch Build")
1099                 $0 watch
1100                 ;;
1101         "IPFIRE: Batch")
1102                 $0 batch
1103                 ;;
1104         "IPFIRE: Clean")
1105                 $0 clean
1106                 ;;
1107         "SVN: Update")
1108                 $0 svn update
1109                 ;;
1110         "Help")
1111                 echo "Usage: $0 {build|changelog|clean|gettoolchain|newpak|downloadsrc|shell|sync|toolchain}"
1112                 cat doc/make.sh-usage
1113                 ;;
1114         "LOG: Tail")
1115                 tail -f log/_*
1116                 ;;
1117         "Exit")
1118                 break
1119                 ;;
1120         esac
1121         done
1122         ;;
1123 *)
1124         echo "Usage: $0 {build|changelog|clean|gettoolchain|newpak|downloadsrc|shell|sync|toolchain}"
1125         cat doc/make.sh-usage
1126         ;;
1127 esac