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