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