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