vdr: fix old config import.
[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="68"                                                       # Core Level (Filename)
29 PAKFIRE_CORE="68"                                               # 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 libjpeg
466   ipfiremake libexif
467   ipfiremake libpng
468   ipfiremake libtiff
469   ipfiremake libart
470   ipfiremake freetype
471   ipfiremake gd
472   ipfiremake popt
473   ipfiremake pcre
474   ipfiremake slang
475   ipfiremake newt
476   ipfiremake attr
477   ipfiremake acl
478   ipfiremake libcap
479   ipfiremake pciutils
480   ipfiremake usbutils
481   ipfiremake libxml2
482   ipfiremake libxslt
483   ipfiremake BerkeleyDB
484   ipfiremake mysql
485   ipfiremake cyrus-sasl
486   ipfiremake openldap
487   ipfiremake apache2
488   ipfiremake php
489   ipfiremake apache2                    PASS=C
490   ipfiremake arping
491   ipfiremake beep
492   ipfiremake dvdrtools
493   ipfiremake dnsmasq
494   ipfiremake dosfstools
495   ipfiremake reiserfsprogs
496   ipfiremake xfsprogs
497   ipfiremake sysfsutils
498   ipfiremake fuse
499   ipfiremake ntfs-3g
500   ipfiremake ethtool
501   ipfiremake ez-ipupdate
502   ipfiremake fcron
503   ipfiremake perl-GD
504   ipfiremake GD-Graph
505   ipfiremake GD-TextUtil
506   ipfiremake gnupg
507   ipfiremake hdparm
508   ipfiremake sdparm
509   ipfiremake mtools
510   ipfiremake initscripts
511   ipfiremake whatmask
512   ipfiremake libmnl
513   ipfiremake iptables
514   ipfiremake conntrack-tools
515   ipfiremake libupnp
516   ipfiremake ipaddr
517   ipfiremake iputils
518   ipfiremake l7-protocols
519   ipfiremake mISDNuser
520   ipfiremake capi4k-utils
521   ipfiremake hwdata
522   ipfiremake logrotate
523   ipfiremake logwatch
524   ipfiremake misc-progs
525   ipfiremake nano
526   ipfiremake nasm
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   echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
769   cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
770   echo >> $BASEDIR/build/var/ipfire/firebuild
771   git log -1 >> $BASEDIR/build/var/ipfire/firebuild
772   echo >> $BASEDIR/build/var/ipfire/firebuild
773   git status >> $BASEDIR/build/var/ipfire/firebuild
774   echo >> $BASEDIR/build/var/ipfire/firebuild
775   cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
776   echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
777   if [ "$(git status -s | wc -l)" == "0" ]; then
778         GIT_STATUS=""
779   else
780         GIT_STATUS="-dirty"
781   fi
782   case "$GIT_BRANCH" in
783         core*|beta?|rc?)
784             echo "$NAME $VERSION ($MACHINE) - $GIT_BRANCH$GIT_STATUS" > $BASEDIR/build/etc/system-release
785             ;;
786         *)
787             echo "$NAME $VERSION ($MACHINE) - Development Build: $GIT_BRANCH/$GIT_LASTCOMMIT$GIT_STATUS" > $BASEDIR/build/etc/system-release
788             ;;
789   esac
790 }
791
792 buildinstaller() {
793   # Run installer scripts one by one
794   LOGFILE="$BASEDIR/log/_build.installer.log"
795   export LOGFILE
796   ipfiremake as86
797   ipfiremake mbr
798   ipfiremake memtest
799   ipfiremake installer
800   installmake strip
801   ipfiremake initrd
802 }
803
804 buildpackages() {
805   LOGFILE="$BASEDIR/log/_build.packages.log"
806   export LOGFILE
807   echo "... see detailed log in _build.*.log files" >> $LOGFILE
808
809   
810   # Generating list of packages used
811   echo -n "Generating packages list from logs" | tee -a $LOGFILE
812   rm -f $BASEDIR/doc/packages-list
813   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
814         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
815                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
816         fi
817   done
818   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
819   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
820         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
821   rm -f $BASEDIR/doc/packages-list
822   # packages-list.txt is ready to be displayed for wiki page
823   beautify message DONE
824   
825   # Update changelog
826   cd $BASEDIR
827   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
828   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
829   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
830
831   # Create images for install
832   ipfiremake cdrom
833
834   # Check if there is a loop device for building in virtual environments
835   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
836         if [ "${MACHINE_TYPE}" != "arm" ]; then
837                 ipfiremake usb-stick
838         fi
839         ipfiremake flash-images
840   fi
841
842   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
843
844   ipfirepackages
845
846   # Check if there is a loop device for building in virtual environments
847   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
848         cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
849         cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
850         cp -f $BASEDIR/packages/linux-pae-*.ipfire $LFS/install/packages/
851         cp -f $BASEDIR/packages/meta-linux-pae $LFS/install/packages/
852         ipfiremake xen-image
853         rm -rf $LFS/install/packages/linux-xen-*.ipfire
854         rm -rf $LFS/install/packages/meta-linux-xen
855   fi
856   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
857
858   cd $BASEDIR
859   for i in `ls *.bz2 *.img.gz *.iso`; do
860         md5sum $i > $i.md5
861   done
862   cd $PWD
863
864   # Cleanup
865   stdumount
866   rm -rf $BASEDIR/build/tmp/*
867
868   # Generating total list of files
869   echo -n "Generating files list from logs" | tee -a $LOGFILE
870   rm -f $BASEDIR/log/FILES
871   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
872         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
873                 echo "##" >>$BASEDIR/log/FILES
874                 echo "## `basename $i`" >>$BASEDIR/log/FILES
875                 echo "##" >>$BASEDIR/log/FILES
876                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
877         fi
878   done
879   beautify message DONE
880
881   cd $PWD
882 }
883
884 ipfirepackages() {
885         ipfiremake core-updates
886
887         local i
888         for i in $(find $BASEDIR/config/rootfiles/packages{/${MACHINE},} -maxdepth 1 -type f); do
889                 i=$(basename ${i})
890                 if [ -e $BASEDIR/lfs/$i ]; then
891                         ipfiredist $i
892                 else
893                         echo -n $i
894                         beautify message SKIP
895                 fi
896         done
897   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
898   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
899   rm -rf  $BASEDIR/build/install/packages/*
900 }
901
902 # See what we're supposed to do
903 case "$1" in 
904 build)
905         clear
906         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
907         #only restore on a clean disk
908         if [ ! -f log/cleanup-toolchain-2-tools ]; then
909                 if [ ! -n "$PACKAGE" ]; then
910                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
911                         prepareenv
912                         buildtoolchain
913                 else
914                         PACKAGENAME=${PACKAGE%.tar.gz}
915                         beautify build_stage "Packaged toolchain compilation"
916                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
917                                 tar zxf $PACKAGE
918                                 prepareenv
919                         else
920                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
921                         fi
922                 fi
923         else
924                 echo -n "Using installed toolchain" | tee -a $LOGFILE
925                 beautify message SKIP
926                 prepareenv
927         fi
928
929         beautify build_start
930         beautify build_stage "Building LFS"
931         buildbase
932
933         beautify build_stage "Building IPFire"
934         buildipfire
935
936         beautify build_stage "Building installer"
937         buildinstaller
938
939         beautify build_stage "Building packages"
940         buildpackages
941         
942         beautify build_stage "Checking Logfiles for new Files"
943
944         cd $BASEDIR
945         tools/checknewlog.pl
946         cd $PWD
947
948         beautify build_end
949         ;;
950 shell)
951         # enter a shell inside LFS chroot
952         # may be used to changed kernel settings
953         prepareenv
954         entershell
955         ;;
956 clean)
957         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
958         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
959                 $LOSETUP -d $i 2>/dev/null
960         done
961         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
962                 umount $i
963         done
964         stdumount
965         for i in `seq 0 7`; do
966             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
967                 umount /dev/loop${i}     2>/dev/null;
968                 losetup -d /dev/loop${i} 2>/dev/null;
969             fi;
970         done
971         rm -rf $BASEDIR/build
972         rm -rf $BASEDIR/cdrom
973         rm -rf $BASEDIR/packages
974         rm -rf $BASEDIR/log
975         if [ -h /tools ]; then
976                 rm -f /tools
977         fi
978         rm -f $BASEDIR/ipfire-*
979         beautify message DONE
980         ;;
981 downloadsrc)
982         if [ ! -d $BASEDIR/cache ]; then
983                 mkdir $BASEDIR/cache
984         fi
985         mkdir -p $BASEDIR/log
986         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
987         FINISHED=0
988         cd $BASEDIR/lfs
989         for c in `seq $MAX_RETRIES`; do
990                 if (( FINISHED==1 )); then 
991                         break
992                 fi
993                 FINISHED=1
994                 cd $BASEDIR/lfs
995                 for i in *; do
996                         if [ -f "$i" -a "$i" != "Config" ]; then
997                                 lfsmakecommoncheck ${i} || continue
998
999                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1000                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1001                                 if [ $? -ne 0 ]; then
1002                                         beautify message FAIL
1003                                         FINISHED=0
1004                                 else
1005                                         if [ $c -eq 1 ]; then
1006                                         beautify message DONE
1007                                         fi
1008                                 fi
1009                         fi
1010                 done
1011         done
1012         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1013         ERROR=0
1014         for i in *; do
1015                 if [ -f "$i" -a "$i" != "Config" ]; then
1016                         lfsmakecommoncheck ${i} > /dev/null || continue
1017                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1018                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1019                         if [ $? -ne 0 ]; then
1020                                 echo -ne "MD5 difference in lfs/$i"
1021                                 beautify message FAIL
1022                                 ERROR=1
1023                         fi
1024                 fi
1025         done
1026         if [ $ERROR -eq 0 ]; then
1027                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1028                 beautify message DONE
1029         else
1030                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1031                 beautify message FAIL
1032         fi
1033         cd - >/dev/null 2>&1
1034         ;;
1035 toolchain)
1036         clear
1037         prepareenv
1038         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1039         buildtoolchain
1040         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1041         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1042         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1043                 build/tools build/bin/sh log >> $LOGFILE
1044         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1045                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1046         stdumount
1047         ;;
1048 gettoolchain)
1049         # arbitrary name to be updated in case of new toolchain package upload
1050         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1051         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1052                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1053                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1054                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1055                 cd $BASEDIR/cache/toolchains
1056                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1057                 if [ $? -ne 0 ]; then
1058                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1059                 else
1060                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1061                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1062                         else
1063                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1064                         fi
1065                 fi
1066         else
1067                 echo "Toolchain is already downloaded. Exiting..."
1068         fi
1069         ;;
1070 othersrc)
1071         prepareenv
1072         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1073         chroot $LFS /tools/bin/env -i   HOME=/root \
1074         TERM=$TERM PS1='\u:\w\$ ' \
1075         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1076         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1077         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1078         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1079         if [ $? -eq "0" ]; then
1080                 beautify message DONE
1081         else
1082                 beautify message FAIL
1083         fi
1084         stdumount
1085         ;;
1086 uploadsrc)
1087         PWD=`pwd`
1088         if [ -z $IPFIRE_USER ]; then
1089                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1090                 beautify message FAIL
1091                 exit 1
1092         fi
1093
1094         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1095         REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1096
1097         cd $BASEDIR/cache/
1098         for file in $(ls -1 --ignore=toolchains); do
1099                 grep -q "$file" <<<$REMOTE_FILES && continue
1100                 NEW_FILES="$NEW_FILES $file"
1101         done
1102         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1103         cd $BASEDIR
1104         cd $PWD
1105         exit 0
1106         ;;
1107 lang)
1108         update_langs
1109         ;;
1110 *)
1111         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1112         cat doc/make.sh-usage
1113         ;;
1114 esac