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