]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - make.sh
8540f16cf9fcc321c827aab318cd04c4d3c1fda0
[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) 2007 IPFire-Team <info@ipfire.org>. #
21 # #
22 ############################################################################
23 #
24
25 NAME="IPFire" # Software name
26 SNAME="ipfire" # Short name
27 VERSION="2.0beta1" # 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 versions should be compiled? (full|devel)
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="-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
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 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
317 buildipfire() {
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 r8169 SMP=1
332 ipfiremake zaptel SMP=1
333 ipfiremake linux
334 ipfiremake ipp2p
335 ipfiremake r8169
336 ipfiremake zaptel
337 ipfiremake pkg-config
338 ipfiremake cpio
339 ipfiremake klibc
340 ipfiremake mkinitcpio
341 ipfiremake udev KLIBC=1
342 ipfiremake expat
343 ipfiremake gdbm
344 ipfiremake gmp
345 ipfiremake pam
346 ipfiremake openssl
347 ipfiremake curl
348 ipfiremake python
349 ipfiremake libnet
350 ipfiremake libjpeg
351 ipfiremake libpng
352 ipfiremake libtiff
353 ipfiremake libart
354 ipfiremake freetype
355 ipfiremake gd
356 ipfiremake popt
357 ipfiremake pcre
358 ipfiremake slang
359 ipfiremake newt
360 ipfiremake libcap
361 ipfiremake pciutils
362 ipfiremake usbutils
363 ipfiremake libxml2
364 ipfiremake libxslt
365 ipfiremake BerkeleyDB
366 ipfiremake mysql
367 ipfiremake cyrus-sasl
368 ipfiremake openldap
369 ipfiremake apache2
370 ipfiremake php
371 ipfiremake apache2 PASS=C
372 ipfiremake arping
373 ipfiremake beep
374 ipfiremake bind
375 ipfiremake cdrtools
376 ipfiremake dnsmasq
377 ipfiremake dosfstools
378 ipfiremake squashfstools
379 ipfiremake reiserfsprogs
380 ipfiremake sysfsutils
381 ipfiremake fuse
382 ipfiremake ntfs-3g
383 ipfiremake ethtool
384 ipfiremake ez-ipupdate
385 ipfiremake fcron
386 ipfiremake perl-GD
387 ipfiremake GD-Graph
388 ipfiremake GD-TextUtil
389 ipfiremake gnupg
390 ipfiremake hdparm
391 ipfiremake mtools
392 ipfiremake initscripts
393 ipfiremake whatmask
394 ipfiremake iptables
395 ipfiremake libupnp
396 ipfiremake ipp2p IPT=1
397 ipfiremake moblock
398 ipfiremake linux-igd
399 ipfiremake ipac-ng
400 ipfiremake ipaddr
401 ipfiremake iptstate
402 ipfiremake iputils
403 ipfiremake l7-protocols
404 ipfiremake mISDN
405 ipfiremake hwdata
406 ipfiremake kudzu
407 ipfiremake logrotate
408 ipfiremake logwatch
409 ipfiremake misc-progs
410 ipfiremake nano
411 ipfiremake nasm
412 ipfiremake URI
413 ipfiremake HTML-Tagset
414 ipfiremake HTML-Parser
415 ipfiremake Compress-Zlib
416 ipfiremake Digest
417 ipfiremake Digest-SHA1
418 ipfiremake Digest-HMAC
419 ipfiremake libwww-perl
420 ipfiremake Net-DNS
421 ipfiremake Net-IPv4Addr
422 ipfiremake Net_SSLeay
423 ipfiremake IO-Stringy
424 ipfiremake Unix-Syslog
425 ipfiremake Mail-Tools
426 ipfiremake MIME-Tools
427 ipfiremake Net-Server
428 ipfiremake Convert-TNEF
429 ipfiremake Convert-UUlib
430 ipfiremake Archive-Tar
431 ipfiremake Archive-Zip
432 ipfiremake Text-Tabs+Wrap
433 ipfiremake Locale-Country
434 ipfiremake XML-Parser
435 ipfiremake MP3-Info
436 ipfiremake MP3-Tag
437 ipfiremake glib
438 ipfiremake GeoIP
439 ipfiremake fwhits
440 ipfiremake noip_updater
441 ipfiremake ntp
442 ipfiremake openssh
443 ipfiremake openswan
444 ipfiremake rrdtool
445 ipfiremake setserial
446 ipfiremake setup
447 ipfiremake snort
448 ipfiremake oinkmaster
449 ipfiremake squid
450 ipfiremake squid-graph
451 ipfiremake squidguard
452 ipfiremake calamaris
453 ipfiremake tcpdump
454 ipfiremake traceroute
455 ipfiremake vlan
456 ipfiremake wireless
457 ipfiremake libsafe
458 ipfiremake pakfire
459 ipfiremake java
460 ipfiremake spandsp
461 ipfiremake lzo
462 ipfiremake openvpn
463 ipfiremake pammysql
464 ipfiremake cups
465 ipfiremake ghostscript
466 ipfiremake foomatic
467 ipfiremake samba
468 ipfiremake sudo
469 ipfiremake mc
470 ipfiremake wget
471 ipfiremake bridge-utils
472 ipfiremake screen
473 ipfiremake hddtemp
474 ipfiremake smartmontools
475 ipfiremake htop
476 ipfiremake postfix
477 ipfiremake fetchmail
478 ipfiremake cyrusimap
479 ipfiremake webcyradm
480 ipfiremake mailx
481 ipfiremake clamav
482 ipfiremake spamassassin
483 ipfiremake amavisd
484 ipfiremake alsa
485 ipfiremake mpg123
486 ipfiremake mpfire
487 ipfiremake guardian
488 ipfiremake libmad
489 ipfiremake libogg
490 ipfiremake libvorbis
491 ipfiremake lame
492 ipfiremake sox
493 ipfiremake libshout
494 ipfiremake icecast
495 ipfiremake icegenerator
496 ipfiremake mpd
497 ipfiremake mp3blaster
498 ipfiremake libpri
499 ipfiremake stund
500 ipfiremake asterisk
501 ipfiremake backup
502 ipfiremake gnump3d
503 ipfiremake libsigc++
504 ipfiremake applejuice
505 ipfiremake ocaml
506 ipfiremake mldonkey
507 ipfiremake libtorrent
508 ipfiremake rtorrent
509 ipfiremake ipfireseeder
510 ipfiremake rsync
511 ipfiremake tcpwrapper
512 ipfiremake portmap
513 ipfiremake nfs
514 ipfiremake nmap
515 ipfiremake mbmon
516 ipfiremake iftop
517 ipfiremake ncftp
518 ipfiremake cftp
519 ipfiremake etherwake
520 ipfiremake ethereal
521 ipfiremake tftp-hpa
522 ipfiremake bwm-ng
523 ipfiremake tripwire
524 ipfiremake sysstat
525 ipfiremake vsftpd
526 ipfiremake which
527 ipfiremake lsof
528 }
529
530 buildinstaller() {
531 # Run installer scripts one by one
532 LOGFILE="$BASEDIR/log/_build.installer.log"
533 export LOGFILE
534 ipfiremake syslinux
535 ipfiremake as86
536 ipfiremake mbr
537 ipfiremake memtest
538 installmake linux-libc-header
539 installmake binutils
540 ipfiremake uClibc PASS=1
541 ipfiremake gcc INST=1
542 installmake uClibc PASS=2
543 installmake gcc INST=2
544 installmake uClibc PASS=3
545 installmake busybox
546 installmake udev
547 installmake slang
548 installmake newt
549 installmake gettext
550 installmake kbd
551 installmake popt
552 installmake sysvinit
553 installmake misc-progs
554 installmake libaal
555 installmake reiser4progs
556 installmake reiserfsprogs
557 installmake sysfsutils
558 installmake util-linux
559 installmake pciutils
560 installmake zlib
561 installmake mtd
562 installmake wget
563 installmake hwdata
564 installmake kudzu
565 installmake installer
566 installmake initrd
567 }
568
569 buildpackages() {
570 LOGFILE="$BASEDIR/log/_build.packages.log"
571 export LOGFILE
572 echo "... see detailed log in _build.*.log files" >> $LOGFILE
573
574 installmake strip
575
576 # Generating list of packages used
577 echo -n "Generating packages list from logs" | tee -a $LOGFILE
578 rm -f $BASEDIR/doc/packages-list
579 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
580 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
581 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
582 fi
583 done
584 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
585 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$' \
586 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
587 rm -f $BASEDIR/doc/packages-list
588 # packages-list.txt is ready to be displayed for wiki page
589 beautify message DONE
590
591 # Create images for install
592 ipfiremake cdrom ED=full
593
594 # Check if there is a loop device for building in virtual environments
595 if [ -e /dev/loop/0 ] || [ -e /dev/loop0 ]; then
596 ipfiremake usb-stick
597 fi
598 ipfiremake pxe
599 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz} $BASEDIR >> $LOGFILE 2>&1
600
601 ipfirepackages
602
603 # Cleanup
604 stdumount
605 rm -rf $BASEDIR/build/tmp/*
606
607 # Generating total list of files
608 echo -n "Generating files list from logs" | tee -a $LOGFILE
609 rm -f $BASEDIR/log/FILES
610 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
611 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
612 echo "##" >>$BASEDIR/log/FILES
613 echo "## `basename $i`" >>$BASEDIR/log/FILES
614 echo "##" >>$BASEDIR/log/FILES
615 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
616 fi
617 done
618 beautify message DONE
619
620 cd $PWD
621 }
622
623 ipfirepackages() {
624 ipfiremake core-updates
625 for i in $(ls -1 $BASEDIR/config/rootfiles/packages); do
626 [ -e $BASEDIR/lfs/$i ] && ipfiredist $i
627 done
628 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
629 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
630 rm -rf $BASEDIR/build/install/packages/*
631 }
632
633 # See what we're supposed to do
634 case "$1" in
635 build)
636 clear
637 BUILDMACHINE=`uname -m`
638 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
639 #only restore on a clean disk
640 if [ ! -f log/cleanup-toolchain-2-tools ]; then
641 if [ ! -n "$PACKAGE" ]; then
642 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
643 prepareenv
644 buildtoolchain
645 else
646 PACKAGENAME=${PACKAGE%.tar.gz}
647 beautify build_stage "Packaged toolchain compilation"
648 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
649 tar zxf $PACKAGE
650 prepareenv
651 else
652 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
653 fi
654 fi
655 else
656 echo -n "Using installed toolchain" | tee -a $LOGFILE
657 beautify message SKIP
658 prepareenv
659 fi
660
661 beautify build_start
662 beautify build_stage "Building LFS"
663 buildbase
664
665 beautify build_stage "Building IPFire"
666 buildipfire
667
668 # Setzen des IPFire Builds
669 if [ "$FIREBUILD" ]; then
670 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
671 else
672 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
673 fi
674
675 beautify build_stage "Building installer"
676 buildinstaller
677
678 beautify build_stage "Building packages"
679 buildpackages
680 beautify build_end
681 ;;
682 shell)
683 # enter a shell inside LFS chroot
684 # may be used to changed kernel settings
685 prepareenv
686 entershell
687 ;;
688 changelog)
689 echo -n "Loading new Changelog from SVN: "
690 svn log http://svn.ipfire.org/svn/ipfire > doc/ChangeLog
691 beautify message DONE
692 ;;
693 clean)
694 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
695 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
696 $LOSETUP -d $i 2>/dev/null
697 done
698 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
699 umount $i
700 done
701 stdumount
702 for i in `seq 0 7`; do
703 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
704 umount /dev/loop${i} 2>/dev/null;
705 losetup -d /dev/loop${i} 2>/dev/null;
706 fi;
707 done
708 rm -rf $BASEDIR/build
709 rm -rf $BASEDIR/cdrom
710 rm -rf $BASEDIR/packages
711 rm -rf $BASEDIR/log
712 if [ -h /tools ]; then
713 rm -f /tools
714 fi
715 beautify message DONE
716 ;;
717 downloadsrc)
718 if [ ! -d $BASEDIR/cache ]; then
719 mkdir $BASEDIR/cache
720 fi
721 mkdir -p $BASEDIR/log
722 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
723 FINISHED=0
724 cd $BASEDIR/lfs
725 for c in `seq $MAX_RETRIES`; do
726 if (( FINISHED==1 )); then
727 break
728 fi
729 FINISHED=1
730 cd $BASEDIR/lfs
731 for i in *; do
732 if [ -f "$i" -a "$i" != "Config" ]; then
733 echo -ne "Loading $i"
734 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
735 if [ $? -ne 0 ]; then
736 beautify message FAIL
737 FINISHED=0
738 else
739 if [ $c -eq 1 ]; then
740 beautify message DONE
741 fi
742 fi
743 fi
744 done
745 done
746 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
747 ERROR=0
748 for i in *; do
749 if [ -f "$i" -a "$i" != "Config" ]; then
750 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
751 if [ $? -ne 0 ]; then
752 echo -ne "MD5 difference in lfs/$i"
753 beautify message FAIL
754 ERROR=1
755 fi
756 fi
757 done
758 if [ $ERROR -eq 0 ]; then
759 echo -ne "${BOLD}all files md5sum match${NORMAL}"
760 beautify message DONE
761 else
762 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
763 beautify message FAIL
764 fi
765 cd - >/dev/null 2>&1
766 ;;
767 toolchain)
768 clear
769 prepareenv
770 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
771 buildtoolchain
772 BUILDMACHINE=`uname -m`
773 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
774 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
775 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
776 build/{bin,etc,usr/bin,usr/local} \
777 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
778 log >> $LOGFILE
779 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
780 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
781 stdumount
782 ;;
783 gettoolchain)
784 BUILDMACHINE=`uname -m`
785 # arbitrary name to be updated in case of new toolchain package upload
786 PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
787 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
788 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
789 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
790 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
791 cd $BASEDIR/cache/toolchains
792 wget $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
793 if [ $? -ne 0 ]; then
794 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
795 else
796 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
797 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
798 else
799 exiterror "$PACKAGE.md5 did not match, check downloaded package"
800 fi
801 fi
802 else
803 echo "Toolchain is already downloaded. Exiting..."
804 fi
805 ;;
806 othersrc)
807 prepareenv
808 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
809 chroot $LFS /tools/bin/env -i HOME=/root \
810 TERM=$TERM PS1='\u:\w\$ ' \
811 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
812 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
813 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
814 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
815 if [ $? -eq "0" ]; then
816 beautify message DONE
817 else
818 beautify message FAIL
819 fi
820 stdumount
821 ;;
822 svn)
823 case "$2" in
824 update|up)
825 # clear
826 echo -ne "Loading the latest source files...\n"
827 if [ $3 ]; then
828 svn update -r $3 | tee -a $PWD/log/_build.svn.update.log
829 else
830 svn update | tee -a $PWD/log/_build.svn.update.log
831 fi
832 if [ $? -eq "0" ]; then
833 beautify message DONE
834 else
835 beautify message FAIL
836 exit 1
837 fi
838 echo -ne "Writing the svn-info to a file"
839 svn info > $PWD/svn_status
840 if [ $? -eq "0" ]; then
841 beautify message DONE
842 else
843 beautify message FAIL
844 exit 1
845 fi
846 chmod 755 $0
847 exit 0
848 ;;
849 commit|ci)
850 clear
851 if [ -f /usr/bin/mcedit ]; then
852 export EDITOR=/usr/bin/mcedit
853 fi
854 if [ -f /usr/bin/nano ]; then
855 export EDITOR=/usr/bin/nano
856 fi
857 echo -ne "Selecting editor $EDITOR..."
858 beautify message DONE
859 if [ -e /sbin/yast ]; then
860 if [ "`echo $SVN_REVISION | cut -c 3`" -eq "0" ]; then
861 $0 changelog
862 fi
863 fi
864 update_langs
865 svn commit
866 $0 svn up
867 if [ -n "$FTP_CACHE_URL" ]; then
868 $0 uploadsrc
869 fi
870 ;;
871 dist)
872 if [ $3 ]; then
873 SVN_REVISION=$3
874 fi
875 if [ -f ipfire-source-r$SVN_REVISION.tar.gz ]; then
876 echo -ne "REV $SVN_REVISION: SKIPPED!\n"
877 exit 0
878 fi
879 echo -en "REV $SVN_REVISION: Downloading..."
880 svn export http://svn.ipfire.org/svn/ipfire/trunk ipfire-source/ --force > /dev/null
881 svn log http://svn.ipfire.org/svn/ipfire/trunk -r 1:$SVN_REVISION > ipfire-source/Changelog
882 #svn info http://svn.ipfire.org/svn/ipfire/trunk -r $SVN_REVISION > ipfire-source/svn_status
883 evaluate 1
884
885 echo -en "REV $SVN_REVISION: Compressing files..."
886 if [ -e ipfire-source/trunk/make.sh ]; then
887 chmod 755 ipfire-source/trunk/make.sh
888 fi
889 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
890 evaluate 1
891 echo -en "REV $SVN_REVISION: Cleaning up..."
892 rm ipfire-source/ -r
893 evaluate 1
894 ;;
895 diff|di)
896 update_langs
897 echo -ne "Make a local diff to last svn revision"
898 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
899 evaluate 1
900 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
901 svn status
902 ;;
903 esac
904 ;;
905 uploadsrc)
906 PWD=`pwd`
907 cd $BASEDIR/cache/
908 echo -e "Uploading cache to ftp server:"
909 ncftpls -u $FTP_CACHE_USER -p $FTP_CACHE_PASS ftp://$FTP_CACHE_URL$FTP_CACHE_PATH/ > /tmp/ftplist
910 for i in *; do
911 if [ "$i" == "toolchains" ]; then continue; fi
912 grep -q $i /tmp/ftplist
913 if [ "$?" -ne "0" ]; then
914 echo -ne "$i"
915 ncftpput -u $FTP_CACHE_USER -p $FTP_CACHE_PASS $FTP_CACHE_URL $FTP_CACHE_PATH/ $i
916 if [ "$?" -ne "0" ]; then
917 beautify message FAIL
918 fi
919 fi
920 done
921 rm -f /tmp/ftplist
922 cd $PWD
923 exit 0
924 ;;
925 upload)
926 FTP_ISO_PORT=`echo "$FTP_ISO_URL" | awk -F: '{ print $2 }'`
927 FTP_ISO_URL=`echo "$FTP_ISO_URL" | awk -F: '{ print $1 }'`
928 if [ -z $FTP_ISO_PORT ]; then
929 FTP_ISO_PORT=21
930 fi
931 cat <<EOF > .ftp-commands
932 mkdir -p $FTP_ISO_PATH$SVN_REVISION
933 mkdir -p $FTP_ISO_PATH$SVN_REVISION/paks
934 quit
935 EOF
936 ncftp -u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL < .ftp-commands
937 rm -f .ftp-commands
938
939 case "$2" in
940 iso)
941 echo -e "Uploading the iso to $FTP_ISO_PATH/$SVN_REVISION."
942
943 md5sum ipfire-$VERSION.$MACHINE-full.iso > ipfire-$VERSION.$MACHINE-full.iso.md5
944 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
945 if [ -e "$i" ]; then
946 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/ $i
947 if [ "$?" -eq "0" ]; then
948 echo "The file with name $i was successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
949 else
950 echo "There was an error while uploading the file $i to the ftp server."
951 exit 1
952 fi
953 fi
954 done
955 rm -f ipfire-$VERSION.$MACHINE-full.iso.md5
956 if [ "$3" = "--with-sources-cd" ]; then
957 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
958 fi
959 ;;
960 paks)
961 ncftpput -u $FTP_ISO_USER -p $FTP_ISO_PASS -P $FTP_ISO_PORT $FTP_ISO_URL $FTP_ISO_PATH$SVN_REVISION/paks packages/*
962 if [ "$?" -eq "0" ]; then
963 echo -e "The packages were successfully uploaded to $FTP_ISO_URL$FTP_ISO_PATH$SVN_REVISION/."
964 else
965 echo -e "There was an error while uploading the packages to the ftp server."
966 exit 1
967 fi
968 ;;
969 esac
970 ;;
971 batch)
972 if [ "$2" = "--background" ]; then
973 batch_script
974 exit $?
975 fi
976 if [ `screen -ls | grep -q ipfire` ]; then
977 echo "Build is already running, sorry!"
978 exit 1
979 else
980 if [ "$2" = "--rebuild" ]; then
981 export IPFIRE_REBUILD=1
982 echo "REBUILD!"
983 else
984 export IPFIRE_REBUILD=0
985 fi
986 echo -en "${BOLD}***IPFire-Batch-Build is starting...${NORMAL}"
987 screen -dmS ipfire $0 batch --background
988 evaluate 1
989 exit 0
990 fi
991 ;;
992 watch)
993 watch_screen
994 ;;
995 pxe)
996 case "$2" in
997 start)
998 start_tftpd
999 ;;
1000 stop)
1001 stop_tftpd
1002 ;;
1003 reload|restart)
1004 reload_tftpd
1005 ;;
1006 esac
1007 exit 0
1008 ;;
1009 lang)
1010 update_langs
1011 ;;
1012 "")
1013 clear
1014 svn info
1015 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"
1016 do
1017 case $name in
1018 "IPFIRE: Downloadsrc")
1019 $0 downloadsrc
1020 ;;
1021 "IPFIRE: Build (silent)")
1022 $0 build-silent
1023 ;;
1024 "IPFIRE: Watch Build")
1025 $0 watch
1026 ;;
1027 "IPFIRE: Batch")
1028 $0 batch
1029 ;;
1030 "IPFIRE: Clean")
1031 $0 clean
1032 ;;
1033 "SVN: Update")
1034 $0 svn update
1035 ;;
1036 "Help")
1037 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1038 cat doc/make.sh-usage
1039 ;;
1040 "LOG: Tail")
1041 tail -f log/_*
1042 ;;
1043 "Exit")
1044 break
1045 ;;
1046 esac
1047 done
1048 ;;
1049 config)
1050 make_config
1051 ;;
1052 *)
1053 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1054 cat doc/make.sh-usage
1055 ;;
1056 esac