Merge branch 'glibc-update2' of ssh://git.ipfire.org/pub/git/people/ms/ipfire-2.x...
[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="61"                                               # 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=5
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 linux2                     TOOLS=1 HEADERS=1
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 fake-environ
288     lfsmake1 cleanup-toolchain          PASS=2
289     export PATH=$ORG_PATH
290 }
291
292 buildbase() {
293     LOGFILE="$BASEDIR/log/_build.base.log"
294     export LOGFILE
295     lfsmake2 stage2
296     lfsmake2 linux2                     HEADERS=1
297     lfsmake2 man-pages
298     lfsmake2 glibc
299     lfsmake2 tzdata
300     lfsmake2 cleanup-toolchain          PASS=3
301     lfsmake2 zlib
302     lfsmake2 binutils
303     lfsmake2 gmp
304     lfsmake2 gmp-compat
305     lfsmake2 mpfr
306     lfsmake2 file
307     lfsmake2 gcc
308     lfsmake2 sed
309     lfsmake2 berkeley
310     lfsmake2 coreutils
311     lfsmake2 iana-etc
312     lfsmake2 m4
313     lfsmake2 bison
314     lfsmake2 ncurses
315     lfsmake2 procps
316     lfsmake2 libtool
317     lfsmake2 perl
318     lfsmake2 readline
319     lfsmake2 autoconf
320     lfsmake2 automake
321     lfsmake2 bash
322     lfsmake2 bzip2
323     lfsmake2 diffutils
324     lfsmake2 e2fsprogs
325     lfsmake2 ed
326     lfsmake2 findutils
327     lfsmake2 flex
328     lfsmake2 gawk
329     lfsmake2 gettext
330     lfsmake2 grep
331     lfsmake2 groff
332     lfsmake2 gzip
333     lfsmake2 inetutils
334     lfsmake2 iproute2
335     lfsmake2 kbd
336     lfsmake2 less
337     lfsmake2 make
338     lfsmake2 man
339     lfsmake2 mktemp
340     lfsmake2 module-init-tools
341     lfsmake2 net-tools
342     lfsmake2 patch
343     lfsmake2 psmisc
344     lfsmake2 shadow
345     lfsmake2 sysklogd
346     lfsmake2 sysvinit
347     lfsmake2 tar
348     lfsmake2 texinfo
349     lfsmake2 udev
350     lfsmake2 util-linux
351     lfsmake2 vim
352     lfsmake2 grub
353 }
354
355 buildipfire() {
356   LOGFILE="$BASEDIR/log/_build.ipfire.log"
357   export LOGFILE
358   ipfiremake configroot
359   ipfiremake backup
360   ipfiremake dhcp
361   ipfiremake dhcpcd
362   ipfiremake libusb
363   ipfiremake libpcap
364   ipfiremake ppp
365   ipfiremake pptp
366   ipfiremake unzip
367   ipfiremake which
368   ipfiremake xz
369   ipfiremake linux-firmware
370   ipfiremake zd1211-firmware
371   ipfiremake rpi-firmware
372   ipfiremake fw_ath9k_htc
373   ipfiremake u-boot
374
375   # The xen and PAE kernels are only available for x86
376   if [ "${MACHINE_TYPE}" != "arm" ]; then
377     ipfiremake linux2                   KCFG="-xen"
378 #    ipfiremake v4l-dvb                 KCFG="-xen"
379 #    ipfiremake mISDN                   KCFG="-xen"
380 #    ipfiremake dahdi                   KCFG="-xen" KMOD=1
381     ipfiremake cryptodev                KCFG="-xen"
382     ipfiremake compat-wireless          KCFG="-xen"
383 #    ipfiremake r8169                   KCFG="-xen"
384 #    ipfiremake r8168                   KCFG="-xen"
385 #    ipfiremake r8101                   KCFG="-xen"
386 #    ipfiremake e1000                   KCFG="-xen"
387 #    ipfiremake e1000e                  KCFG="-xen"
388 #    ipfiremake igb                     KCFG="-xen"
389
390     ipfiremake linux                    KCFG="-pae"
391 #    ipfiremake kvm-kmod                        KCFG="-pae"
392 #    ipfiremake v4l-dvb                 KCFG="-pae"
393     ipfiremake alsa                     KCFG="-pae" KMOD=1
394 #    ipfiremake mISDN                   KCFG="-pae"
395 #    ipfiremake dahdi                   KCFG="-pae" KMOD=1
396     ipfiremake cryptodev                KCFG="-pae"
397     ipfiremake compat-wireless          KCFG="-pae"
398 #    ipfiremake r8169                   KCFG="-pae"
399 #    ipfiremake r8168                   KCFG="-pae"
400 #    ipfiremake r8101                   KCFG="-pae"
401 #    ipfiremake e1000                   KCFG="-pae"
402 #    ipfiremake e1000e                  KCFG="-pae"
403 #    ipfiremake igb                     KCFG="-pae"
404
405     ipfiremake linux                    KCFG=""
406 #    ipfiremake kvm-kmod                        KCFG=""
407 #    ipfiremake v4l-dvb                 KCFG=""
408     ipfiremake alsa                     KCFG="" KMOD=1
409 #    ipfiremake mISDN                   KCFG=""
410 #    ipfiremake dahdi                   KCFG="" KMOD=1
411     ipfiremake cryptodev                KCFG=""
412     ipfiremake compat-wireless          KCFG=""
413 #    ipfiremake r8169                   KCFG=""
414 #    ipfiremake r8168                   KCFG=""
415 #    ipfiremake r8101                   KCFG=""
416 #    ipfiremake e1000                   KCFG=""
417 #    ipfiremake e1000e                  KCFG=""
418 #    ipfiremake igb                     KCFG=""
419
420   else
421     # arm-omap kernel build
422     ipfiremake linux                    KCFG="-rpi"
423 #    ipfiremake v4l-dvb                 KCFG="-rpi"
424 #    ipfiremake kvm-kmod                        KCFG="-rpi"
425 #    ipfiremake mISDN                   KCFG="-rpi"
426 #    ipfiremake dahdi                   KCFG="-rpi" KMOD=1
427     ipfiremake cryptodev                KCFG="-rpi"
428     ipfiremake compat-wireless          KCFG="-rpi"
429 #    ipfiremake r8169                   KCFG="-rpi"
430 #    ipfiremake r8168                   KCFG="-rpi"
431 #    ipfiremake r8101                   KCFG="-rpi"
432 #    ipfiremake e1000                   KCFG="-rpi"
433 #    ipfiremake e1000e                  KCFG="-rpi"
434 #    ipfiremake igb                     KCFG="-rpi"
435
436     ipfiremake linux                    KCFG="-omap"
437 #    ipfiremake v4l-dvb                 KCFG="-omap"
438 #    ipfiremake kvm-kmod                        KCFG="-omap"
439 #    ipfiremake mISDN                   KCFG="-omap"
440 #    ipfiremake dahdi                   KCFG="-omap" KMOD=1
441     ipfiremake cryptodev                KCFG="-omap"
442     ipfiremake compat-wireless          KCFG="-omap"
443 #    ipfiremake r8169                   KCFG="-omap"
444 #    ipfiremake r8168                   KCFG="-omap"
445 #    ipfiremake r8101                   KCFG="-omap"
446 #    ipfiremake e1000                   KCFG="-omap"
447 #    ipfiremake e1000e                  KCFG="-omap"
448 #    ipfiremake igb                     KCFG="-omap"
449
450     # arm-kirkwood kernel build
451     ipfiremake linux                    KCFG="-kirkwood"
452 #    ipfiremake v4l-dvb                 KCFG="-kirkwood"
453 #    ipfiremake kvm-kmod                        KCFG="-kirkwood"
454 #    ipfiremake mISDN                   KCFG="-kirkwood"
455 #    ipfiremake dahdi                   KCFG="-kirkwood" KMOD=1
456     ipfiremake cryptodev                KCFG="-kirkwood"
457     ipfiremake compat-wireless          KCFG="-kirkwood"
458 #    ipfiremake r8169                   KCFG="-kirkwood"
459 #    ipfiremake r8168                   KCFG="-kirkwood"
460 #    ipfiremake r8101                   KCFG="-kirkwood"
461 #    ipfiremake e1000                   KCFG="-kirkwood"
462 #    ipfiremake e1000e                  KCFG="-kirkwood"
463 #    ipfiremake igb                     KCFG="-kirkwood"
464   fi
465   ipfiremake pkg-config
466   ipfiremake linux-atm
467   ipfiremake cpio
468   ipfiremake dracut
469   ipfiremake expat
470   ipfiremake gdbm
471   ipfiremake pam
472   ipfiremake openssl
473   ipfiremake curl
474   ipfiremake tcl
475   ipfiremake sqlite
476   ipfiremake python
477   ipfiremake fireinfo
478   ipfiremake libnet
479   ipfiremake libnl
480   ipfiremake libidn
481   ipfiremake libjpeg
482   ipfiremake libpng
483   ipfiremake libtiff
484   ipfiremake libart
485   ipfiremake freetype
486   ipfiremake gd
487   ipfiremake popt
488   ipfiremake pcre
489   ipfiremake slang
490   ipfiremake newt
491   ipfiremake attr
492   ipfiremake acl
493   ipfiremake libcap
494   ipfiremake pciutils
495   ipfiremake usbutils
496   ipfiremake libxml2
497   ipfiremake libxslt
498   ipfiremake BerkeleyDB
499   ipfiremake mysql
500   ipfiremake cyrus-sasl
501   ipfiremake openldap
502   ipfiremake apache2
503   ipfiremake php
504   ipfiremake apache2                    PASS=C
505   ipfiremake arping
506   ipfiremake beep
507   ipfiremake bind
508   ipfiremake dvdrtools
509   ipfiremake dnsmasq
510   ipfiremake dosfstools
511   ipfiremake reiserfsprogs
512   ipfiremake xfsprogs
513   ipfiremake sysfsutils
514   ipfiremake fuse
515   ipfiremake ntfs-3g
516   ipfiremake ethtool
517   ipfiremake ez-ipupdate
518   ipfiremake fcron
519   ipfiremake perl-GD
520   ipfiremake GD-Graph
521   ipfiremake GD-TextUtil
522   ipfiremake gnupg
523   ipfiremake hdparm
524   ipfiremake sdparm
525   ipfiremake mtools
526   ipfiremake initscripts
527   ipfiremake whatmask
528   ipfiremake iptables
529   ipfiremake libupnp
530   ipfiremake ipaddr
531   ipfiremake iputils
532   ipfiremake l7-protocols
533   ipfiremake mISDNuser
534   ipfiremake capi4k-utils
535   ipfiremake hwdata
536   ipfiremake kudzu
537   ipfiremake logrotate
538   ipfiremake logwatch
539   ipfiremake misc-progs
540   ipfiremake nano
541   ipfiremake nasm
542   ipfiremake URI
543   ipfiremake HTML-Tagset
544   ipfiremake HTML-Parser
545   ipfiremake Compress-Zlib
546   ipfiremake Digest
547   ipfiremake Digest-SHA1
548   ipfiremake Digest-HMAC
549   ipfiremake libwww-perl
550   ipfiremake Net-DNS
551   ipfiremake Net-IPv4Addr
552   ipfiremake Net_SSLeay
553   ipfiremake IO-Stringy
554   ipfiremake Unix-Syslog
555   ipfiremake Mail-Tools
556   ipfiremake MIME-Tools
557   ipfiremake Net-Server
558   ipfiremake Convert-TNEF
559   ipfiremake Convert-UUlib
560   ipfiremake Archive-Tar
561   ipfiremake Archive-Zip
562   ipfiremake Text-Tabs+Wrap
563   ipfiremake Locale-Country
564   ipfiremake XML-Parser
565   ipfiremake Crypt-PasswdMD5
566   ipfiremake Net-Telnet
567   ipfiremake python-setuptools
568   ipfiremake python-clientform
569   ipfiremake python-mechanize
570   ipfiremake python-feedparser
571   ipfiremake python-rssdler
572   ipfiremake glib
573   ipfiremake GeoIP
574   ipfiremake fwhits
575   ipfiremake noip_updater
576   ipfiremake ntp
577   ipfiremake openssh
578   ipfiremake rrdtool
579   ipfiremake setserial
580   ipfiremake setup
581   ipfiremake libdnet
582   ipfiremake daq
583   ipfiremake snort
584   ipfiremake oinkmaster
585   ipfiremake squid
586   ipfiremake squidguard
587   ipfiremake calamaris
588   ipfiremake tcpdump
589   ipfiremake traceroute
590   ipfiremake vlan
591   ipfiremake wireless
592   ipfiremake pakfire
593   ipfiremake spandsp
594   ipfiremake lzo
595   ipfiremake openvpn
596   ipfiremake pammysql
597   ipfiremake cups
598   ipfiremake ghostscript
599   ipfiremake foomatic
600   ipfiremake hplip
601   ipfiremake samba
602   ipfiremake sudo
603   ipfiremake mc
604   ipfiremake wget
605   ipfiremake bridge-utils
606   ipfiremake screen
607   ipfiremake smartmontools
608   ipfiremake htop
609 #  ipfiremake postfix               # unknown system type linux 3.2.x
610   ipfiremake fetchmail
611   ipfiremake cyrus-imapd
612   ipfiremake openmailadmin
613   ipfiremake clamav
614   ipfiremake spamassassin
615   ipfiremake amavisd
616   ipfiremake alsa
617   ipfiremake mpfire
618   ipfiremake guardian
619   ipfiremake libid3tag
620   ipfiremake libmad
621   ipfiremake libogg
622   ipfiremake libvorbis
623   ipfiremake libdvbpsi
624   ipfiremake lame
625   ipfiremake sox
626   ipfiremake libshout
627   ipfiremake xvid
628   ipfiremake libmpeg2
629   ipfiremake cmake
630   ipfiremake gnump3d
631   ipfiremake libsigc++
632   ipfiremake libtorrent
633   ipfiremake rtorrent
634   ipfiremake ipfireseeder
635   ipfiremake rsync
636   ipfiremake tcpwrapper
637   ipfiremake libevent
638   ipfiremake libevent2
639   ipfiremake portmap
640   ipfiremake nfs
641   ipfiremake nmap
642   ipfiremake ncftp
643   ipfiremake etherwake
644   ipfiremake bwm-ng
645   ipfiremake tripwire
646   ipfiremake sysstat
647   ipfiremake vsftpd
648   ipfiremake strongswan
649   ipfiremake lsof
650   ipfiremake centerim
651   ipfiremake br2684ctl
652   ipfiremake pcmciautils
653   ipfiremake lm_sensors
654   ipfiremake liboping
655   ipfiremake collectd
656   ipfiremake teamspeak
657   ipfiremake elinks
658   ipfiremake igmpproxy
659   ipfiremake fbset
660   ipfiremake sdl
661   ipfiremake qemu
662   ipfiremake sane
663   ipfiremake netpbm
664   ipfiremake phpSANE
665   ipfiremake tunctl
666   ipfiremake nagios
667   ipfiremake nagios_nrpe
668   ipfiremake ebtables
669   ipfiremake fontconfig
670   ipfiremake freefont
671   ipfiremake directfb
672   ipfiremake dfb++
673   ipfiremake faad2
674   ipfiremake ffmpeg
675   ipfiremake videolan
676   ipfiremake vdr
677   ipfiremake w_scan
678   ipfiremake icecast
679   ipfiremake icegenerator
680   ipfiremake mpd
681   ipfiremake libmpdclient
682   ipfiremake mpc
683   ipfiremake git
684   ipfiremake squidclamav
685   ipfiremake bc
686   ipfiremake vnstat
687   ipfiremake vnstati
688   ipfiremake iw
689   ipfiremake wpa_supplicant
690   ipfiremake hostapd
691   ipfiremake urlgrabber
692   ipfiremake syslinux
693   ipfiremake tftpd
694   ipfiremake cpufrequtils
695   ipfiremake dbus
696   ipfiremake bluetooth
697   ipfiremake gutenprint
698   ipfiremake apcupsd
699   ipfiremake iperf
700   ipfiremake netcat
701   ipfiremake 7zip
702   ipfiremake lynis
703   ipfiremake splix
704   ipfiremake streamripper
705   ipfiremake sshfs
706   ipfiremake taglib
707   ipfiremake mediatomb
708   ipfiremake sslh
709   ipfiremake perl-gettext
710   ipfiremake vdradmin
711   ipfiremake miau
712   ipfiremake netsnmpd
713   ipfiremake perl-DBI
714   ipfiremake perl-DBD-mysql
715   ipfiremake cacti
716   ipfiremake icecc
717   ipfiremake openvmtools
718   ipfiremake nagiosql
719   ipfiremake iftop
720   ipfiremake motion
721   ipfiremake joe
722   ipfiremake nut
723   ipfiremake watchdog
724   ipfiremake libpri
725 #  ipfiremake dahdi               # update needed for 3.2.x
726 #  ipfiremake asterisk
727 #  ipfiremake lcr
728   ipfiremake usb_modeswitch
729   ipfiremake usb_modeswitch_data
730   ipfiremake zerofree
731   ipfiremake mdadm
732   ipfiremake eject
733   ipfiremake pound
734   ipfiremake minicom
735   ipfiremake ddrescue
736   ipfiremake imspector
737 #  ipfiremake miniupnpd              # will not build
738   ipfiremake client175
739   ipfiremake powertop
740   ipfiremake parted
741   ipfiremake swig
742   ipfiremake python-m2crypto
743   ipfiremake wireless-regdb
744   ipfiremake crda
745   ipfiremake libsolv
746   ipfiremake python-distutils-extra
747   ipfiremake python-lzma
748   ipfiremake python-progressbar
749   ipfiremake python-xattr
750   ipfiremake intltool
751   ipfiremake pakfire3-deps
752   ipfiremake transmission
753   ipfiremake dpfhack
754   ipfiremake lcd4linux
755   ipfiremake mtr
756   ipfiremake tcpick
757   echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
758   cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
759   echo >> $BASEDIR/build/var/ipfire/firebuild
760   git log -1 >> $BASEDIR/build/var/ipfire/firebuild
761   echo >> $BASEDIR/build/var/ipfire/firebuild
762   git status >> $BASEDIR/build/var/ipfire/firebuild
763   echo >> $BASEDIR/build/var/ipfire/firebuild
764   cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
765   echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
766   if [ "$GIT_BRANCH" = "master" -o "$GIT_BRANCH" = "next" ]; then
767         echo "$NAME $VERSION ($MACHINE) - Development Build: $GIT_LASTCOMMIT" > $BASEDIR/build/etc/system-release
768   else
769         echo "$NAME $VERSION ($MACHINE) - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
770   fi
771 }
772
773 buildinstaller() {
774   # Run installer scripts one by one
775   LOGFILE="$BASEDIR/log/_build.installer.log"
776   export LOGFILE
777   ipfiremake as86
778   ipfiremake mbr
779   ipfiremake memtest
780   ipfiremake installer
781   installmake strip
782   ipfiremake initrd
783 }
784
785 buildpackages() {
786   LOGFILE="$BASEDIR/log/_build.packages.log"
787   export LOGFILE
788   echo "... see detailed log in _build.*.log files" >> $LOGFILE
789
790   
791   # Generating list of packages used
792   echo -n "Generating packages list from logs" | tee -a $LOGFILE
793   rm -f $BASEDIR/doc/packages-list
794   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
795         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
796                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
797         fi
798   done
799   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
800   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
801         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
802   rm -f $BASEDIR/doc/packages-list
803   # packages-list.txt is ready to be displayed for wiki page
804   beautify message DONE
805   
806   # Update changelog
807   cd $BASEDIR
808   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
809   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
810   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
811
812   # Create images for install
813   ipfiremake cdrom
814
815   # Check if there is a loop device for building in virtual environments
816   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
817         if [ "${MACHINE_TYPE}" != "arm" ]; then
818                 ipfiremake usb-stick
819         fi
820         ipfiremake flash-images
821   fi
822
823   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
824
825   ipfirepackages
826
827   # Check if there is a loop device for building in virtual environments
828   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
829         cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
830         cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
831         ipfiremake xen-image
832         rm -rf $LFS/install/packages/linux-xen-*.ipfire
833         rm -rf $LFS/install/packages/meta-linux-xen
834   fi
835   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
836
837   cd $BASEDIR
838   for i in `ls *.bz2 *.img.gz *.iso`; do
839         md5sum $i > $i.md5
840   done
841   cd $PWD
842
843   # Cleanup
844   stdumount
845   rm -rf $BASEDIR/build/tmp/*
846
847   # Generating total list of files
848   echo -n "Generating files list from logs" | tee -a $LOGFILE
849   rm -f $BASEDIR/log/FILES
850   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
851         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
852                 echo "##" >>$BASEDIR/log/FILES
853                 echo "## `basename $i`" >>$BASEDIR/log/FILES
854                 echo "##" >>$BASEDIR/log/FILES
855                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
856         fi
857   done
858   beautify message DONE
859
860   cd $PWD
861 }
862
863 ipfirepackages() {
864         ipfiremake core-updates
865
866         local i
867         for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
868                 i=$(basename ${i})
869                 if [ -e $BASEDIR/lfs/$i ]; then
870                         ipfiredist $i
871                 else
872                         echo -n $i
873                         beautify message SKIP
874                 fi
875         done
876   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
877   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
878   rm -rf  $BASEDIR/build/install/packages/*
879 }
880
881 # See what we're supposed to do
882 case "$1" in 
883 build)
884         clear
885         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
886         #only restore on a clean disk
887         if [ ! -f log/cleanup-toolchain-2-tools ]; then
888                 if [ ! -n "$PACKAGE" ]; then
889                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
890                         prepareenv
891                         buildtoolchain
892                 else
893                         PACKAGENAME=${PACKAGE%.tar.gz}
894                         beautify build_stage "Packaged toolchain compilation"
895                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
896                                 tar zxf $PACKAGE
897                                 prepareenv
898                         else
899                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
900                         fi
901                 fi
902         else
903                 echo -n "Using installed toolchain" | tee -a $LOGFILE
904                 beautify message SKIP
905                 prepareenv
906         fi
907
908         beautify build_start
909         beautify build_stage "Building LFS"
910         buildbase
911
912         beautify build_stage "Building IPFire"
913         buildipfire
914
915         beautify build_stage "Building installer"
916         buildinstaller
917
918         beautify build_stage "Building packages"
919         buildpackages
920         
921         beautify build_stage "Checking Logfiles for new Files"
922
923         cd $BASEDIR
924         tools/checknewlog.pl
925         cd $PWD
926
927         beautify build_end
928         ;;
929 shell)
930         # enter a shell inside LFS chroot
931         # may be used to changed kernel settings
932         prepareenv
933         entershell
934         ;;
935 clean)
936         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
937         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
938                 $LOSETUP -d $i 2>/dev/null
939         done
940         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
941                 umount $i
942         done
943         stdumount
944         for i in `seq 0 7`; do
945             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
946                 umount /dev/loop${i}     2>/dev/null;
947                 losetup -d /dev/loop${i} 2>/dev/null;
948             fi;
949         done
950         rm -rf $BASEDIR/build
951         rm -rf $BASEDIR/cdrom
952         rm -rf $BASEDIR/packages
953         rm -rf $BASEDIR/log
954         if [ -h /tools ]; then
955                 rm -f /tools
956         fi
957         rm -f $BASEDIR/ipfire-*
958         beautify message DONE
959         ;;
960 downloadsrc)
961         if [ ! -d $BASEDIR/cache ]; then
962                 mkdir $BASEDIR/cache
963         fi
964         mkdir -p $BASEDIR/log
965         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
966         FINISHED=0
967         cd $BASEDIR/lfs
968         for c in `seq $MAX_RETRIES`; do
969                 if (( FINISHED==1 )); then 
970                         break
971                 fi
972                 FINISHED=1
973                 cd $BASEDIR/lfs
974                 for i in *; do
975                         if [ -f "$i" -a "$i" != "Config" ]; then
976                                 lfsmakecommoncheck ${i} || continue
977
978                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
979                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
980                                 if [ $? -ne 0 ]; then
981                                         beautify message FAIL
982                                         FINISHED=0
983                                 else
984                                         if [ $c -eq 1 ]; then
985                                         beautify message DONE
986                                         fi
987                                 fi
988                         fi
989                 done
990         done
991         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
992         ERROR=0
993         for i in *; do
994                 if [ -f "$i" -a "$i" != "Config" ]; then
995                         lfsmakecommoncheck ${i} > /dev/null || continue
996                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
997                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
998                         if [ $? -ne 0 ]; then
999                                 echo -ne "MD5 difference in lfs/$i"
1000                                 beautify message FAIL
1001                                 ERROR=1
1002                         fi
1003                 fi
1004         done
1005         if [ $ERROR -eq 0 ]; then
1006                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1007                 beautify message DONE
1008         else
1009                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1010                 beautify message FAIL
1011         fi
1012         cd - >/dev/null 2>&1
1013         ;;
1014 toolchain)
1015         clear
1016         prepareenv
1017         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1018         buildtoolchain
1019         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1020         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1021         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1022                 build/tools build/bin/sh log >> $LOGFILE
1023         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1024                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1025         stdumount
1026         ;;
1027 gettoolchain)
1028         # arbitrary name to be updated in case of new toolchain package upload
1029         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1030         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1031                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1032                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1033                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1034                 cd $BASEDIR/cache/toolchains
1035                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1036                 if [ $? -ne 0 ]; then
1037                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1038                 else
1039                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1040                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1041                         else
1042                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1043                         fi
1044                 fi
1045         else
1046                 echo "Toolchain is already downloaded. Exiting..."
1047         fi
1048         ;;
1049 othersrc)
1050         prepareenv
1051         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1052         chroot $LFS /tools/bin/env -i   HOME=/root \
1053         TERM=$TERM PS1='\u:\w\$ ' \
1054         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1055         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1056         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1057         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1058         if [ $? -eq "0" ]; then
1059                 beautify message DONE
1060         else
1061                 beautify message FAIL
1062         fi
1063         stdumount
1064         ;;
1065 uploadsrc)
1066         PWD=`pwd`
1067         if [ -z $IPFIRE_USER ]; then
1068                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1069                 beautify message FAIL
1070                 exit 1
1071         fi
1072
1073         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1074         REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1075
1076         cd $BASEDIR/cache/
1077         for file in $(ls -1 --ignore=toolchains); do
1078                 grep -q "$file" <<<$REMOTE_FILES && continue
1079                 NEW_FILES="$NEW_FILES $file"
1080         done
1081         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1082         cd $BASEDIR
1083         cd $PWD
1084         exit 0
1085         ;;
1086 lang)
1087         update_langs
1088         ;;
1089 *)
1090         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1091         cat doc/make.sh-usage
1092         ;;
1093 esac