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