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