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