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