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