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