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