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