]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - make.sh
arm-kernel: change platform to kirkwood.
[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}" = "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}" = "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
356 # ARM cannot use grub.
357 if [ "${MACHINE}" != "arm" ]; then
358 lfsmake2 grub
359 fi
360 }
361
362 buildipfire() {
363 LOGFILE="$BASEDIR/log/_build.ipfire.log"
364 export LOGFILE
365 ipfiremake configroot
366 ipfiremake backup
367 ipfiremake dhcp
368 ipfiremake dhcpcd
369 ipfiremake libusb
370 ipfiremake libpcap
371 ipfiremake ppp
372 ipfiremake pptp
373 ipfiremake unzip
374 ipfiremake which
375 ipfiremake xz
376 ipfiremake linux-firmware
377 ipfiremake zd1211-firmware
378
379 if [ "${MACHINE}" == "arm" ]; then
380 ipfiremake u-boot
381 fi
382
383 # The xen and PAE kernels are only available for x86
384 if [ "${MACHINE}" != "arm" ]; then
385 ipfiremake linux XEN=1
386 ipfiremake kqemu XEN=1
387 ipfiremake v4l-dvb XEN=1
388 ipfiremake madwifi XEN=1
389 ipfiremake mISDN XEN=1
390 ipfiremake dahdi XEN=1 KMOD=1
391 ipfiremake cryptodev XEN=1
392 ipfiremake compat-wireless XEN=1
393 ipfiremake r8169 XEN=1
394 ipfiremake r8168 XEN=1
395 ipfiremake r8101 XEN=1
396 ipfiremake e1000 XEN=1
397 ipfiremake e1000e XEN=1
398 ipfiremake igb XEN=1
399 ipfiremake linux PAE=1
400 ipfiremake kqemu PAE=1
401 ipfiremake kvm-kmod PAE=1
402 ipfiremake v4l-dvb PAE=1
403 ipfiremake madwifi PAE=1
404 ipfiremake alsa PAE=1 KMOD=1
405 ipfiremake mISDN PAE=1
406 ipfiremake dahdi PAE=1 KMOD=1
407 ipfiremake cryptodev PAE=1
408 ipfiremake compat-wireless PAE=1
409 # ipfiremake r8169 PAE=1
410 # ipfiremake r8168 PAE=1
411 # ipfiremake r8101 PAE=1
412 ipfiremake e1000 PAE=1
413 ipfiremake e1000e PAE=1
414 ipfiremake igb PAE=1
415 fi
416
417 # Default kernel build
418 ipfiremake linux
419 ipfiremake v4l-dvb
420
421 if [ "${MACHINE}" != "arm" ]; then
422 # Virtualization helpers are only available for x86.
423 ipfiremake kqemu
424 ipfiremake kvm-kmod
425 #unsupported arch (armv5)
426 ipfiremake madwifi
427 #todo enable alsa driver in kernel config
428 ipfiremake alsa KMOD=1
429 #undefined declaration in echo canceler try to fix later
430 ipfiremake mISDN
431 fi
432 ipfiremake dahdi KMOD=1
433 ipfiremake cryptodev
434 ipfiremake compat-wireless
435 # ipfiremake r8169
436 # ipfiremake r8168
437 # ipfiremake r8101
438 ipfiremake e1000
439 ipfiremake e1000e
440 ipfiremake igb
441 ipfiremake pkg-config
442 ipfiremake linux-atm
443 ipfiremake cpio
444
445 installmake strip
446
447 ipfiremake dracut
448 ipfiremake expat
449 ipfiremake gdbm
450 ipfiremake gmp
451 ipfiremake pam
452 ipfiremake openssl
453 ipfiremake curl
454 ipfiremake tcl
455 ipfiremake sqlite
456 ipfiremake python
457 ipfiremake fireinfo
458 ipfiremake libnet
459 ipfiremake libnl
460 ipfiremake libidn
461 ipfiremake libjpeg
462 ipfiremake libpng
463 ipfiremake libtiff
464 ipfiremake libart
465 ipfiremake freetype
466 ipfiremake gd
467 ipfiremake popt
468 ipfiremake pcre
469 ipfiremake slang
470 ipfiremake newt
471 ipfiremake attr
472 ipfiremake acl
473 ipfiremake libcap
474 ipfiremake pciutils
475 ipfiremake usbutils
476 ipfiremake libxml2
477 ipfiremake libxslt
478 ipfiremake BerkeleyDB
479 ipfiremake mysql
480 ipfiremake cyrus-sasl
481 ipfiremake openldap
482 ipfiremake apache2
483 ipfiremake php
484 ipfiremake apache2 PASS=C
485 ipfiremake arping
486 ipfiremake beep
487 ipfiremake bind
488 ipfiremake cdrtools
489 ipfiremake dnsmasq
490 ipfiremake dosfstools
491 ipfiremake reiserfsprogs
492 ipfiremake xfsprogs
493 ipfiremake sysfsutils
494 ipfiremake fuse
495 ipfiremake ntfs-3g
496 ipfiremake ethtool
497 ipfiremake ez-ipupdate
498 ipfiremake fcron
499 ipfiremake perl-GD
500 ipfiremake GD-Graph
501 ipfiremake GD-TextUtil
502 ipfiremake gnupg
503 ipfiremake hdparm
504 ipfiremake sdparm
505 ipfiremake mtools
506 ipfiremake initscripts
507 ipfiremake whatmask
508 ipfiremake iptables
509 ipfiremake libupnp
510 ipfiremake ipaddr
511 ipfiremake iptstate
512 ipfiremake iputils
513 ipfiremake l7-protocols
514 ipfiremake mISDNuser
515 ipfiremake capi4k-utils
516 ipfiremake hwdata
517 ipfiremake kudzu
518 ipfiremake logrotate
519 ipfiremake logwatch
520 ipfiremake misc-progs
521 ipfiremake nano
522 ipfiremake nasm
523 ipfiremake URI
524 ipfiremake HTML-Tagset
525 ipfiremake HTML-Parser
526 ipfiremake Compress-Zlib
527 ipfiremake Digest
528 ipfiremake Digest-SHA1
529 ipfiremake Digest-HMAC
530 ipfiremake libwww-perl
531 ipfiremake Net-DNS
532 ipfiremake Net-IPv4Addr
533 ipfiremake Net_SSLeay
534 ipfiremake IO-Stringy
535 ipfiremake Unix-Syslog
536 ipfiremake Mail-Tools
537 ipfiremake MIME-Tools
538 ipfiremake Net-Server
539 ipfiremake Convert-TNEF
540 ipfiremake Convert-UUlib
541 ipfiremake Archive-Tar
542 ipfiremake Archive-Zip
543 ipfiremake Text-Tabs+Wrap
544 ipfiremake Locale-Country
545 ipfiremake XML-Parser
546 ipfiremake python-setuptools
547 ipfiremake python-clientform
548 ipfiremake python-mechanize
549 ipfiremake python-feedparser
550 ipfiremake python-rssdler
551 ipfiremake glib
552 ipfiremake GeoIP
553 ipfiremake fwhits
554 ipfiremake noip_updater
555 ipfiremake ntp
556 ipfiremake openssh
557 ipfiremake rrdtool
558 ipfiremake setserial
559 ipfiremake setup
560 ipfiremake libdnet
561 ipfiremake daq
562 ipfiremake snort
563 ipfiremake oinkmaster
564 ipfiremake squid
565 ipfiremake squidguard
566 ipfiremake calamaris
567 ipfiremake tcpdump
568 ipfiremake traceroute
569 ipfiremake vlan
570 ipfiremake wireless
571 ipfiremake libsafe
572 ipfiremake pakfire
573 ipfiremake java
574 ipfiremake spandsp
575 ipfiremake lzo
576 ipfiremake openvpn
577 ipfiremake pammysql
578 ipfiremake cups
579 ipfiremake ghostscript
580 ipfiremake foomatic
581 ipfiremake hplip
582 ipfiremake samba
583 ipfiremake sudo
584 ipfiremake mc
585 ipfiremake wget
586 ipfiremake bridge-utils
587 ipfiremake screen
588 ipfiremake hddtemp
589 ipfiremake smartmontools
590 ipfiremake htop
591 ipfiremake postfix
592 ipfiremake fetchmail
593 ipfiremake cyrus-imapd
594 ipfiremake openmailadmin
595 ipfiremake clamav
596 ipfiremake spamassassin
597 ipfiremake amavisd
598 ipfiremake alsa
599 ipfiremake mpfire
600 ipfiremake guardian
601 ipfiremake libid3tag
602 ipfiremake libmad
603 ipfiremake libogg
604 ipfiremake libvorbis
605 ipfiremake libdvbpsi
606 ipfiremake lame
607 ipfiremake sox
608 ipfiremake libshout
609 ipfiremake xvid
610 ipfiremake libmpeg2
611 ipfiremake cmake
612 ipfiremake gnump3d
613 ipfiremake libsigc++
614 ipfiremake applejuice
615 ipfiremake libtorrent
616 ipfiremake rtorrent
617 ipfiremake ipfireseeder
618 ipfiremake rsync
619 ipfiremake tcpwrapper
620 ipfiremake libevent
621 ipfiremake portmap
622 ipfiremake nfs
623 ipfiremake nmap
624 ipfiremake ncftp
625 ipfiremake etherwake
626 ipfiremake bwm-ng
627 ipfiremake tripwire
628 ipfiremake sysstat
629 ipfiremake vsftpd
630 ipfiremake strongswan
631 ipfiremake lsof
632 ipfiremake centerim
633 ipfiremake br2684ctl
634 ipfiremake pcmciautils
635 ipfiremake lm_sensors
636 ipfiremake liboping
637 ipfiremake collectd
638 ipfiremake lcd4linux
639 ipfiremake teamspeak
640 ipfiremake elinks
641 ipfiremake igmpproxy
642 ipfiremake fbset
643 ipfiremake sdl
644 #ipfiremake qemu
645 #ipfiremake qemu-kqemu
646 ipfiremake sane
647 ipfiremake netpbm
648 ipfiremake phpSANE
649 ipfiremake tunctl
650 ipfiremake nagios
651 ipfiremake nagios_nrpe
652 ipfiremake ebtables
653 ipfiremake fontconfig
654 ipfiremake freefont
655 ipfiremake directfb
656 ipfiremake dfb++
657 ipfiremake faad2
658 ipfiremake ffmpeg
659 ipfiremake videolan
660 #ipfiremake vdr
661 ipfiremake w_scan
662 ipfiremake icecast
663 ipfiremake icegenerator
664 ipfiremake mpd
665 ipfiremake libmpdclient
666 ipfiremake mpc
667 ipfiremake git
668 ipfiremake squidclamav
669 ipfiremake bc
670 ipfiremake vnstat
671 ipfiremake vnstati
672 ipfiremake iw
673 ipfiremake wpa_supplicant
674 ipfiremake hostapd
675 ipfiremake urlgrabber
676 if [ "${MACHINE:0:3}" != "arm" ]; then
677 ipfiremake syslinux
678 fi
679 ipfiremake tftpd
680 #ipfiremake cpufrequtils
681 ipfiremake dbus
682 ipfiremake bluetooth
683 ipfiremake gutenprint
684 ipfiremake apcupsd
685 ipfiremake iperf
686 ipfiremake netcat
687 ipfiremake 7zip
688 ipfiremake lynis
689 ipfiremake splix
690 ipfiremake streamripper
691 ipfiremake sshfs
692 ipfiremake taglib
693 ipfiremake mediatomb
694 ipfiremake sslh
695 ipfiremake perl-gettext
696 ipfiremake vdradmin
697 ipfiremake miau
698 ipfiremake netsnmpd
699 ipfiremake perl-DBI
700 ipfiremake perl-DBD-mysql
701 ipfiremake cacti
702 ipfiremake icecc
703 if [ "${MACHINE:0:3}" != "arm" ]; then
704 ipfiremake openvmtools
705 fi
706 ipfiremake nagiosql
707 ipfiremake iftop
708 ipfiremake motion
709 ipfiremake joe
710 ipfiremake nut
711 ipfiremake watchdog
712 ipfiremake libpri
713 ipfiremake dahdi
714 #ipfiremake asterisk
715 #ipfiremake lcr
716 ipfiremake usb_modeswitch
717 ipfiremake usb_modeswitch_data
718 ipfiremake zerofree
719 ipfiremake mdadm
720 ipfiremake eject
721 ipfiremake pound
722 ipfiremake minicom
723 ipfiremake ddrescue
724 ipfiremake imspector
725 ipfiremake miniupnpd
726 ipfiremake client175
727 ipfiremake powertop
728 ipfiremake parted
729 ipfiremake swig
730 ipfiremake python-m2crypto
731 ipfiremake wireless-regdb
732 ipfiremake crda
733 ipfiremake libsatsolver
734 ipfiremake python-satsolver
735 ipfiremake python-distutils-extra
736 ipfiremake python-lzma
737 ipfiremake python-progressbar
738 ipfiremake python-xattr
739 ipfiremake intltool
740 ipfiremake pakfire3-deps
741 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
742 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
743 echo >> $BASEDIR/build/var/ipfire/firebuild
744 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
745 echo >> $BASEDIR/build/var/ipfire/firebuild
746 git status >> $BASEDIR/build/var/ipfire/firebuild
747 echo >> $BASEDIR/build/var/ipfire/firebuild
748 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
749 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
750 if [ "$GIT_BRANCH" = "master" ]; then
751 echo "$NAME $VERSION - (Development Build: $GIT_LASTCOMMIT)" > $BASEDIR/build/etc/system-release
752 else
753 echo "$NAME $VERSION - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
754 fi
755 }
756
757 buildinstaller() {
758 # Run installer scripts one by one
759 LOGFILE="$BASEDIR/log/_build.installer.log"
760 export LOGFILE
761 if [ "${MACHINE:0:3}" != "arm" ]; then
762 ipfiremake as86
763 ipfiremake mbr
764 ipfiremake memtest
765 fi
766 ipfiremake installer
767 cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
768 installmake strip
769 ipfiremake initrd
770 }
771
772 buildpackages() {
773 LOGFILE="$BASEDIR/log/_build.packages.log"
774 export LOGFILE
775 echo "... see detailed log in _build.*.log files" >> $LOGFILE
776
777
778 # Generating list of packages used
779 echo -n "Generating packages list from logs" | tee -a $LOGFILE
780 rm -f $BASEDIR/doc/packages-list
781 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
782 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
783 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
784 fi
785 done
786 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
787 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
788 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
789 rm -f $BASEDIR/doc/packages-list
790 # packages-list.txt is ready to be displayed for wiki page
791 beautify message DONE
792
793 # Update changelog
794 cd $BASEDIR
795 $0 git log
796
797 # Create images for install
798 ipfiremake cdrom ED=$IPFVER
799
800 # Check if there is a loop device for building in virtual environments
801 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
802 ipfiremake usb-stick ED=$IPFVER
803 ipfiremake flash-images ED=$IPFVER
804 fi
805
806 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
807
808 ipfirepackages
809
810 # Check if there is a loop device for building in virtual environments
811 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
812 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
813 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
814 ipfiremake xen-image ED=$IPFVER
815 rm -rf $LFS/install/packages/linux-xen-*.ipfire
816 rm -rf $LFS/install/packages/meta-linux-xen
817 fi
818 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
819
820 cd $BASEDIR
821 for i in `ls *.bz2 *.img.gz *.iso`; do
822 md5sum $i > $i.md5
823 done
824 cd $PWD
825
826 # Cleanup
827 stdumount
828 rm -rf $BASEDIR/build/tmp/*
829
830 # Generating total list of files
831 echo -n "Generating files list from logs" | tee -a $LOGFILE
832 rm -f $BASEDIR/log/FILES
833 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
834 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
835 echo "##" >>$BASEDIR/log/FILES
836 echo "## `basename $i`" >>$BASEDIR/log/FILES
837 echo "##" >>$BASEDIR/log/FILES
838 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
839 fi
840 done
841 beautify message DONE
842
843 cd $PWD
844 }
845
846 ipfirepackages() {
847 ipfiremake core-updates
848 for i in $(ls -1 $BASEDIR/config/rootfiles/packages); do
849 if [ -e $BASEDIR/lfs/$i ]; then
850 ipfiredist $i
851 else
852 echo -n $i
853 beautify message SKIP
854 fi
855 done
856 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
857 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
858 rm -rf $BASEDIR/build/install/packages/*
859 }
860
861 # See what we're supposed to do
862 case "$1" in
863 build)
864 clear
865 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
866 #only restore on a clean disk
867 if [ ! -f log/cleanup-toolchain-2-tools ]; then
868 if [ ! -n "$PACKAGE" ]; then
869 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
870 prepareenv
871 buildtoolchain
872 else
873 PACKAGENAME=${PACKAGE%.tar.gz}
874 beautify build_stage "Packaged toolchain compilation"
875 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
876 tar zxf $PACKAGE
877 prepareenv
878 else
879 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
880 fi
881 fi
882 else
883 echo -n "Using installed toolchain" | tee -a $LOGFILE
884 beautify message SKIP
885 prepareenv
886 fi
887
888 beautify build_start
889 beautify build_stage "Building LFS"
890 buildbase
891
892 beautify build_stage "Building IPFire"
893 buildipfire
894
895 beautify build_stage "Building installer"
896 buildinstaller
897
898 beautify build_stage "Building packages"
899 buildpackages
900
901 beautify build_stage "Checking Logfiles for new Files"
902
903 cd $BASEDIR
904 tools/checknewlog.pl
905 cd $PWD
906
907 beautify build_end
908 ;;
909 shell)
910 # enter a shell inside LFS chroot
911 # may be used to changed kernel settings
912 prepareenv
913 entershell
914 ;;
915 clean)
916 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
917 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
918 $LOSETUP -d $i 2>/dev/null
919 done
920 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
921 umount $i
922 done
923 stdumount
924 for i in `seq 0 7`; do
925 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
926 umount /dev/loop${i} 2>/dev/null;
927 losetup -d /dev/loop${i} 2>/dev/null;
928 fi;
929 done
930 rm -rf $BASEDIR/build
931 rm -rf $BASEDIR/cdrom
932 rm -rf $BASEDIR/packages
933 rm -rf $BASEDIR/log
934 if [ -h /tools ]; then
935 rm -f /tools
936 fi
937 rm -f $BASEDIR/ipfire-*
938 beautify message DONE
939 ;;
940 downloadsrc)
941 if [ ! -d $BASEDIR/cache ]; then
942 mkdir $BASEDIR/cache
943 fi
944 mkdir -p $BASEDIR/log
945 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
946 FINISHED=0
947 cd $BASEDIR/lfs
948 for c in `seq $MAX_RETRIES`; do
949 if (( FINISHED==1 )); then
950 break
951 fi
952 FINISHED=1
953 cd $BASEDIR/lfs
954 for i in *; do
955 if [ -f "$i" -a "$i" != "Config" ]; then
956 echo -ne "Loading $i"
957 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
958 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
959 if [ $? -ne 0 ]; then
960 beautify message FAIL
961 FINISHED=0
962 else
963 if [ $c -eq 1 ]; then
964 beautify message DONE
965 fi
966 fi
967 fi
968 done
969 done
970 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
971 ERROR=0
972 for i in *; do
973 if [ -f "$i" -a "$i" != "Config" ]; then
974 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
975 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
976 if [ $? -ne 0 ]; then
977 echo -ne "MD5 difference in lfs/$i"
978 beautify message FAIL
979 ERROR=1
980 fi
981 fi
982 done
983 if [ $ERROR -eq 0 ]; then
984 echo -ne "${BOLD}all files md5sum match${NORMAL}"
985 beautify message DONE
986 else
987 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
988 beautify message FAIL
989 fi
990 cd - >/dev/null 2>&1
991 ;;
992 toolchain)
993 clear
994 prepareenv
995 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
996 buildtoolchain
997 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
998 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
999 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz \
1000 build/{bin,etc,usr/bin,usr/local} \
1001 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
1002 log >> $LOGFILE
1003 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.tar.gz \
1004 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE.md5
1005 stdumount
1006 ;;
1007 gettoolchain)
1008 # arbitrary name to be updated in case of new toolchain package upload
1009 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$BUILDMACHINE
1010 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1011 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1012 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1013 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1014 cd $BASEDIR/cache/toolchains
1015 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1016 if [ $? -ne 0 ]; then
1017 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1018 else
1019 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1020 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1021 else
1022 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1023 fi
1024 fi
1025 else
1026 echo "Toolchain is already downloaded. Exiting..."
1027 fi
1028 ;;
1029 othersrc)
1030 prepareenv
1031 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1032 chroot $LFS /tools/bin/env -i HOME=/root \
1033 TERM=$TERM PS1='\u:\w\$ ' \
1034 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1035 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1036 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1037 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1038 if [ $? -eq "0" ]; then
1039 beautify message DONE
1040 else
1041 beautify message FAIL
1042 fi
1043 stdumount
1044 ;;
1045 git)
1046 case "$2" in
1047 update|up)
1048 ## REMOVES ALL UNCOMMITTED CHANGES!
1049 [ "$3" == "--force" ] && git checkout -f
1050 git pull
1051 ;;
1052 commit|ci)
1053 shift 2
1054 git commit $*
1055
1056 [ "$?" -eq "0" ] || exiterror "git commit $* failed."
1057
1058 echo -e "${BOLD}Do you want to push, too? [y/N]${NORMAL}"
1059 read
1060 [ -z $REPLY ] && exit 0
1061 for i in y Y j J; do
1062 if [ "$i" == "$REPLY" ]; then
1063 $0 git push
1064 exit $?
1065 fi
1066 done
1067 exiterror "\"$REPLY\" is not a valid answer."
1068 ;;
1069 dist)
1070 git archive HEAD | gzip -9 > ${SNAME}-${VERSION}.tar.gz
1071 ;;
1072 diff|di)
1073 echo -ne "Make a local diff to last revision"
1074 git diff HEAD > ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff
1075 evaluate 1
1076 echo "Diff was successfully saved to ipfire-diff-$(date +'%Y-%m-%d-%H:%M').diff"
1077 git diff --stat
1078 ;;
1079 push)
1080 [ -z $GIT_USER ] && exiterror "You have to setup GIT_USER first."
1081 GIT_URL="ssh://${GIT_USER}@git.ipfire.org/pub/git/ipfire-2.x"
1082
1083 git push ${GIT_URL} $3
1084 ;;
1085 log)
1086 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
1087 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
1088
1089 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
1090 ;;
1091 esac
1092 ;;
1093 uploadsrc)
1094 PWD=`pwd`
1095 if [ -z $IPFIRE_USER ]; then
1096 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1097 beautify message FAIL
1098 exit 1
1099 fi
1100
1101 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1102 REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1103
1104 cd $BASEDIR/cache/
1105 for file in $(ls -1 --ignore=toolchains); do
1106 grep -q "$file" <<<$REMOTE_FILES && continue
1107 NEW_FILES="$NEW_FILES $file"
1108 done
1109 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1110 cd $BASEDIR
1111 cd $PWD
1112 exit 0
1113 ;;
1114 batch)
1115 if [ "$2" = "--background" ]; then
1116 batch_script
1117 exit $?
1118 fi
1119 if [ `screen -ls | grep -q ipfire` ]; then
1120 echo "Build is already running, sorry!"
1121 exit 1
1122 else
1123 if [ "$2" = "--rebuild" ]; then
1124 export IPFIRE_REBUILD=1
1125 echo "REBUILD!"
1126 else
1127 export IPFIRE_REBUILD=0
1128 fi
1129 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1130 screen -dmS ipfire $0 batch --background
1131 evaluate 1
1132 exit 0
1133 fi
1134 ;;
1135 watch)
1136 watch_screen
1137 ;;
1138 pxe)
1139 case "$2" in
1140 start)
1141 start_tftpd
1142 ;;
1143 stop)
1144 stop_tftpd
1145 ;;
1146 reload|restart)
1147 reload_tftpd
1148 ;;
1149 esac
1150 exit 0
1151 ;;
1152 lang)
1153 update_langs
1154 ;;
1155 "")
1156 clear
1157 select name in "Exit" "IPFIRE: Downloadsrc" "IPFIRE: Build (silent)" "IPFIRE: Watch Build" "IPFIRE: Batch" "IPFIRE: Clean" "LOG: Tail" "Help"
1158 do
1159 case $name in
1160 "IPFIRE: Downloadsrc")
1161 $0 downloadsrc
1162 ;;
1163 "IPFIRE: Build (silent)")
1164 $0 build-silent
1165 ;;
1166 "IPFIRE: Watch Build")
1167 $0 watch
1168 ;;
1169 "IPFIRE: Batch")
1170 $0 batch
1171 ;;
1172 "IPFIRE: Clean")
1173 $0 clean
1174 ;;
1175 "Help")
1176 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1177 cat doc/make.sh-usage
1178 ;;
1179 "LOG: Tail")
1180 tail -f log/_*
1181 ;;
1182 "Exit")
1183 break
1184 ;;
1185 esac
1186 done
1187 ;;
1188 config)
1189 make_config
1190 ;;
1191 *)
1192 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1193 cat doc/make.sh-usage
1194 ;;
1195 esac