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