Remove start and stop beep sounds.
[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) 2007-2011 IPFire-Team <info@ipfire.org>.                   #
21 #                                                                          #
22 ############################################################################
23 #
24
25 NAME="IPFire"                                                   # Software name
26 SNAME="ipfire"                                                  # Short name
27 VERSION="2.11"                                                  # Version number
28 CORE="53"                                                       # Core Level (Filename)
29 PAKFIRE_CORE="52"                                               # Core Level (PAKFIRE)
30 GIT_BRANCH=`git status | head -n1 | cut -d" " -f4`              # Git Branch
31 SLOGAN="www.ipfire.org"                                         # Software slogan
32 CONFIG_ROOT=/var/ipfire                                         # Configuration rootdir
33 NICE=10                                                         # Nice level
34 MAX_RETRIES=1                                                   # prefetch/check loop
35 BUILD_IMAGES=1                                                  # Build USB, Flash and Xen Images
36 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
37 MACHINE=`uname -m`
38 GIT_TAG=$(git tag | tail -1)                                    # Git Tag
39 GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8)  # Last commit
40 TOOLCHAINVER=1
41 IPFVER="full"                           # Which versions should be compiled? (full|devel)
42
43 BUILDMACHINE=$MACHINE
44     if [ "$MACHINE" = "x86_64" ]; then
45         BUILDMACHINE="i686";
46         linux32="linux32";
47     fi
48
49
50 # Debian specific settings
51 if [ ! -e /etc/debian_version ]; then
52         FULLPATH=`which $0`
53 else
54         if [ -x /usr/bin/realpath ]; then
55                 FULLPATH=`/usr/bin/realpath $0`
56         else
57                 echo "ERROR: Need to do apt-get install realpath"
58                 exit 1
59         fi
60 fi
61
62 PWD=`pwd`
63 BASENAME=`basename $0`
64 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
65 LOGFILE=$BASEDIR/log/_build.preparation.log
66 export BASEDIR LOGFILE
67 DIR_CHK=$BASEDIR/cache/check
68 mkdir $BASEDIR/log/ 2>/dev/null
69
70 # Include funtions
71 . tools/make-functions
72
73 if [ -f .config ]; then
74         . .config
75 else
76         echo -e  "${BOLD}No configuration found!${NORMAL}"
77         echo -ne "Do you want to create one (y/N)?"
78         read CREATE_CONFIG
79         echo ""
80         if [ "$CREATE_CONFIG" == "y" ]; then
81                 make_config
82         fi
83 fi
84
85 if [ -z $EDITOR ]; then
86         for i in nano emacs vi; do
87                 EDITOR=$(which $i 2>/dev/null)
88                 if ! [ -z $EDITOR ]; then
89                         export EDITOR=$EDITOR
90                         break
91                 fi
92         done
93         [ -z $EDITOR ] && exiterror "You should have installed an editor."
94 fi
95
96 prepareenv() {
97     ############################################################################
98     #                                                                          #
99     # Are we running the right shell?                                          #
100     #                                                                          #
101     ############################################################################
102     if [ ! "$BASH" ]; then
103                         exiterror "BASH environment variable is not set.  You're probably running the wrong shell."
104     fi
105
106     if [ -z "${BASH_VERSION}" ]; then
107                         exiterror "Not running BASH shell."
108     fi
109
110
111     ############################################################################
112     #                                                                          #
113     # Trap on emergency exit                                                   #
114     #                                                                          #
115     ############################################################################
116     trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
117
118
119     ############################################################################
120     #                                                                          #
121     # Resetting our nice level                                                 #
122     #                                                                          #
123     ############################################################################
124     echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
125     renice $NICE $$ > /dev/null
126     if [ `nice` != "$NICE" ]; then
127                         beautify message FAIL
128                         exiterror "Failed to set correct nice level"
129     else
130                         beautify message DONE
131     fi
132
133
134     ############################################################################
135     #                                                                          #
136     # Checking if running as root user                                         #
137     #                                                                          #
138     ############################################################################
139     echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
140     if [ `id -u` != 0 ]; then
141                         beautify message FAIL
142                         exiterror "Not building as root"
143     else
144                         beautify message DONE
145     fi
146
147
148     ############################################################################
149     #                                                                          #
150     # Checking for necessary temporary space                                   #
151     #                                                                          #
152     ############################################################################
153     echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
154     BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
155     BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
156     if (( 2048000 > $BASE_ASPACE )); then
157                         BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
158                         if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
159                                 beautify message FAIL
160                                 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
161                         fi
162     else
163                         beautify message DONE
164     fi
165
166     ############################################################################
167     #                                                                          #
168     # Building Linux From Scratch system                                       #
169     #                                                                          #
170     ############################################################################
171     # Set umask
172     umask 022
173
174     # Set LFS Directory
175     LFS=$BASEDIR/build
176
177     # Check /tools symlink
178     if [ -h /tools ]; then
179         rm -f /tools
180     fi
181     if [ ! -a /tools ]; then
182                         ln -s $BASEDIR/build/tools /
183     fi
184     if [ ! -h /tools ]; then
185                         exiterror "Could not create /tools symbolic link."
186     fi
187
188     # Setup environment
189     set +h
190     LC_ALL=POSIX
191     if [ -z $MAKETUNING ]; then
192         if [ "${MACHINE:0:3}" = "arm" ]; then
193             MAKETUNING="-j2"
194         else
195             MAKETUNING="-j6"
196         fi
197     fi
198     export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
199     unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
200
201     # Make some extra directories
202     mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
203     mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
204     mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
205     mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
206
207     mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
208     mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
209
210     # Make all sources and proc available under lfs build
211     mount --bind /dev            $BASEDIR/build/dev
212     mount --bind /dev/pts        $BASEDIR/build/dev/pts
213     mount --bind /dev/shm        $BASEDIR/build/dev/shm
214     mount --bind /proc           $BASEDIR/build/proc
215     mount --bind /sys            $BASEDIR/build/sys
216     mount --bind $BASEDIR/cache  $BASEDIR/build/usr/src/cache
217     mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
218     mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
219     mount --bind $BASEDIR/doc    $BASEDIR/build/usr/src/doc
220     mount --bind $BASEDIR/html   $BASEDIR/build/usr/src/html
221     mount --bind $BASEDIR/langs  $BASEDIR/build/usr/src/langs
222     mount --bind $BASEDIR/lfs    $BASEDIR/build/usr/src/lfs
223     mount --bind $BASEDIR/log    $BASEDIR/build/usr/src/log
224     mount --bind $BASEDIR/src    $BASEDIR/build/usr/src/src
225
226     # This is a temporary hack!!!
227     if [ ! -f /tools/bin/hostname ]; then
228       cp -f /bin/hostname /tools/bin/hostname 2>/dev/null
229     fi
230
231     # Run LFS static binary creation scripts one by one
232     export CCACHE_DIR=$BASEDIR/ccache
233     export CCACHE_COMPRESS=1
234     export CCACHE_HASHDIR=1
235
236     # Remove pre-install list of installed files in case user erase some files before rebuild
237     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
238 }
239
240 buildtoolchain() {
241     if [ "$(uname -m)" = "x86_64" ]; then
242         exiterror "Cannot build toolchain on x86_64. Please use the download."
243     fi
244     if [ "$(uname -r | grep ipfire)" ]; then
245         exiterror "Cannot build toolchain on ipfire. Please use the download."
246     fi
247
248     LOGFILE="$BASEDIR/log/_build.toolchain.log"
249     export LOGFILE
250     NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
251     export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
252     ORG_PATH=$PATH
253     export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
254     lfsmake1 ccache     PASS=1
255     lfsmake1 make       PASS=1
256     lfsmake1 binutils   PASS=1
257     lfsmake1 gcc                PASS=1
258     if [ "${MACHINE_TYPE}" = "arm" ]; then
259         lfsmake1 linux TOOLS=1 HEADERS=1
260     else
261         lfsmake1 linux-libc-header
262     fi
263     lfsmake1 glibc
264     lfsmake1 cleanup-toolchain PASS=1
265     lfsmake1 tcl
266     lfsmake1 expect
267     lfsmake1 dejagnu
268     lfsmake1 gcc                PASS=2
269     lfsmake1 binutils   PASS=2
270     lfsmake1 ccache     PASS=2
271     lfsmake1 ncurses
272     lfsmake1 bash
273     lfsmake1 bzip2
274     lfsmake1 coreutils
275     lfsmake1 diffutils
276     lfsmake1 findutils
277     lfsmake1 gawk
278     lfsmake1 gettext
279     lfsmake1 grep
280     lfsmake1 gzip
281     lfsmake1 m4
282     lfsmake1 make       PASS=2
283     lfsmake1 patch
284     lfsmake1 perl
285     lfsmake1 sed
286     lfsmake1 tar
287     lfsmake1 texinfo
288     lfsmake1 util-linux
289     lfsmake1 strip
290     lfsmake1 cleanup-toolchain  PASS=2
291     export PATH=$ORG_PATH
292 }
293
294 buildbase() {
295     LOGFILE="$BASEDIR/log/_build.base.log"
296     export LOGFILE
297     lfsmake2 stage2
298     if [ "${MACHINE_TYPE}" = "arm" ]; then
299         lfsmake2 linux HEADERS=1
300     else
301         lfsmake2 linux-libc-header
302     fi
303     lfsmake2 man-pages
304     lfsmake2 glibc
305     lfsmake2 cleanup-toolchain  PASS=3
306     lfsmake2 binutils
307     lfsmake2 gcc
308     lfsmake2 berkeley
309     lfsmake2 coreutils
310     lfsmake2 iana-etc
311     lfsmake2 m4
312     lfsmake2 bison
313     lfsmake2 ncurses
314     lfsmake2 procps
315     lfsmake2 sed
316     lfsmake2 libtool
317     lfsmake2 perl
318     lfsmake2 readline
319     lfsmake2 zlib
320     lfsmake2 autoconf
321     lfsmake2 automake
322     lfsmake2 bash
323     lfsmake2 bzip2
324     lfsmake2 diffutils
325     lfsmake2 e2fsprogs
326     lfsmake2 ed
327     lfsmake2 file
328     lfsmake2 findutils
329     lfsmake2 flex
330     lfsmake2 gawk
331     lfsmake2 gettext
332     lfsmake2 grep
333     lfsmake2 groff
334     lfsmake2 gzip
335     lfsmake2 inetutils
336     lfsmake2 iproute2
337     lfsmake2 kbd
338     lfsmake2 less
339     lfsmake2 libaal
340     lfsmake2 make
341     lfsmake2 man
342     lfsmake2 mktemp
343     lfsmake2 module-init-tools
344     lfsmake2 net-tools
345     lfsmake2 patch
346     lfsmake2 psmisc
347     lfsmake2 reiser4progs
348     lfsmake2 shadow
349     lfsmake2 sysklogd
350     lfsmake2 sysvinit
351     lfsmake2 tar
352     lfsmake2 texinfo
353     lfsmake2 udev
354     lfsmake2 util-linux
355     lfsmake2 vim
356     lfsmake2 grub
357 }
358
359 buildipfire() {
360   LOGFILE="$BASEDIR/log/_build.ipfire.log"
361   export LOGFILE
362   ipfiremake configroot
363   ipfiremake backup
364   ipfiremake dhcp
365   ipfiremake dhcpcd
366   ipfiremake libusb
367   ipfiremake libpcap
368   ipfiremake ppp
369   ipfiremake pptp
370   ipfiremake unzip
371   ipfiremake which
372   ipfiremake xz
373   ipfiremake linux-firmware
374   ipfiremake zd1211-firmware
375   ipfiremake u-boot
376
377   # The xen and PAE kernels are only available for x86
378   if [ "${MACHINE_TYPE}" != "arm" ]; then
379     ipfiremake linux                    XEN=1
380     ipfiremake kqemu                    XEN=1
381     ipfiremake v4l-dvb                  XEN=1
382     ipfiremake madwifi                  XEN=1
383     ipfiremake mISDN                    XEN=1
384     ipfiremake dahdi                    XEN=1 KMOD=1
385     ipfiremake cryptodev                        XEN=1
386     ipfiremake compat-wireless          XEN=1
387     ipfiremake r8169                    XEN=1
388     ipfiremake r8168                    XEN=1
389     ipfiremake r8101                    XEN=1
390     ipfiremake e1000                    XEN=1
391     ipfiremake e1000e                   XEN=1
392     ipfiremake igb                      XEN=1
393     ipfiremake linux                    PAE=1
394     ipfiremake kqemu                    PAE=1
395     ipfiremake kvm-kmod                 PAE=1
396     ipfiremake v4l-dvb                  PAE=1
397     ipfiremake madwifi                  PAE=1
398     ipfiremake alsa                     PAE=1 KMOD=1
399     ipfiremake mISDN                    PAE=1
400     ipfiremake dahdi                    PAE=1 KMOD=1
401     ipfiremake cryptodev                        PAE=1
402     ipfiremake compat-wireless          PAE=1
403 #    ipfiremake r8169                   PAE=1
404 #    ipfiremake r8168                   PAE=1
405 #    ipfiremake r8101                   PAE=1
406     ipfiremake e1000                    PAE=1
407     ipfiremake e1000e                   PAE=1
408     ipfiremake igb                      PAE=1
409   fi
410
411   # Default kernel build
412   ipfiremake linux
413   ipfiremake v4l-dvb
414   ipfiremake kqemu
415   ipfiremake kvm-kmod
416   ipfiremake madwifi
417   if [ "${MACHINE_TYPE}" = "arm" ]; then
418     #todo enable alsa driver in kernel config
419     ipfiremake alsa                     KMOD=1
420   fi
421   #undefined declaration in echo canceler try to fix later
422   ipfiremake mISDN
423   ipfiremake dahdi                      KMOD=1
424   ipfiremake cryptodev
425   ipfiremake compat-wireless
426 #  ipfiremake r8169
427 #  ipfiremake r8168
428 #  ipfiremake r8101
429   ipfiremake e1000
430   ipfiremake e1000e
431   ipfiremake igb
432   ipfiremake pkg-config
433   ipfiremake linux-atm
434   ipfiremake cpio
435   ipfiremake dracut
436   ipfiremake expat
437   ipfiremake gdbm
438   ipfiremake gmp
439   ipfiremake pam
440   ipfiremake openssl
441   ipfiremake curl
442   ipfiremake tcl
443   ipfiremake sqlite
444   ipfiremake python
445   ipfiremake fireinfo
446   ipfiremake libnet
447   ipfiremake libnl
448   ipfiremake libidn
449   ipfiremake libjpeg
450   ipfiremake libpng
451   ipfiremake libtiff
452   ipfiremake libart
453   ipfiremake freetype
454   ipfiremake gd
455   ipfiremake popt
456   ipfiremake pcre
457   ipfiremake slang
458   ipfiremake newt
459   ipfiremake attr
460   ipfiremake acl
461   ipfiremake libcap
462   ipfiremake pciutils
463   ipfiremake usbutils
464   ipfiremake libxml2
465   ipfiremake libxslt
466   ipfiremake BerkeleyDB
467   ipfiremake mysql
468   ipfiremake cyrus-sasl
469   ipfiremake openldap
470   ipfiremake apache2
471   ipfiremake php
472   ipfiremake apache2                    PASS=C
473   ipfiremake arping
474   ipfiremake beep
475   ipfiremake bind
476   ipfiremake dvdrtools
477   ipfiremake dnsmasq
478   ipfiremake dosfstools
479   ipfiremake reiserfsprogs
480   ipfiremake xfsprogs
481   ipfiremake sysfsutils
482   ipfiremake fuse
483   ipfiremake ntfs-3g
484   ipfiremake ethtool
485   ipfiremake ez-ipupdate
486   ipfiremake fcron
487   ipfiremake perl-GD
488   ipfiremake GD-Graph
489   ipfiremake GD-TextUtil
490   ipfiremake gnupg
491   ipfiremake hdparm
492   ipfiremake sdparm
493   ipfiremake mtools
494   ipfiremake initscripts
495   ipfiremake whatmask
496   ipfiremake iptables
497   ipfiremake libupnp
498   ipfiremake ipaddr
499   ipfiremake iptstate
500   ipfiremake iputils
501   ipfiremake l7-protocols
502   ipfiremake mISDNuser
503   ipfiremake capi4k-utils
504   ipfiremake hwdata
505   ipfiremake kudzu
506   ipfiremake logrotate
507   ipfiremake logwatch
508   ipfiremake misc-progs
509   ipfiremake nano
510   ipfiremake nasm
511   ipfiremake URI
512   ipfiremake HTML-Tagset
513   ipfiremake HTML-Parser
514   ipfiremake Compress-Zlib
515   ipfiremake Digest
516   ipfiremake Digest-SHA1
517   ipfiremake Digest-HMAC
518   ipfiremake libwww-perl
519   ipfiremake Net-DNS
520   ipfiremake Net-IPv4Addr
521   ipfiremake Net_SSLeay
522   ipfiremake IO-Stringy
523   ipfiremake Unix-Syslog
524   ipfiremake Mail-Tools
525   ipfiremake MIME-Tools
526   ipfiremake Net-Server
527   ipfiremake Convert-TNEF
528   ipfiremake Convert-UUlib
529   ipfiremake Archive-Tar
530   ipfiremake Archive-Zip
531   ipfiremake Text-Tabs+Wrap
532   ipfiremake Locale-Country
533   ipfiremake XML-Parser
534   ipfiremake python-setuptools
535   ipfiremake python-clientform
536   ipfiremake python-mechanize
537   ipfiremake python-feedparser
538   ipfiremake python-rssdler
539   ipfiremake glib
540   ipfiremake GeoIP
541   ipfiremake fwhits
542   ipfiremake noip_updater
543   ipfiremake ntp
544   ipfiremake openssh
545   ipfiremake rrdtool
546   ipfiremake setserial
547   ipfiremake setup
548   ipfiremake libdnet
549   ipfiremake daq
550   ipfiremake snort
551   ipfiremake oinkmaster
552   ipfiremake squid
553   ipfiremake squidguard
554   ipfiremake calamaris
555   ipfiremake tcpdump
556   ipfiremake traceroute
557   ipfiremake vlan
558   ipfiremake wireless
559   ipfiremake libsafe
560   ipfiremake pakfire
561   ipfiremake spandsp
562   ipfiremake lzo
563   ipfiremake openvpn
564   ipfiremake pammysql
565   ipfiremake cups
566   ipfiremake ghostscript
567   ipfiremake foomatic
568   ipfiremake hplip
569   ipfiremake samba
570   ipfiremake sudo
571   ipfiremake mc
572   ipfiremake wget
573   ipfiremake bridge-utils
574   ipfiremake screen
575   ipfiremake hddtemp
576   ipfiremake smartmontools
577   ipfiremake htop
578   ipfiremake postfix
579   ipfiremake fetchmail
580   ipfiremake cyrus-imapd
581   ipfiremake openmailadmin
582   ipfiremake clamav
583   ipfiremake spamassassin
584   ipfiremake amavisd
585   ipfiremake alsa
586   ipfiremake mpfire
587   ipfiremake guardian
588   ipfiremake libid3tag
589   ipfiremake libmad
590   ipfiremake libogg
591   ipfiremake libvorbis
592   ipfiremake libdvbpsi
593   ipfiremake lame
594   ipfiremake sox
595   ipfiremake libshout
596   ipfiremake xvid
597   ipfiremake libmpeg2
598   ipfiremake cmake
599   ipfiremake gnump3d
600   ipfiremake libsigc++
601   ipfiremake applejuice
602   ipfiremake libtorrent
603   ipfiremake rtorrent
604   ipfiremake ipfireseeder
605   ipfiremake rsync
606   ipfiremake tcpwrapper
607   ipfiremake libevent
608   ipfiremake libevent2
609   ipfiremake portmap
610   ipfiremake nfs
611   ipfiremake nmap
612   ipfiremake ncftp
613   ipfiremake etherwake
614   ipfiremake bwm-ng
615   ipfiremake tripwire
616   ipfiremake sysstat
617   ipfiremake vsftpd
618   ipfiremake strongswan
619   ipfiremake lsof
620   ipfiremake centerim
621   ipfiremake br2684ctl
622   ipfiremake pcmciautils
623   ipfiremake lm_sensors
624   ipfiremake liboping
625   ipfiremake collectd
626   ipfiremake lcd4linux
627   ipfiremake teamspeak
628   ipfiremake elinks
629   ipfiremake igmpproxy
630   ipfiremake fbset
631   ipfiremake sdl
632   ipfiremake qemu
633   ipfiremake qemu-kqemu
634   ipfiremake sane
635   ipfiremake netpbm
636   ipfiremake phpSANE
637   ipfiremake tunctl
638   ipfiremake nagios
639   ipfiremake nagios_nrpe
640   ipfiremake ebtables
641   ipfiremake fontconfig
642   ipfiremake freefont
643   ipfiremake directfb
644   ipfiremake dfb++
645   ipfiremake faad2
646   ipfiremake ffmpeg
647   ipfiremake videolan
648   ipfiremake vdr
649   ipfiremake w_scan
650   ipfiremake icecast
651   ipfiremake icegenerator
652   ipfiremake mpd
653   ipfiremake libmpdclient
654   ipfiremake mpc
655   ipfiremake git
656   ipfiremake squidclamav
657   ipfiremake bc
658   ipfiremake vnstat
659   ipfiremake vnstati
660   ipfiremake iw
661   ipfiremake wpa_supplicant
662   ipfiremake hostapd
663   ipfiremake urlgrabber
664   ipfiremake syslinux
665   ipfiremake tftpd
666   ipfiremake cpufrequtils
667   ipfiremake dbus
668   ipfiremake bluetooth
669   ipfiremake gutenprint
670   ipfiremake apcupsd
671   ipfiremake iperf
672   ipfiremake netcat
673   ipfiremake 7zip
674   ipfiremake lynis
675   ipfiremake splix
676   ipfiremake streamripper
677   ipfiremake sshfs
678   ipfiremake taglib
679   ipfiremake mediatomb
680   ipfiremake sslh
681   ipfiremake perl-gettext
682   ipfiremake vdradmin
683   ipfiremake miau
684   ipfiremake netsnmpd
685   ipfiremake perl-DBI
686   ipfiremake perl-DBD-mysql
687   ipfiremake cacti
688   ipfiremake icecc
689   ipfiremake openvmtools
690   ipfiremake nagiosql
691   ipfiremake iftop
692   ipfiremake motion
693   ipfiremake joe
694   ipfiremake nut
695   ipfiremake watchdog
696   ipfiremake libpri
697   ipfiremake dahdi
698   ipfiremake asterisk
699   ipfiremake lcr
700   ipfiremake usb_modeswitch
701   ipfiremake usb_modeswitch_data
702   ipfiremake zerofree
703   ipfiremake mdadm
704   ipfiremake eject
705   ipfiremake pound
706   ipfiremake minicom
707   ipfiremake ddrescue
708   ipfiremake imspector
709   ipfiremake miniupnpd
710   ipfiremake client175
711   ipfiremake powertop
712   ipfiremake parted
713   ipfiremake swig
714   ipfiremake python-m2crypto
715   ipfiremake wireless-regdb
716   ipfiremake crda
717   ipfiremake libsolv
718   ipfiremake python-distutils-extra
719   ipfiremake python-lzma
720   ipfiremake python-progressbar
721   ipfiremake python-xattr
722   ipfiremake intltool
723   ipfiremake pakfire3-deps
724   ipfiremake transmission
725   echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
726   cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
727   echo >> $BASEDIR/build/var/ipfire/firebuild
728   git log -1 >> $BASEDIR/build/var/ipfire/firebuild
729   echo >> $BASEDIR/build/var/ipfire/firebuild
730   git status >> $BASEDIR/build/var/ipfire/firebuild
731   echo >> $BASEDIR/build/var/ipfire/firebuild
732   cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
733   echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
734   if [ "$GIT_BRANCH" = "next" ]; then
735         echo "$NAME $VERSION - (Development Build: $GIT_LASTCOMMIT)" > $BASEDIR/build/etc/system-release
736   else
737         echo "$NAME $VERSION - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
738   fi
739 }
740
741 buildinstaller() {
742   # Run installer scripts one by one
743   LOGFILE="$BASEDIR/log/_build.installer.log"
744   export LOGFILE
745   ipfiremake as86
746   ipfiremake mbr
747   ipfiremake memtest
748   ipfiremake installer
749   cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
750   installmake strip
751   ipfiremake initrd
752 }
753
754 buildpackages() {
755   LOGFILE="$BASEDIR/log/_build.packages.log"
756   export LOGFILE
757   echo "... see detailed log in _build.*.log files" >> $LOGFILE
758
759   
760   # Generating list of packages used
761   echo -n "Generating packages list from logs" | tee -a $LOGFILE
762   rm -f $BASEDIR/doc/packages-list
763   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
764         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
765                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
766         fi
767   done
768   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
769   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
770         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
771   rm -f $BASEDIR/doc/packages-list
772   # packages-list.txt is ready to be displayed for wiki page
773   beautify message DONE
774   
775   # Update changelog
776   cd $BASEDIR
777   $0 git log
778
779   # Create images for install
780   ipfiremake cdrom ED=$IPFVER
781
782   # Check if there is a loop device for building in virtual environments
783   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
784         if [ "${MACHINE_TYPE}" != "arm" ]; then
785                 ipfiremake usb-stick ED=$IPFVER
786         fi
787         ipfiremake flash-images ED=$IPFVER
788   fi
789
790   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
791
792   ipfirepackages
793
794   # Check if there is a loop device for building in virtual environments
795   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
796         cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
797         cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
798         ipfiremake xen-image ED=$IPFVER
799         rm -rf $LFS/install/packages/linux-xen-*.ipfire
800         rm -rf $LFS/install/packages/meta-linux-xen
801   fi
802   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
803
804   cd $BASEDIR
805   for i in `ls *.bz2 *.img.gz *.iso`; do
806         md5sum $i > $i.md5
807   done
808   cd $PWD
809
810   # Cleanup
811   stdumount
812   rm -rf $BASEDIR/build/tmp/*
813
814   # Generating total list of files
815   echo -n "Generating files list from logs" | tee -a $LOGFILE
816   rm -f $BASEDIR/log/FILES
817   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
818         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
819                 echo "##" >>$BASEDIR/log/FILES
820                 echo "## `basename $i`" >>$BASEDIR/log/FILES
821                 echo "##" >>$BASEDIR/log/FILES
822                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
823         fi
824   done
825   beautify message DONE
826
827   cd $PWD
828 }
829
830 ipfirepackages() {
831         ipfiremake core-updates
832         for i in $(ls -1 $BASEDIR/config/rootfiles/packages); do
833                 if [ -e $BASEDIR/lfs/$i ]; then
834                         ipfiredist $i
835                 else
836                         echo -n $i
837                         beautify message SKIP
838                 fi
839         done
840   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
841   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
842   rm -rf  $BASEDIR/build/install/packages/*
843 }
844
845 # See what we're supposed to do
846 case "$1" in 
847 build)
848         clear
849         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
850         #only restore on a clean disk
851         if [ ! -f log/cleanup-toolchain-2-tools ]; then
852                 if [ ! -n "$PACKAGE" ]; then
853                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
854                         prepareenv
855                         buildtoolchain
856                 else
857                         PACKAGENAME=${PACKAGE%.tar.gz}
858                         beautify build_stage "Packaged toolchain compilation"
859                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
860                                 tar zxf $PACKAGE
861                                 prepareenv
862                         else
863                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
864                         fi
865                 fi
866         else
867                 echo -n "Using installed toolchain" | tee -a $LOGFILE
868                 beautify message SKIP
869                 prepareenv
870         fi
871
872         beautify build_start
873         beautify build_stage "Building LFS"
874         buildbase
875
876         beautify build_stage "Building IPFire"
877         buildipfire
878
879         beautify build_stage "Building installer"
880         buildinstaller
881
882         beautify build_stage "Building packages"
883         buildpackages
884         
885         beautify build_stage "Checking Logfiles for new Files"
886
887         cd $BASEDIR
888         tools/checknewlog.pl
889         cd $PWD
890
891         beautify build_end
892         ;;
893 shell)
894         # enter a shell inside LFS chroot
895         # may be used to changed kernel settings
896         prepareenv
897         entershell
898         ;;
899 clean)
900         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
901         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
902                 $LOSETUP -d $i 2>/dev/null
903         done
904         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
905                 umount $i
906         done
907         stdumount
908         for i in `seq 0 7`; do
909             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
910                 umount /dev/loop${i}     2>/dev/null;
911                 losetup -d /dev/loop${i} 2>/dev/null;
912             fi;
913         done
914         rm -rf $BASEDIR/build
915         rm -rf $BASEDIR/cdrom
916         rm -rf $BASEDIR/packages
917         rm -rf $BASEDIR/log
918         if [ -h /tools ]; then
919                 rm -f /tools
920         fi
921         rm -f $BASEDIR/ipfire-*
922         beautify message DONE
923         ;;
924 downloadsrc)
925         if [ ! -d $BASEDIR/cache ]; then
926                 mkdir $BASEDIR/cache
927         fi
928         mkdir -p $BASEDIR/log
929         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
930         FINISHED=0
931         cd $BASEDIR/lfs
932         for c in `seq $MAX_RETRIES`; do
933                 if (( FINISHED==1 )); then 
934                         break
935                 fi
936                 FINISHED=1
937                 cd $BASEDIR/lfs
938                 for i in *; do
939                         if [ -f "$i" -a "$i" != "Config" ]; then
940                                 lfsmakecommoncheck ${i} || continue
941
942                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
943                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
944                                 if [ $? -ne 0 ]; then
945                                         beautify message FAIL
946                                         FINISHED=0
947                                 else
948                                         if [ $c -eq 1 ]; then
949                                         beautify message DONE
950                                         fi
951                                 fi
952                         fi
953                 done
954         done
955         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
956         ERROR=0
957         for i in *; do
958                 if [ -f "$i" -a "$i" != "Config" ]; then
959                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
960                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
961                         if [ $? -ne 0 ]; then
962                                 echo -ne "MD5 difference in lfs/$i"
963                                 beautify message FAIL
964                                 ERROR=1
965                         fi
966                 fi
967         done
968         if [ $ERROR -eq 0 ]; then
969                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
970                 beautify message DONE
971         else
972                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
973                 beautify message FAIL
974         fi
975         cd - >/dev/null 2>&1
976         ;;
977 toolchain)
978         clear
979         prepareenv
980         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
981         buildtoolchain
982         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
983         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
984         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
985                 build/{bin,etc,usr/bin,usr/local} \
986                 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
987                 log >> $LOGFILE
988         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
989                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
990         stdumount
991         ;;
992 gettoolchain)
993         # arbitrary name to be updated in case of new toolchain package upload
994         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
995         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
996                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
997                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
998                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
999                 cd $BASEDIR/cache/toolchains
1000                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1001                 if [ $? -ne 0 ]; then
1002                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1003                 else
1004                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1005                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1006                         else
1007                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1008                         fi
1009                 fi
1010         else
1011                 echo "Toolchain is already downloaded. Exiting..."
1012         fi
1013         ;;
1014 othersrc)
1015         prepareenv
1016         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1017         chroot $LFS /tools/bin/env -i   HOME=/root \
1018         TERM=$TERM PS1='\u:\w\$ ' \
1019         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1020         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1021         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1022         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1023         if [ $? -eq "0" ]; then
1024                 beautify message DONE
1025         else
1026                 beautify message FAIL
1027         fi
1028         stdumount
1029         ;;
1030 git)
1031         case "$2" in
1032           update|up)
1033                         ## REMOVES ALL UNCOMMITTED CHANGES!
1034                         [ "$3" == "--force" ] && git checkout -f
1035                         git pull
1036                 ;;
1037           commit|ci)
1038                 shift 2
1039                         git commit $*
1040                         
1041                         [ "$?" -eq "0" ] || exiterror "git commit $* failed."
1042                         
1043                         echo -e "${BOLD}Do you want to push, too? [y/N]${NORMAL}"
1044                         read
1045                         [ -z $REPLY ] && exit 0
1046                         for i in y Y j J; do
1047                                 if [ "$i" == "$REPLY" ]; then
1048                                         $0 git push
1049                                         exit $?
1050                                 fi
1051                         done
1052                         exiterror "\"$REPLY\" is not a valid answer."
1053                 ;;
1054           dist)
1055                         git archive HEAD | gzip -9 > ${SNAME}-${VERSION}.tar.gz
1056                   ;;
1057           diff|di)
1058                         echo -ne "Make a local diff to last revision"
1059                         git diff HEAD > ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff
1060                         evaluate 1
1061                         echo "Diff was successfully saved to ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff"
1062                         git diff --stat
1063                 ;;
1064           push)
1065                 [ -z $GIT_USER ] && exiterror "You have to setup GIT_USER first."
1066                         GIT_URL="ssh://${GIT_USER}@git.ipfire.org/pub/git/ipfire-2.x"
1067                         
1068                 git push ${GIT_URL} $3
1069                 ;;
1070           log)
1071                 [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
1072                 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
1073
1074                 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
1075         ;;
1076         esac
1077         ;;
1078 uploadsrc)
1079         PWD=`pwd`
1080         if [ -z $IPFIRE_USER ]; then
1081                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1082                 beautify message FAIL
1083                 exit 1
1084         fi
1085
1086         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1087         REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1088
1089         cd $BASEDIR/cache/
1090         for file in $(ls -1 --ignore=toolchains); do
1091                 grep -q "$file" <<<$REMOTE_FILES && continue
1092                 NEW_FILES="$NEW_FILES $file"
1093         done
1094         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1095         cd $BASEDIR
1096         cd $PWD
1097         exit 0
1098         ;;
1099 batch)
1100         if [ "$2" = "--background" ]; then
1101                 batch_script
1102                 exit $?
1103         fi
1104         if [ `screen -ls | grep -q ipfire` ]; then
1105                 echo "Build is already running, sorry!"
1106                 exit 1
1107         else
1108                 if [ "$2" = "--rebuild" ]; then
1109                         export IPFIRE_REBUILD=1
1110                         echo "REBUILD!"
1111                 else
1112                         export IPFIRE_REBUILD=0
1113                 fi
1114                 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1115                 screen -dmS ipfire $0 batch --background
1116                 evaluate 1
1117                 exit 0
1118         fi
1119         ;;
1120 watch)
1121         watch_screen
1122         ;;
1123 pxe)
1124         case "$2" in
1125           start)
1126                 start_tftpd
1127                 ;;
1128           stop)
1129                 stop_tftpd
1130                 ;;
1131           reload|restart)
1132                 reload_tftpd
1133                 ;;              
1134         esac
1135         exit 0
1136         ;;
1137 lang)
1138         update_langs
1139         ;;
1140 "")
1141         clear
1142         select name in "Exit" "IPFIRE: Downloadsrc" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "LOG: Tail" "Help"
1143         do
1144         case $name in
1145         "IPFIRE: Downloadsrc")
1146                 $0 downloadsrc
1147                 ;;
1148         "IPFIRE: Build (silent)")
1149                 $0 build-silent
1150                 ;;
1151         "IPFIRE: Watch Build")
1152                 $0 watch
1153                 ;;
1154         "IPFIRE: Batch")
1155                 $0 batch
1156                 ;;
1157         "IPFIRE: Clean")
1158                 $0 clean
1159                 ;;
1160         "Help")
1161                 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1162                 cat doc/make.sh-usage
1163                 ;;
1164         "LOG: Tail")
1165                 tail -f log/_*
1166                 ;;
1167         "Exit")
1168                 break
1169                 ;;
1170         esac
1171         done
1172         ;;
1173 config)
1174         make_config
1175         ;;
1176 *)
1177         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1178         cat doc/make.sh-usage
1179         ;;
1180 esac