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