core65: close core65.
[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="65"                                                       # Core Level (Filename)
29 PAKFIRE_CORE="65"                                               # 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 bind
377   ipfiremake dhcp
378   ipfiremake dhcpcd
379   ipfiremake libusb
380   ipfiremake libpcap
381   ipfiremake ppp
382   ipfiremake pptp
383   ipfiremake unzip
384   ipfiremake which
385   ipfiremake xz
386   ipfiremake linux-firmware
387   ipfiremake zd1211-firmware
388   ipfiremake fw_ath9k_htc
389   ipfiremake u-boot
390
391   # The xen and PAE kernels are only available for x86
392   if [ "${MACHINE_TYPE}" != "arm" ]; then
393     ipfiremake linux                    KCFG="-xen"
394     ipfiremake kqemu                    KCFG="-xen"
395     ipfiremake v4l-dvb                  KCFG="-xen"
396     ipfiremake madwifi                  KCFG="-xen"
397     ipfiremake mISDN                    KCFG="-xen"
398     ipfiremake dahdi                    KCFG="-xen" KMOD=1
399     ipfiremake cryptodev                KCFG="-xen"
400     ipfiremake compat-wireless          KCFG="-xen"
401     ipfiremake r8169                    KCFG="-xen"
402     ipfiremake r8168                    KCFG="-xen"
403     ipfiremake r8101                    KCFG="-xen"
404     ipfiremake e1000                    KCFG="-xen"
405     ipfiremake e1000e                   KCFG="-xen"
406     ipfiremake igb                      KCFG="-xen"
407     ipfiremake linux                    KCFG="-pae"
408     ipfiremake kqemu                    KCFG="-pae"
409     ipfiremake kvm-kmod                 KCFG="-pae"
410     ipfiremake v4l-dvb                  KCFG="-pae"
411     ipfiremake madwifi                  KCFG="-pae"
412     ipfiremake alsa                     KCFG="-pae" KMOD=1
413     ipfiremake mISDN                    KCFG="-pae"
414     ipfiremake dahdi                    KCFG="-pae" KMOD=1
415     ipfiremake cryptodev                KCFG="-pae"
416     ipfiremake compat-wireless          KCFG="-pae"
417 #    ipfiremake r8169                   KCFG="-pae"
418 #    ipfiremake r8168                   KCFG="-pae"
419 #    ipfiremake r8101                   KCFG="-pae"
420     ipfiremake e1000                    KCFG="-pae"
421     ipfiremake e1000e                   KCFG="-pae"
422     ipfiremake igb                      KCFG="-pae"
423     ipfiremake linux                    KCFG=""
424     ipfiremake v4l-dvb                  KCFG=""
425     ipfiremake kqemu                    KCFG=""
426     ipfiremake kvm-kmod                 KCFG=""
427     ipfiremake madwifi                  KCFG=""
428     ipfiremake alsa                     KCFG="" KMOD=1
429     ipfiremake mISDN                    KCFG=""
430     ipfiremake dahdi                    KCFG="" KMOD=1
431     ipfiremake cryptodev                KCFG=""
432     ipfiremake compat-wireless          KCFG=""
433 #    ipfiremake r8169                   KCFG=""
434 #    ipfiremake r8168                   KCFG=""
435 #    ipfiremake r8101                   KCFG=""
436     ipfiremake e1000                    KCFG=""
437     ipfiremake e1000e                   KCFG=""
438     ipfiremake igb                      KCFG=""
439   else
440     # arm-versatile kernel build
441     ipfiremake linux                    KCFG="-versatile"
442     ipfiremake v4l-dvb                  KCFG="-versatile"
443     ipfiremake kqemu                    KCFG="-versatile"
444     ipfiremake kvm-kmod                 KCFG="-versatile"
445     ipfiremake madwifi                  KCFG="-versatile"
446     ipfiremake mISDN                    KCFG="-versatile"
447     ipfiremake dahdi                    KCFG="-versatile" KMOD=1
448     ipfiremake cryptodev                KCFG="-versatile"
449     ipfiremake compat-wireless          KCFG="-versatile"
450 #  ipfiremake r8169                     KCFG="-versatile"
451 #  ipfiremake r8168                     KCFG="-versatile"
452 #  ipfiremake r8101                     KCFG="-versatile"
453     ipfiremake e1000                    KCFG="-versatile"
454     ipfiremake e1000e                   KCFG="-versatile"
455     ipfiremake igb                      KCFG="-versatile"
456     # arm-kirkwood kernel build
457     ipfiremake linux                    KCFG="-kirkwood"
458     ipfiremake v4l-dvb                  KCFG="-kirkwood"
459     ipfiremake kqemu                    KCFG="-kirkwood"
460     ipfiremake kvm-kmod                 KCFG="-kirkwood"
461     ipfiremake madwifi                  KCFG="-kirkwood"
462     ipfiremake mISDN                    KCFG="-kirkwood"
463     ipfiremake dahdi                    KCFG="-kirkwood" KMOD=1
464     ipfiremake cryptodev                KCFG="-kirkwood"
465     ipfiremake compat-wireless          KCFG="-kirkwood"
466 #  ipfiremake r8169                     KCFG="-kirkwood"
467 #  ipfiremake r8168                     KCFG="-kirkwood"
468 #  ipfiremake r8101                     KCFG="-kirkwood"
469     ipfiremake e1000                    KCFG="-kirkwood"
470     ipfiremake e1000e                   KCFG="-kirkwood"
471     ipfiremake igb                      KCFG="-kirkwood"
472   fi
473   ipfiremake pkg-config
474   ipfiremake linux-atm
475   ipfiremake cpio
476   ipfiremake dracut
477   ipfiremake expat
478   ipfiremake gdbm
479   ipfiremake gmp
480   ipfiremake pam
481   ipfiremake openssl
482   ipfiremake curl
483   ipfiremake tcl
484   ipfiremake sqlite
485   ipfiremake python
486   ipfiremake fireinfo
487   ipfiremake libnet
488   ipfiremake libnl
489   ipfiremake libidn
490   ipfiremake libjpeg
491   ipfiremake libexif
492   ipfiremake libpng
493   ipfiremake libtiff
494   ipfiremake libart
495   ipfiremake freetype
496   ipfiremake gd
497   ipfiremake popt
498   ipfiremake pcre
499   ipfiremake slang
500   ipfiremake newt
501   ipfiremake attr
502   ipfiremake acl
503   ipfiremake libcap
504   ipfiremake pciutils
505   ipfiremake usbutils
506   ipfiremake libxml2
507   ipfiremake libxslt
508   ipfiremake BerkeleyDB
509   ipfiremake mysql
510   ipfiremake cyrus-sasl
511   ipfiremake openldap
512   ipfiremake apache2
513   ipfiremake php
514   ipfiremake apache2                    PASS=C
515   ipfiremake arping
516   ipfiremake beep
517   ipfiremake dvdrtools
518   ipfiremake dnsmasq
519   ipfiremake dosfstools
520   ipfiremake reiserfsprogs
521   ipfiremake xfsprogs
522   ipfiremake sysfsutils
523   ipfiremake fuse
524   ipfiremake ntfs-3g
525   ipfiremake ethtool
526   ipfiremake ez-ipupdate
527   ipfiremake fcron
528   ipfiremake perl-GD
529   ipfiremake GD-Graph
530   ipfiremake GD-TextUtil
531   ipfiremake gnupg
532   ipfiremake hdparm
533   ipfiremake sdparm
534   ipfiremake mtools
535   ipfiremake initscripts
536   ipfiremake whatmask
537   ipfiremake iptables
538   ipfiremake libupnp
539   ipfiremake ipaddr
540   ipfiremake iptstate
541   ipfiremake iputils
542   ipfiremake l7-protocols
543   ipfiremake mISDNuser
544   ipfiremake capi4k-utils
545   ipfiremake hwdata
546   ipfiremake kudzu
547   ipfiremake logrotate
548   ipfiremake logwatch
549   ipfiremake misc-progs
550   ipfiremake nano
551   ipfiremake nasm
552   ipfiremake URI
553   ipfiremake HTML-Tagset
554   ipfiremake HTML-Parser
555   ipfiremake Compress-Zlib
556   ipfiremake Digest
557   ipfiremake Digest-SHA1
558   ipfiremake Digest-HMAC
559   ipfiremake libwww-perl
560   ipfiremake Net-DNS
561   ipfiremake Net-IPv4Addr
562   ipfiremake Net_SSLeay
563   ipfiremake IO-Stringy
564   ipfiremake Unix-Syslog
565   ipfiremake Mail-Tools
566   ipfiremake MIME-Tools
567   ipfiremake Net-Server
568   ipfiremake Convert-TNEF
569   ipfiremake Convert-UUlib
570   ipfiremake Archive-Tar
571   ipfiremake Archive-Zip
572   ipfiremake Text-Tabs+Wrap
573   ipfiremake Locale-Country
574   ipfiremake XML-Parser
575   ipfiremake Crypt-PasswdMD5
576   ipfiremake Net-Telnet
577   ipfiremake python-setuptools
578   ipfiremake python-clientform
579   ipfiremake python-mechanize
580   ipfiremake python-feedparser
581   ipfiremake python-rssdler
582   ipfiremake glib
583   ipfiremake GeoIP
584   ipfiremake fwhits
585   ipfiremake noip_updater
586   ipfiremake ntp
587   ipfiremake openssh
588   ipfiremake rrdtool
589   ipfiremake setserial
590   ipfiremake setup
591   ipfiremake libdnet
592   ipfiremake daq
593   ipfiremake snort
594   ipfiremake oinkmaster
595   ipfiremake squid
596   ipfiremake squidguard
597   ipfiremake calamaris
598   ipfiremake tcpdump
599   ipfiremake traceroute
600   ipfiremake vlan
601   ipfiremake wireless
602   ipfiremake libsafe
603   ipfiremake pakfire
604   ipfiremake spandsp
605   ipfiremake lzo
606   ipfiremake openvpn
607   ipfiremake pammysql
608   ipfiremake cups
609   ipfiremake ghostscript
610   ipfiremake foomatic
611   ipfiremake hplip
612   ipfiremake samba
613   ipfiremake sudo
614   ipfiremake mc
615   ipfiremake wget
616   ipfiremake bridge-utils
617   ipfiremake screen
618   ipfiremake hddtemp
619   ipfiremake smartmontools
620   ipfiremake htop
621   ipfiremake postfix
622   ipfiremake fetchmail
623   ipfiremake cyrus-imapd
624   ipfiremake openmailadmin
625   ipfiremake clamav
626   ipfiremake spamassassin
627   ipfiremake amavisd
628   ipfiremake alsa
629   ipfiremake mpfire
630   ipfiremake guardian
631   ipfiremake libid3tag
632   ipfiremake libmad
633   ipfiremake libogg
634   ipfiremake libvorbis
635   ipfiremake libdvbpsi
636   ipfiremake flac
637   ipfiremake lame
638   ipfiremake sox
639   ipfiremake libshout
640   ipfiremake xvid
641   ipfiremake libmpeg2
642   ipfiremake cmake
643   ipfiremake gnump3d
644   ipfiremake libsigc++
645   ipfiremake applejuice
646   ipfiremake libtorrent
647   ipfiremake rtorrent
648   ipfiremake ipfireseeder
649   ipfiremake rsync
650   ipfiremake tcpwrapper
651   ipfiremake libevent
652   ipfiremake libevent2
653   ipfiremake portmap
654   ipfiremake nfs
655   ipfiremake nmap
656   ipfiremake ncftp
657   ipfiremake etherwake
658   ipfiremake bwm-ng
659   ipfiremake tripwire
660   ipfiremake sysstat
661   ipfiremake vsftpd
662   ipfiremake strongswan
663   ipfiremake lsof
664   ipfiremake centerim
665   ipfiremake br2684ctl
666   ipfiremake pcmciautils
667   ipfiremake lm_sensors
668   ipfiremake liboping
669   ipfiremake collectd
670   ipfiremake teamspeak
671   ipfiremake elinks
672   ipfiremake igmpproxy
673   ipfiremake fbset
674   ipfiremake sdl
675   ipfiremake qemu
676   ipfiremake qemu-kqemu
677   ipfiremake sane
678   ipfiremake netpbm
679   ipfiremake phpSANE
680   ipfiremake tunctl
681   ipfiremake nagios
682   ipfiremake nagios_nrpe
683   ipfiremake ebtables
684   ipfiremake fontconfig
685   ipfiremake freefont
686   ipfiremake directfb
687   ipfiremake dfb++
688   ipfiremake faad2
689   ipfiremake ffmpeg
690   ipfiremake videolan
691   ipfiremake vdr
692   ipfiremake w_scan
693   ipfiremake icecast
694   ipfiremake icegenerator
695   ipfiremake mpd
696   ipfiremake libmpdclient
697   ipfiremake mpc
698   ipfiremake git
699   ipfiremake squidclamav
700   ipfiremake bc
701   ipfiremake vnstat
702   ipfiremake vnstati
703   ipfiremake iw
704   ipfiremake wpa_supplicant
705   ipfiremake hostapd
706   ipfiremake urlgrabber
707   ipfiremake syslinux
708   ipfiremake tftpd
709   ipfiremake cpufrequtils
710   ipfiremake dbus
711   ipfiremake bluetooth
712   ipfiremake gutenprint
713   ipfiremake apcupsd
714   ipfiremake iperf
715   ipfiremake netcat
716   ipfiremake 7zip
717   ipfiremake lynis
718   ipfiremake splix
719   ipfiremake streamripper
720   ipfiremake sshfs
721   ipfiremake taglib
722   ipfiremake mediatomb
723   ipfiremake sslh
724   ipfiremake perl-gettext
725   ipfiremake vdradmin
726   ipfiremake miau
727   ipfiremake netsnmpd
728   ipfiremake perl-DBI
729   ipfiremake perl-DBD-mysql
730   ipfiremake cacti
731   ipfiremake icecc
732   ipfiremake openvmtools
733   ipfiremake nagiosql
734   ipfiremake iftop
735   ipfiremake motion
736   ipfiremake joe
737   ipfiremake nut
738   ipfiremake watchdog
739   ipfiremake libpri
740   ipfiremake dahdi
741   ipfiremake asterisk
742   ipfiremake lcr
743   ipfiremake usb_modeswitch
744   ipfiremake usb_modeswitch_data
745   ipfiremake zerofree
746   ipfiremake mdadm
747   ipfiremake eject
748   ipfiremake pound
749   ipfiremake minicom
750   ipfiremake ddrescue
751   ipfiremake imspector
752   ipfiremake miniupnpd
753   ipfiremake client175
754   ipfiremake powertop
755   ipfiremake parted
756   ipfiremake swig
757   ipfiremake python-m2crypto
758   ipfiremake wireless-regdb
759   ipfiremake crda
760   ipfiremake libsolv
761   ipfiremake python-distutils-extra
762   ipfiremake python-lzma
763   ipfiremake python-progressbar
764   ipfiremake python-xattr
765   ipfiremake intltool
766   ipfiremake pakfire3-deps
767   ipfiremake transmission
768   ipfiremake dpfhack
769   ipfiremake lcd4linux
770   ipfiremake mtr
771   ipfiremake tcpick
772   ipfiremake minidlna
773   ipfiremake fping
774   ipfiremake telnet
775   ipfiremake stress
776   ipfiremake libstatgrab
777   ipfiremake sarg
778   echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
779   cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
780   echo >> $BASEDIR/build/var/ipfire/firebuild
781   git log -1 >> $BASEDIR/build/var/ipfire/firebuild
782   echo >> $BASEDIR/build/var/ipfire/firebuild
783   git status >> $BASEDIR/build/var/ipfire/firebuild
784   echo >> $BASEDIR/build/var/ipfire/firebuild
785   cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
786   echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
787   if [ "$GIT_BRANCH" = "master" -o "$GIT_BRANCH" = "next" ]; then
788         echo "$NAME $VERSION ($MACHINE) - Development Build: $GIT_LASTCOMMIT" > $BASEDIR/build/etc/system-release
789   else
790         echo "$NAME $VERSION ($MACHINE) - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
791   fi
792 }
793
794 buildinstaller() {
795   # Run installer scripts one by one
796   LOGFILE="$BASEDIR/log/_build.installer.log"
797   export LOGFILE
798   ipfiremake as86
799   ipfiremake mbr
800   ipfiremake memtest
801   ipfiremake installer
802   cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
803   installmake strip
804   ipfiremake initrd
805 }
806
807 buildpackages() {
808   LOGFILE="$BASEDIR/log/_build.packages.log"
809   export LOGFILE
810   echo "... see detailed log in _build.*.log files" >> $LOGFILE
811
812   
813   # Generating list of packages used
814   echo -n "Generating packages list from logs" | tee -a $LOGFILE
815   rm -f $BASEDIR/doc/packages-list
816   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
817         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
818                 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
819         fi
820   done
821   echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
822   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
823         $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
824   rm -f $BASEDIR/doc/packages-list
825   # packages-list.txt is ready to be displayed for wiki page
826   beautify message DONE
827   
828   # Update changelog
829   cd $BASEDIR
830   [ -z $GIT_TAG ]  || LAST_TAG=$GIT_TAG
831   [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
832   git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
833
834   # Create images for install
835   ipfiremake cdrom
836
837   # Check if there is a loop device for building in virtual environments
838   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
839         if [ "${MACHINE_TYPE}" != "arm" ]; then
840                 ipfiremake usb-stick
841         fi
842         ipfiremake flash-images
843   fi
844
845   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
846
847   ipfirepackages
848
849   # Check if there is a loop device for building in virtual environments
850   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
851         cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
852         cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
853         ipfiremake xen-image
854         rm -rf $LFS/install/packages/linux-xen-*.ipfire
855         rm -rf $LFS/install/packages/meta-linux-xen
856   fi
857   mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
858
859   cd $BASEDIR
860   for i in `ls *.bz2 *.img.gz *.iso`; do
861         md5sum $i > $i.md5
862   done
863   cd $PWD
864
865   # Cleanup
866   stdumount
867   rm -rf $BASEDIR/build/tmp/*
868
869   # Generating total list of files
870   echo -n "Generating files list from logs" | tee -a $LOGFILE
871   rm -f $BASEDIR/log/FILES
872   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
873         if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
874                 echo "##" >>$BASEDIR/log/FILES
875                 echo "## `basename $i`" >>$BASEDIR/log/FILES
876                 echo "##" >>$BASEDIR/log/FILES
877                 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
878         fi
879   done
880   beautify message DONE
881
882   cd $PWD
883 }
884
885 ipfirepackages() {
886         ipfiremake core-updates
887
888         local i
889         for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
890                 i=$(basename ${i})
891                 if [ -e $BASEDIR/lfs/$i ]; then
892                         ipfiredist $i
893                 else
894                         echo -n $i
895                         beautify message SKIP
896                 fi
897         done
898   test -d $BASEDIR/packages || mkdir $BASEDIR/packages
899   mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
900   rm -rf  $BASEDIR/build/install/packages/*
901 }
902
903 # See what we're supposed to do
904 case "$1" in 
905 build)
906         clear
907         PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
908         #only restore on a clean disk
909         if [ ! -f log/cleanup-toolchain-2-tools ]; then
910                 if [ ! -n "$PACKAGE" ]; then
911                         beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
912                         prepareenv
913                         buildtoolchain
914                 else
915                         PACKAGENAME=${PACKAGE%.tar.gz}
916                         beautify build_stage "Packaged toolchain compilation"
917                         if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
918                                 tar zxf $PACKAGE
919                                 prepareenv
920                         else
921                                 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
922                         fi
923                 fi
924         else
925                 echo -n "Using installed toolchain" | tee -a $LOGFILE
926                 beautify message SKIP
927                 prepareenv
928         fi
929
930         beautify build_start
931         beautify build_stage "Building LFS"
932         buildbase
933
934         beautify build_stage "Building IPFire"
935         buildipfire
936
937         beautify build_stage "Building installer"
938         buildinstaller
939
940         beautify build_stage "Building packages"
941         buildpackages
942         
943         beautify build_stage "Checking Logfiles for new Files"
944
945         cd $BASEDIR
946         tools/checknewlog.pl
947         cd $PWD
948
949         beautify build_end
950         ;;
951 shell)
952         # enter a shell inside LFS chroot
953         # may be used to changed kernel settings
954         prepareenv
955         entershell
956         ;;
957 clean)
958         echo -en "${BOLD}Cleaning build directory...${NORMAL}"
959         for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
960                 $LOSETUP -d $i 2>/dev/null
961         done
962         for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
963                 umount $i
964         done
965         stdumount
966         for i in `seq 0 7`; do
967             if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
968                 umount /dev/loop${i}     2>/dev/null;
969                 losetup -d /dev/loop${i} 2>/dev/null;
970             fi;
971         done
972         rm -rf $BASEDIR/build
973         rm -rf $BASEDIR/cdrom
974         rm -rf $BASEDIR/packages
975         rm -rf $BASEDIR/log
976         if [ -h /tools ]; then
977                 rm -f /tools
978         fi
979         rm -f $BASEDIR/ipfire-*
980         beautify message DONE
981         ;;
982 downloadsrc)
983         if [ ! -d $BASEDIR/cache ]; then
984                 mkdir $BASEDIR/cache
985         fi
986         mkdir -p $BASEDIR/log
987         echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
988         FINISHED=0
989         cd $BASEDIR/lfs
990         for c in `seq $MAX_RETRIES`; do
991                 if (( FINISHED==1 )); then 
992                         break
993                 fi
994                 FINISHED=1
995                 cd $BASEDIR/lfs
996                 for i in *; do
997                         if [ -f "$i" -a "$i" != "Config" ]; then
998                                 lfsmakecommoncheck ${i} || continue
999
1000                                 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1001                                         MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1002                                 if [ $? -ne 0 ]; then
1003                                         beautify message FAIL
1004                                         FINISHED=0
1005                                 else
1006                                         if [ $c -eq 1 ]; then
1007                                         beautify message DONE
1008                                         fi
1009                                 fi
1010                         fi
1011                 done
1012         done
1013         echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1014         ERROR=0
1015         for i in *; do
1016                 if [ -f "$i" -a "$i" != "Config" ]; then
1017                         lfsmakecommoncheck ${i} > /dev/null || continue
1018                         make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1019                                 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1020                         if [ $? -ne 0 ]; then
1021                                 echo -ne "MD5 difference in lfs/$i"
1022                                 beautify message FAIL
1023                                 ERROR=1
1024                         fi
1025                 fi
1026         done
1027         if [ $ERROR -eq 0 ]; then
1028                 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1029                 beautify message DONE
1030         else
1031                 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1032                 beautify message FAIL
1033         fi
1034         cd - >/dev/null 2>&1
1035         ;;
1036 toolchain)
1037         clear
1038         prepareenv
1039         beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1040         buildtoolchain
1041         echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1042         test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1043         cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1044                 build/{bin,etc,usr/bin,usr/local} \
1045                 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
1046                 log >> $LOGFILE
1047         md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1048                 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1049         stdumount
1050         ;;
1051 gettoolchain)
1052         # arbitrary name to be updated in case of new toolchain package upload
1053         PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1054         if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1055                 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1056                 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1057                 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1058                 cd $BASEDIR/cache/toolchains
1059                 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1060                 if [ $? -ne 0 ]; then
1061                         echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1062                 else
1063                         if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1064                                 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1065                         else
1066                                 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1067                         fi
1068                 fi
1069         else
1070                 echo "Toolchain is already downloaded. Exiting..."
1071         fi
1072         ;;
1073 othersrc)
1074         prepareenv
1075         echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1076         chroot $LFS /tools/bin/env -i   HOME=/root \
1077         TERM=$TERM PS1='\u:\w\$ ' \
1078         PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1079         VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1080         /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1081         mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1082         if [ $? -eq "0" ]; then
1083                 beautify message DONE
1084         else
1085                 beautify message FAIL
1086         fi
1087         stdumount
1088         ;;
1089 uploadsrc)
1090         PWD=`pwd`
1091         if [ -z $IPFIRE_USER ]; then
1092                 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1093                 beautify message FAIL
1094                 exit 1
1095         fi
1096
1097         URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1098         REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1099
1100         cd $BASEDIR/cache/
1101         for file in $(ls -1 --ignore=toolchains); do
1102                 grep -q "$file" <<<$REMOTE_FILES && continue
1103                 NEW_FILES="$NEW_FILES $file"
1104         done
1105         [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1106         cd $BASEDIR
1107         cd $PWD
1108         exit 0
1109         ;;
1110 lang)
1111         update_langs
1112         ;;
1113 *)
1114         echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1115         cat doc/make.sh-usage
1116         ;;
1117 esac