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