]> git.ipfire.org Git - ipfire-2.x.git/blob - make.sh
Remove tons of old uClibc/installer system related stuff.
[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 installmake strip
804 ipfiremake initrd
805 }
806
807 buildpackages() {
808 LOGFILE="$BASEDIR/log/_build.packages.log"
809 export LOGFILE
810 echo "... see detailed log in _build.*.log files" >> $LOGFILE
811
812
813 # Generating list of packages used
814 echo -n "Generating packages list from logs" | tee -a $LOGFILE
815 rm -f $BASEDIR/doc/packages-list
816 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
817 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
818 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
819 fi
820 done
821 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
822 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
823 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
824 rm -f $BASEDIR/doc/packages-list
825 # packages-list.txt is ready to be displayed for wiki page
826 beautify message DONE
827
828 # Update changelog
829 cd $BASEDIR
830 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
831 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
832 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
833
834 # Create images for install
835 ipfiremake cdrom
836
837 # Check if there is a loop device for building in virtual environments
838 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
839 if [ "${MACHINE_TYPE}" != "arm" ]; then
840 ipfiremake usb-stick
841 fi
842 ipfiremake flash-images
843 fi
844
845 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
846
847 ipfirepackages
848
849 # Check if there is a loop device for building in virtual environments
850 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
851 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
852 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
853 ipfiremake xen-image
854 rm -rf $LFS/install/packages/linux-xen-*.ipfire
855 rm -rf $LFS/install/packages/meta-linux-xen
856 fi
857 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
858
859 cd $BASEDIR
860 for i in `ls *.bz2 *.img.gz *.iso`; do
861 md5sum $i > $i.md5
862 done
863 cd $PWD
864
865 # Cleanup
866 stdumount
867 rm -rf $BASEDIR/build/tmp/*
868
869 # Generating total list of files
870 echo -n "Generating files list from logs" | tee -a $LOGFILE
871 rm -f $BASEDIR/log/FILES
872 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
873 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
874 echo "##" >>$BASEDIR/log/FILES
875 echo "## `basename $i`" >>$BASEDIR/log/FILES
876 echo "##" >>$BASEDIR/log/FILES
877 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
878 fi
879 done
880 beautify message DONE
881
882 cd $PWD
883 }
884
885 ipfirepackages() {
886 ipfiremake core-updates
887
888 local i
889 for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
890 i=$(basename ${i})
891 if [ -e $BASEDIR/lfs/$i ]; then
892 ipfiredist $i
893 else
894 echo -n $i
895 beautify message SKIP
896 fi
897 done
898 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
899 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
900 rm -rf $BASEDIR/build/install/packages/*
901 }
902
903 # See what we're supposed to do
904 case "$1" in
905 build)
906 clear
907 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
908 #only restore on a clean disk
909 if [ ! -f log/cleanup-toolchain-2-tools ]; then
910 if [ ! -n "$PACKAGE" ]; then
911 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
912 prepareenv
913 buildtoolchain
914 else
915 PACKAGENAME=${PACKAGE%.tar.gz}
916 beautify build_stage "Packaged toolchain compilation"
917 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
918 tar zxf $PACKAGE
919 prepareenv
920 else
921 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
922 fi
923 fi
924 else
925 echo -n "Using installed toolchain" | tee -a $LOGFILE
926 beautify message SKIP
927 prepareenv
928 fi
929
930 beautify build_start
931 beautify build_stage "Building LFS"
932 buildbase
933
934 beautify build_stage "Building IPFire"
935 buildipfire
936
937 beautify build_stage "Building installer"
938 buildinstaller
939
940 beautify build_stage "Building packages"
941 buildpackages
942
943 beautify build_stage "Checking Logfiles for new Files"
944
945 cd $BASEDIR
946 tools/checknewlog.pl
947 cd $PWD
948
949 beautify build_end
950 ;;
951 shell)
952 # enter a shell inside LFS chroot
953 # may be used to changed kernel settings
954 prepareenv
955 entershell
956 ;;
957 clean)
958 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
959 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
960 $LOSETUP -d $i 2>/dev/null
961 done
962 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
963 umount $i
964 done
965 stdumount
966 for i in `seq 0 7`; do
967 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
968 umount /dev/loop${i} 2>/dev/null;
969 losetup -d /dev/loop${i} 2>/dev/null;
970 fi;
971 done
972 rm -rf $BASEDIR/build
973 rm -rf $BASEDIR/cdrom
974 rm -rf $BASEDIR/packages
975 rm -rf $BASEDIR/log
976 if [ -h /tools ]; then
977 rm -f /tools
978 fi
979 rm -f $BASEDIR/ipfire-*
980 beautify message DONE
981 ;;
982 downloadsrc)
983 if [ ! -d $BASEDIR/cache ]; then
984 mkdir $BASEDIR/cache
985 fi
986 mkdir -p $BASEDIR/log
987 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
988 FINISHED=0
989 cd $BASEDIR/lfs
990 for c in `seq $MAX_RETRIES`; do
991 if (( FINISHED==1 )); then
992 break
993 fi
994 FINISHED=1
995 cd $BASEDIR/lfs
996 for i in *; do
997 if [ -f "$i" -a "$i" != "Config" ]; then
998 lfsmakecommoncheck ${i} || continue
999
1000 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1001 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1002 if [ $? -ne 0 ]; then
1003 beautify message FAIL
1004 FINISHED=0
1005 else
1006 if [ $c -eq 1 ]; then
1007 beautify message DONE
1008 fi
1009 fi
1010 fi
1011 done
1012 done
1013 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
1014 ERROR=0
1015 for i in *; do
1016 if [ -f "$i" -a "$i" != "Config" ]; then
1017 lfsmakecommoncheck ${i} > /dev/null || continue
1018 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
1019 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1020 if [ $? -ne 0 ]; then
1021 echo -ne "MD5 difference in lfs/$i"
1022 beautify message FAIL
1023 ERROR=1
1024 fi
1025 fi
1026 done
1027 if [ $ERROR -eq 0 ]; then
1028 echo -ne "${BOLD}all files md5sum match${NORMAL}"
1029 beautify message DONE
1030 else
1031 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
1032 beautify message FAIL
1033 fi
1034 cd - >/dev/null 2>&1
1035 ;;
1036 toolchain)
1037 clear
1038 prepareenv
1039 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
1040 buildtoolchain
1041 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1042 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1043 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1044 build/tools log >> $LOGFILE
1045 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
1046 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
1047 stdumount
1048 ;;
1049 gettoolchain)
1050 # arbitrary name to be updated in case of new toolchain package upload
1051 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1052 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1053 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1054 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1055 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1056 cd $BASEDIR/cache/toolchains
1057 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1058 if [ $? -ne 0 ]; then
1059 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1060 else
1061 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1062 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1063 else
1064 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1065 fi
1066 fi
1067 else
1068 echo "Toolchain is already downloaded. Exiting..."
1069 fi
1070 ;;
1071 othersrc)
1072 prepareenv
1073 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1074 chroot $LFS /tools/bin/env -i HOME=/root \
1075 TERM=$TERM PS1='\u:\w\$ ' \
1076 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1077 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1078 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1079 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1080 if [ $? -eq "0" ]; then
1081 beautify message DONE
1082 else
1083 beautify message FAIL
1084 fi
1085 stdumount
1086 ;;
1087 uploadsrc)
1088 PWD=`pwd`
1089 if [ -z $IPFIRE_USER ]; then
1090 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1091 beautify message FAIL
1092 exit 1
1093 fi
1094
1095 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1096 REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1097
1098 cd $BASEDIR/cache/
1099 for file in $(ls -1 --ignore=toolchains); do
1100 grep -q "$file" <<<$REMOTE_FILES && continue
1101 NEW_FILES="$NEW_FILES $file"
1102 done
1103 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1104 cd $BASEDIR
1105 cd $PWD
1106 exit 0
1107 ;;
1108 lang)
1109 update_langs
1110 ;;
1111 *)
1112 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1113 cat doc/make.sh-usage
1114 ;;
1115 esac