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