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