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