]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - make.sh
Habe ein Paar lange dagewesene Errors behoben.
[people/pmueller/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) 2006 IPFire-Team <info@ipfire.eu>. #
21 # #
22 ############################################################################
23 #
24
25 NAME="IPFire" # Software name
26 SNAME="ipfire" # Short name
27 VERSION="2.0b" # Version number
28 SLOGAN="www.ipfire.org" # Software slogan
29 CONFIG_ROOT=/var/ipfire # Configuration rootdir
30 NICE=10 # Nice level
31 MAX_RETRIES=1 # prefetch/check loop
32 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
33 MACHINE=`uname -m`
34 SVN_REVISION=`svn info | grep Revision | cut -c 11-`
35
36 IPFVER="full" # Which version should be compiled? (full|light|voice)
37
38 # Set an information about the build number
39 if [ -e ./.svn ]; then
40 FIREBUILD=`cat .svn/entries |sed -n 's/^[ \t]*revision=\"// p' | sed -n 's/\".*$// p'`
41 fi
42
43 # Debian specific settings
44 if [ ! -e /etc/debian_version ]; then
45 FULLPATH=`which $0`
46 else
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
53 fi
54
55 PWD=`pwd`
56 BASENAME=`basename $0`
57 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
58 LOGFILE=$BASEDIR/log/_build.preparation.log
59 export BASEDIR LOGFILE
60 DIR_CHK=$BASEDIR/cache/check
61 mkdir $BASEDIR/log/ 2>/dev/null
62
63 # Include funtions
64 . tools/make-functions
65
66 if [ -f .config ]; then
67 . .config
68 else
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
76 fi
77
78 prepareenv() {
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="-j12"
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
215 buildtoolchain() {
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
255 buildbase() {
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 grub
288 lfsmake2 gawk
289 lfsmake2 gettext
290 lfsmake2 grep
291 lfsmake2 groff
292 lfsmake2 gzip
293 lfsmake2 inetutils
294 lfsmake2 iproute2
295 lfsmake2 kbd
296 lfsmake2 less
297 lfsmake2 make
298 lfsmake2 man
299 lfsmake2 mktemp
300 lfsmake2 modutils
301 lfsmake2 net-tools
302 lfsmake2 patch
303 lfsmake2 psmisc
304 lfsmake2 shadow
305 lfsmake2 sysklogd
306 lfsmake2 sysvinit
307 lfsmake2 tar
308 lfsmake2 texinfo
309 lfsmake2 udev
310 lfsmake2 util-linux
311 lfsmake2 vim
312 }
313
314 buildipfire() {
315 LOGFILE="$BASEDIR/log/_build.ipfire.log"
316 export LOGFILE
317 ipfiremake configroot
318 ipfiremake dhcp
319 ipfiremake dhcpcd
320 ipfiremake libusb
321 ipfiremake libpcap
322 ipfiremake linux-atm
323 ipfiremake ppp
324 ipfiremake rp-pppoe
325 ipfiremake unzip
326 ipfiremake linux SMP=1
327 ipfiremake ipp2p SMP=1
328 # ipfiremake 3cp4218 SMP=1
329 # ipfiremake amedyn SMP=1
330 # ipfiremake cxacru SMP=1
331 # ipfiremake eagle SMP=1
332 # ipfiremake cnx_pci SMP=1
333 # ipfiremake fcdsl SMP=1
334 # ipfiremake fcdsl2 SMP=1
335 # ipfiremake fcdslsl SMP=1
336 # ipfiremake fcdslusb SMP=1
337 # ipfiremake fcdslslusb SMP=1
338 # ipfiremake fcpci SMP=1
339 # ipfiremake fcclassic SMP=1
340 # ipfiremake pulsar SMP=1
341 # ipfiremake unicorn SMP=1
342 # ipfiremake promise-sata-300-tx SMP=1
343 ipfiremake zaptel PASS=S
344 ipfiremake linux
345 ipfiremake ipp2p
346 # ipfiremake 3cp4218
347 # ipfiremake amedyn
348 # ipfiremake cxacru
349 # ipfiremake eciadsl
350 # ipfiremake eagle
351 # ipfiremake speedtouch
352 # ipfiremake cnx_pci
353 # ipfiremake fcdsl
354 # ipfiremake fcdsl2
355 # ipfiremake fcdslsl
356 # ipfiremake fcdslusb
357 # ipfiremake fcdslslusb
358 # ipfiremake fcpci
359 # ipfiremake fcclassic
360 # ipfiremake pulsar
361 # ipfiremake unicorn
362 # ipfiremake promise-sata-300-tx
363 ipfiremake zaptel
364 ipfiremake expat
365 ipfiremake gdbm
366 ipfiremake gmp
367 ipfiremake pam
368 ipfiremake openssl
369 ipfiremake python
370 ipfiremake libnet
371 ipfiremake libjpeg
372 ipfiremake libpng
373 ipfiremake libtiff
374 ipfiremake lcms
375 ipfiremake libmng
376 ipfiremake freetype
377 ipfiremake libart
378 ipfiremake gd
379 ipfiremake popt
380 ipfiremake pcre
381 ipfiremake slang
382 ipfiremake newt
383 ipfiremake libcap
384 ipfiremake pciutils
385 ipfiremake libxml2
386 ipfiremake BerkeleyDB
387 ipfiremake mysql
388 ipfiremake cyrus-sasl
389 ipfiremake openldap
390 ipfiremake apache2
391 ipfiremake php
392 ipfiremake subversion
393 ipfiremake apache2 PASS=C
394 ipfiremake arping
395 ipfiremake beep
396 ipfiremake bind
397 ipfiremake capi4k-utils
398 ipfiremake cdrtools
399 ipfiremake dnsmasq
400 ipfiremake dosfstools
401 ipfiremake reiserfsprogs
402 ipfiremake ethtool
403 ipfiremake ez-ipupdate
404 ipfiremake fcron
405 ipfiremake GD
406 ipfiremake gnupg
407 ipfiremake hdparm
408 ipfiremake ibod
409 ipfiremake initscripts
410 ipfiremake iptables
411 ipfiremake ipp2p IPT=1
412 ipfiremake ipac-ng
413 ipfiremake ipaddr
414 ipfiremake iptstate
415 ipfiremake iputils
416 ipfiremake l7-protocols
417 ipfiremake isapnptools
418 # ipfiremake isdn4k-utils # What about mISDN???
419 ipfiremake kudzu
420 ipfiremake logrotate
421 ipfiremake logwatch
422 ipfiremake mingetty
423 ipfiremake misc-progs
424 ipfiremake mtools
425 ipfiremake nano
426 ipfiremake nash
427 ipfiremake nasm
428 ipfiremake URI
429 ipfiremake HTML-Tagset
430 ipfiremake HTML-Parser
431 ipfiremake Compress-Zlib
432 ipfiremake Digest
433 ipfiremake Digest-SHA1
434 ipfiremake Digest-HMAC
435 ipfiremake libwww-perl
436 ipfiremake Net-DNS
437 ipfiremake Net-IPv4Addr
438 ipfiremake Net_SSLeay
439 ipfiremake IO-Stringy
440 ipfiremake Unix-Syslog
441 ipfiremake Mail-Tools
442 ipfiremake MIME-Tools
443 ipfiremake Net-Server
444 ipfiremake Convert-TNEF
445 ipfiremake Convert-UUlib
446 ipfiremake Archive-Tar
447 ipfiremake Archive-Zip
448 ipfiremake Text-Tabs+Wrap
449 ipfiremake Locale-Country
450 ipfiremake GeoIP
451 ipfiremake fwhits
452 ipfiremake noip_updater
453 ipfiremake ntp
454 ipfiremake oinkmaster
455 ipfiremake openssh
456 ipfiremake openswan
457 ipfiremake pptpclient
458 ipfiremake rrdtool
459 ipfiremake setserial
460 ipfiremake setup
461 ipfiremake snort
462 ipfiremake squid
463 ipfiremake squid-graph
464 ipfiremake squidguard
465 # ipfiremake tcpdump
466 ipfiremake traceroute
467 ipfiremake vlan
468 ipfiremake wireless
469 ipfiremake libsafe
470 ipfiremake 3c5x9setup
471 ipfiremake pakfire
472 ipfiremake startscripts
473 ipfiremake java
474 ipfiremake bootsplash
475 ipfiremake spandsp
476 ipfiremake lzo
477 ipfiremake openvpn
478 ipfiremake pkg-config
479 ipfiremake glib
480 ipfiremake pammysql
481 ipfiremake xinetd
482 ipfiremake ghostscript
483 ipfiremake cups
484 ipfiremake samba
485 ipfiremake sudo
486 ipfiremake mc
487 ipfiremake wget
488 ipfiremake wput
489 ipfiremake bridge-utils
490 ipfiremake screen
491 ipfiremake hddtemp
492 ipfiremake smartmontools
493 ipfiremake htop
494 ipfiremake lynx
495 ipfiremake postfix
496 ipfiremake procmail
497 ipfiremake fetchmail
498 ipfiremake cyrusimap
499 ipfiremake webcyradm
500 ipfiremake mailx
501 ipfiremake clamav
502 ipfiremake razor
503 ipfiremake spamassassin
504 ipfiremake amavisd
505 ipfiremake stund
506 ipfiremake libpri
507 # ipfiremake bristuff
508 ipfiremake asterisk
509 ipfiremake mpg123
510 ipfiremake libmad
511 ipfiremake libogg
512 ipfiremake libvorbis
513 ipfiremake lame
514 ipfiremake xvid
515 ipfiremake mpeg2dec
516 ipfiremake ffmpeg
517 ipfiremake sox
518 ipfiremake gnump3d
519 ipfiremake videolan
520 ipfiremake applejuice
521 ipfiremake ocaml
522 ipfiremake mldonkey
523 ipfiremake ntop
524 ipfiremake rsync
525 ipfiremake tcpwrapper
526 ipfiremake portmap
527 ipfiremake nfs
528 ipfiremake nmap
529 ipfiremake mbmon
530 ipfiremake iftop
531 ipfiremake ncftp
532 ipfiremake cftp
533 ipfiremake etherwake
534 ipfiremake ethereal
535 ipfiremake tftp-hpa
536 ipfiremake iptraf
537 ipfiremake nagios
538 ipfiremake yasuc
539 }
540
541 buildinstaller() {
542 # Run installer scripts one by one
543 LOGFILE="$BASEDIR/log/_build.installer.log"
544 export LOGFILE
545 ipfiremake syslinux
546 ipfiremake memtest
547 installmake linux-libc-header
548 installmake binutils
549 ipfiremake uClibc PASS=1
550 ipfiremake gcc INST=1
551 installmake uClibc PASS=2
552 installmake gcc INST=2
553 installmake uClibc PASS=3
554 installmake busybox
555 installmake udev
556 installmake slang
557 installmake newt
558 installmake gettext
559 installmake kbd
560 installmake popt
561 installmake sysvinit
562 installmake misc-progs
563 installmake e2fsprogs
564 installmake reiserfsprogs
565 installmake sysfsutils
566 installmake util-linux
567 installmake pciutils
568 installmake kudzu
569 # installmake bootsplash
570 installmake installer
571 installmake scsi.img # this is to be deleted
572 installmake driver.img # this is to be deleted
573 installmake initrd
574 installmake boot.img # this is to be deleted
575 # ipfiremake as86 # this is to be deleted
576 # ipfiremake mbr # this is to be deleted
577 }
578
579 buildpackages() {
580 LOGFILE="$BASEDIR/log/_build.packages.log"
581 export LOGFILE
582 echo "... see detailed log in _build.*.log files" >> $LOGFILE
583
584 installmake strip
585
586 # Generating list of packages used
587 echo -n "Generating packages list from logs" | tee -a $LOGFILE
588 rm -f $BASEDIR/doc/packages-list
589 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
590 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
591 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
592 fi
593 done
594 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
595 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$' \
596 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
597 rm -f $BASEDIR/doc/packages-list
598 # packages-list.txt is ready to be displayed for wiki page
599 beautify message DONE
600
601 # Create images for install
602 ipfiremake cdrom
603 ipfiremake pxe
604 cp -f $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
605
606 # ipfirepackages
607
608 # Cleanup
609 stdumount
610 rm -rf $BASEDIR/build/tmp/*
611
612 # Generating total list of files
613 echo "Generating files list from logs" | tee -a $LOGFILE
614 rm -f $BASEDIR/log/FILES
615 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
616 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
617 echo "##" >>$BASEDIR/log/FILES
618 echo "## `basename $i`" >>$BASEDIR/log/FILES
619 echo "##" >>$BASEDIR/log/FILES
620 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
621 fi
622 done
623 cd $BASEDIR/packages; ls -w1 *.ipfire | awk -F ".ipfire" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
624 echo -n "###EOF###" >> $BASEDIR/packages/packages_list.txt
625
626 cd $PWD
627
628 }
629
630 ipfirepackages() {
631 if [ -d "$BASEDIR/packages" ]; then
632 for i in `ls $BASEDIR/packages`; do
633 touch $BASEDIR/build/install/packages/$i.empty
634 done
635 fi
636 # ipfiredist amavisd
637 ipfiredist applejuice
638 ipfiredist asterisk
639 ipfiredist clamav
640 ipfiredist cups
641 ipfiredist cyrusimap
642 ipfiredist fetchmail
643 ipfiredist ffmpeg
644 ipfiredist gnump3d
645 ipfiredist iptraf
646 ipfiredist java
647 ipfiredist lame
648 ipfiredist libmad
649 ipfiredist libogg
650 ipfiredist libvorbis
651 ipfiredist mailx
652 ipfiredist mldonkey
653 ipfiredist mpeg2dec
654 ipfiredist nagios
655 ipfiredist nfs
656 ipfiredist nmap
657 ipfiredist ntop
658 ipfiredist portmap
659 ipfiredist postfix
660 ipfiredist procmail
661 ipfiredist samba
662 ipfiredist sox
663 ipfiredist spamassassin
664 ipfiredist subversion
665 ipfiredist videolan
666 ipfiredist webcyradm
667 ipfiredist xvid
668 ipfiredist yasuc
669 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
670 mv -f $LFS/install/packages/*.{ipfire,md5} $BASEDIR/packages >> $LOGFILE 2>&1
671 rm -rf $BASEDIR/build/install/packages/*
672 }
673
674 # See what we're supposed to do
675 case "$1" in
676 build)
677 clear
678 BUILDMACHINE=`uname -m`
679 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
680 #only restore on a clean disk
681 if [ ! -f log/cleanup-toolchain-2-tools ]; then
682 if [ ! -n "$PACKAGE" ]; then
683 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
684 prepareenv
685 buildtoolchain
686 else
687 PACKAGENAME=${PACKAGE%.tar.gz}
688 beautify build_stage "Packaged toolchain compilation"
689 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
690 tar zxf $PACKAGE
691 prepareenv
692 else
693 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
694 fi
695 fi
696 else
697 echo -n "Using installed toolchain" | tee -a $LOGFILE
698 beautify message SKIP
699 prepareenv
700 fi
701
702 beautify build_start
703 beautify build_stage_start "Building base"
704 buildbase
705 beautify build_stage_end
706
707 beautify build_stage_start "Building IPFire"
708 buildipfire
709 beautify build_stage_end
710
711 # Setzen des IPFire Builds
712 if [ "$FIREBUILD" ]; then
713 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
714 else
715 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
716 fi
717
718 beautify build_stage_start "Building installer"
719 buildinstaller
720 beautify build_stage_end
721
722 beautify build_stage_start "Building packages"
723 buildpackages
724 beautify build_stage_end
725 beautify build_end
726 ;;
727 shell)
728 # enter a shell inside LFS chroot
729 # may be used to changed kernel settings
730 prepareenv
731 entershell
732 ;;
733 changelog)
734 echo -n "Loading new Changelog from SVN: "
735 svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
736 beautify message DONE
737 ;;
738 clean)
739 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
740 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
741 $LOSETUP -d $i 2>/dev/null
742 done
743 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
744 umount $i
745 done
746 stdumount
747 for i in `seq 0 7`; do
748 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
749 umount /dev/loop${i} 2>/dev/null;
750 losetup -d /dev/loop${i} 2>/dev/null;
751 fi;
752 done
753 rm -rf $BASEDIR/build
754 rm -rf $BASEDIR/cdrom
755 rm -rf $BASEDIR/packages
756 rm -rf $BASEDIR/log
757 if [ -h /tools ]; then
758 rm -f /tools
759 fi
760 beautify message DONE
761 ;;
762 downloadsrc)
763 if [ ! -d $BASEDIR/cache ]; then
764 mkdir $BASEDIR/cache
765 fi
766 mkdir -p $BASEDIR/log
767 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
768 FINISHED=0
769 cd $BASEDIR/lfs
770 for c in `seq $MAX_RETRIES`; do
771 if (( FINISHED==1 )); then
772 break
773 fi
774 FINISHED=1
775 cd $BASEDIR/lfs
776 for i in *; do
777 if [ -f "$i" -a "$i" != "Config" ]; then
778 echo -ne "Loading $i"
779 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
780 if [ $? -ne 0 ]; then
781 beautify message FAIL
782 FINISHED=0
783 else
784 if [ $c -eq 1 ]; then
785 beautify message DONE
786 fi
787 fi
788 fi
789 done
790 done
791 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
792 ERROR=0
793 for i in *; do
794 if [ -f "$i" -a "$i" != "Config" ]; then
795 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
796 if [ $? -ne 0 ]; then
797 echo -ne "MD5 difference in lfs/$i"
798 beautify message FAIL
799 ERROR=1
800 fi
801 fi
802 done
803 if [ $ERROR -eq 0 ]; then
804 echo -ne "${BOLD}all files md5sum match${NORMAL}"
805 beautify message DONE
806 else
807 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
808 beautify message FAIL
809 fi
810 cd - >/dev/null 2>&1
811 ;;
812 toolchain)
813 clear
814 prepareenv
815 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
816 buildtoolchain
817 BUILDMACHINE=`uname -m`
818 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
819 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
820 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
821 build/{bin,etc,usr/bin,usr/local} \
822 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
823 log >> $LOGFILE
824 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
825 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
826 stdumount
827 ;;
828 gettoolchain)
829 BUILDMACHINE=`uname -m`
830 # arbitrary name to be updated in case of new toolchain package upload
831 PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
832 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
833 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
834 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
835 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
836 cd $BASEDIR/cache/toolchains
837 wget $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
838 if [ $? -ne 0 ]; then
839 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
840 else
841 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
842 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
843 else
844 exiterror "$PACKAGE.md5 did not match, check downloaded package"
845 fi
846 fi
847 else
848 echo "Toolchain is already downloaded. Exiting..."
849 fi
850 ;;
851 othersrc)
852 prepareenv
853 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
854 chroot $LFS /tools/bin/env -i HOME=/root \
855 TERM=$TERM PS1='\u:\w\$ ' \
856 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
857 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
858 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
859 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
860 if [ $? -eq "0" ]; then
861 beautify message DONE
862 else
863 beautify message FAIL
864 fi
865 stdumount
866 ;;
867 svn)
868 case "$2" in
869 update|up)
870 # clear
871 echo -ne "Loading the latest source files...\n"
872 if [ $3 ]; then
873 svn update -r $3 | tee -a $PWD/log/_build.svn.update.log
874 else
875 svn update | tee -a $PWD/log/_build.svn.update.log
876 fi
877 if [ $? -eq "0" ]; then
878 beautify message DONE
879 else
880 beautify message FAIL
881 exit 1
882 fi
883 echo -ne "Writing the svn-info to a file"
884 svn info > $PWD/svn_status
885 if [ $? -eq "0" ]; then
886 beautify message DONE
887 else
888 beautify message FAIL
889 exit 1
890 fi
891 chmod 755 $0
892 exit 0
893 ;;
894 commit|ci)
895 clear
896 if [ -f /usr/bin/mcedit ]; then
897 export EDITOR=/usr/bin/mcedit
898 fi
899 if [ -f /usr/bin/nano ]; then
900 export EDITOR=/usr/bin/nano
901 fi
902 echo -ne "Selecting editor $EDITOR..."
903 beautify message DONE
904 if [ -e /sbin/yast ]; then
905 if [ "`echo $SVN_REVISION | cut -c 3`" -eq "0" ]; then
906 $0 changelog
907 fi
908 fi
909 svn commit
910 $0 svn up
911 $0 uploadsrc
912 ;;
913 dist)
914 if [ $3 ]; then
915 SVN_REVISION=$3
916 fi
917 if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
918 echo -ne "REV $SVN_REVISION: SKIPPED!\n"
919 exit 0
920 fi
921 echo -en "REV $SVN_REVISION: Downloading..."
922 svn export http://svn.ipfire.eu/svn/ipfire/trunk ipfire-source/ --force > /dev/null
923 svn log http://svn.ipfire.eu/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
924 #svn info http://svn.ipfire.eu/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
925 evaluate 1
926
927 echo -en "REV $SVN_REVISION: Compressing files..."
928 if [ -e ipfire-source/trunk/make.sh ]; then
929 chmod 755 ipfire-source/trunk/make.sh
930 fi
931 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
932 evaluate 1
933 echo -en "REV $SVN_REVISION: Cleaning up..."
934 rm ipfire-source/ -r
935 evaluate 1
936 ;;
937 diff|di)
938 echo -ne "Make a local diff to last svn revision"
939 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
940 evaluate 1
941 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
942 ;;
943 esac
944 ;;
945 uploadsrc)
946 PWD=`pwd`
947 cd $BASEDIR/cache/
948 echo -e "Uploading cache to ftp server:"
949 ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > /var/tmp/ftplist
950 for i in *; do
951 if [ "$i" == "toolchains" ]; then continue; fi
952 grep -q $i /var/tmp/ftplist
953 if [ "$?" -ne "0" ]; then
954 echo -ne "$i"
955 ncftpput -bb -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ $i >> $BASEDIR/log/_build.uploadsrc.log 2>&1
956 if [ "$?" -eq "0" ]; then
957 beautify message DONE
958 else
959 beautify message FAIL
960 fi
961 fi
962 done
963 rm -f /var/tmp/ftplist
964 UL_TIME_START=`date +'%s'`
965 ncftpbatch -d > /dev/null 2>&1
966 while ps acx | grep -q ncftpbatch
967 do
968 UL_TIME=$(expr `date +'%s'` - $UL_TIME_START)
969 echo -ne "\r ${UL_TIME}s : Upload is running..."
970 sleep 1
971 done
972 beautify message DONE
973 cd $PWD
974 exit 0
975 ;;
976 upload)
977 case "$2" in
978 iso)
979 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
980 cat <<EOF > .ftp-commands
981 mkdir $IPFIRE_FTP_PATH_EXT
982 ls -lah
983 quit
984 EOF
985 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
986 rm -f .ftp-commands
987 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
988 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
989 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso.md5
990 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-source-r$SVN_REVISION.tar.gz
991 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
992 if [ "$?" -eq "0" ]; then
993 echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
994 else
995 echo -e "There was an error while uploading the iso to the ftp server."
996 exit 1
997 fi
998 if [ "$3" = "--with-sources-cd" ]; then
999 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-sources-cd-$VERSION.$MACHINE.iso
1000 fi
1001 ;;
1002 paks)
1003 cat <<EOF > .ftp-commands
1004 mkdir $IPFIRE_FTP_PATH_PAK
1005 ls -lah
1006 quit
1007 EOF
1008 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
1009 rm -f .ftp-commands
1010 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1011 if [ "$?" -eq "0" ]; then
1012 echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
1013 else
1014 echo -e "There was an error while uploading the packages to the ftp server."
1015 exit 1
1016 fi
1017 ;;
1018 esac
1019 ;;
1020 batch)
1021 if [ "$2" -eq "--background" ]; then
1022 batch_script
1023 exit $?
1024 fi
1025 if [ `screen -ls | grep -q ipfire` ]; then
1026 echo "Build is already running, sorry!"
1027 exit 1
1028 else
1029 if [ "$2" = "--rebuild" ]; then
1030 export IPFIRE_REBUILD=1
1031 echo "REBUILD!"
1032 else
1033 export IPFIRE_REBUILD=0
1034 fi
1035 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
1036 screen -dmS ipfire $0 batch --background
1037 evaluate 1
1038 exit 0
1039 fi
1040 ;;
1041 watch)
1042 watch_screen
1043 ;;
1044 pxe)
1045 case "$2" in
1046 start)
1047 start_tftpd
1048 ;;
1049 stop)
1050 stop_tftpd
1051 ;;
1052 reload|restart)
1053 reload_tftpd
1054 ;;
1055 esac
1056 exit 0
1057 ;;
1058 "")
1059 clear
1060 svn info
1061 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"
1062 do
1063 case $name in
1064 "IPFIRE: Downloadsrc")
1065 $0 downloadsrc
1066 ;;
1067 "IPFIRE: Build (silent)")
1068 $0 build-silent
1069 ;;
1070 "IPFIRE: Watch Build")
1071 $0 watch
1072 ;;
1073 "IPFIRE: Batch")
1074 $0 batch
1075 ;;
1076 "IPFIRE: Clean")
1077 $0 clean
1078 ;;
1079 "SVN: Update")
1080 $0 svn update
1081 ;;
1082 "Help")
1083 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1084 cat doc/make.sh-usage
1085 ;;
1086 "LOG: Tail")
1087 tail -f log/_*
1088 ;;
1089 "Exit")
1090 break
1091 ;;
1092 esac
1093 done
1094 ;;
1095 config)
1096 make_config
1097 ;;
1098 *)
1099 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1100 cat doc/make.sh-usage
1101 ;;
1102 esac