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