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