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