]> git.ipfire.org Git - ipfire-2.x.git/blame_incremental - make.sh
Hinzugefuegt:
[ipfire-2.x.git] / make.sh
... / ...
CommitLineData
1#!/bin/bash
2#
3############################################################################
4# #
5# This file is part of the IPFire Firewall. #
6# #
7# IPFire is free software; you can redistribute it and/or modify #
8# it under the terms of the GNU General Public License as published by #
9# the Free Software Foundation; either version 2 of the License, or #
10# (at your option) any later version. #
11# #
12# IPFire is distributed in the hope that it will be useful, #
13# but WITHOUT ANY WARRANTY; without even the implied warranty of #
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15# GNU General Public License for more details. #
16# #
17# You should have received a copy of the GNU General Public License #
18# along with IPFire; if not, write to the Free Software #
19# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
20# #
21# Copyright (C) 2006 IPFire-Team <entwickler@ipfire.org>. #
22# #
23############################################################################
24#
25
26 NAME="IPFire" # Software name
27 SNAME="ipfire" # Short name
28 VERSION="2.0" # Version number
29 SLOGAN="www.ipfire.org" # Software slogan
30 CONFIG_ROOT=/var/ipfire # Configuration rootdir
31 NICE=10
32 MAX_RETRIES=3 # prefetch/check loop
33 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
34 MACHINE=`uname -m`
35 SVN_REVISION=`svn info | grep Revision | cut -c 11-`
36
37 # Setzen des IPFire Builds
38 if [ -e ./.svn ]; then
39 FIREBUILD=`cat .svn/entries |sed -n 's/^[ \t]*revision=\"// p' | sed -n 's/\".*$// p'`
40 fi
41
42 # Debian specific settings
43 if [ ! -e /etc/debian_version ]; then
44 FULLPATH=`which $0`
45 else
46 if [ -x /usr/bin/realpath ]; then
47 FULLPATH=`/usr/bin/realpath $0`
48 else
49 echo "ERROR: Need to do apt-get install realpath"
50 exit 1
51 fi
52 fi
53
54 PWD=`pwd`
55 BASENAME=`basename $0`
56 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
57 LOGFILE=$BASEDIR/log/_build.preparation.log
58 export BASEDIR LOGFILE
59 DIR_CHK=$BASEDIR/cache/check
60 mkdir $BASEDIR/log/ 2>/dev/null
61
62 if [ -f .config ]; then
63 . .config
64 fi
65
66 if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE -o 'i486' = $MACHINE -o 'i386' = $MACHINE ]; then
67 echo "`date -u '+%b %e %T'`: Machine is ix86 (or equivalent)" >> $LOGFILE
68 MACHINE=i386
69 BUILDTARGET=i386-pc-linux-gnu
70 CFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
71 CXXFLAGS="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
72 elif [ 'alpha' = $MACHINE ]; then
73 echo "`date -u '+%b %e %T'`: Machine is Alpha AXP" >> $LOGFILE
74 BUILDTARGET=alpha-unknown-linux-gnu
75 CFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
76 CXXFLAGS="-O2 -mcpu=ev4 -mieee -pipe"
77 else
78 echo "`date -u '+%b %e %T'`: Can't determine your architecture - $MACHINE" >> $LOGFILE
79 exit 1
80 fi
81
82# Define immediately
83stdumount() {
84 umount $BASEDIR/build/dev/pts 2>/dev/null;
85 umount $BASEDIR/build/proc 2>/dev/null;
86 umount $BASEDIR/build/install/mnt 2>/dev/null;
87 umount $BASEDIR/build/usr/src/cache 2>/dev/null;
88 umount $BASEDIR/build/usr/src/ccache 2>/dev/null;
89 umount $BASEDIR/build/usr/src/config 2>/dev/null;
90 umount $BASEDIR/build/usr/src/doc 2>/dev/null;
91 umount $BASEDIR/build/usr/src/html 2>/dev/null;
92 umount $BASEDIR/build/usr/src/langs 2>/dev/null;
93 umount $BASEDIR/build/usr/src/lfs 2>/dev/null;
94 umount $BASEDIR/build/usr/src/log 2>/dev/null;
95 umount $BASEDIR/build/usr/src/src 2>/dev/null;
96}
97
98exiterror() {
99 stdumount
100 for i in `seq 0 7`; do
101 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
102 losetup -d /dev/loop${i} 2>/dev/null
103 fi;
104 done
105 echo "ERROR: $*"
106 echo " Check $LOGFILE for errors if applicable"
107 exit 1
108}
109
110entershell() {
111 if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then
112 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/"
113 fi
114 echo "Entering to a shell inside LFS chroot, go out with exit"
115 chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
116 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
117 VERSION=$VERSION CONFIG_ROOT=$CONFIG_ROOT \
118 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
119 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
120 CCACHE_DIR=/usr/src/ccache \
121 CCACHE_HASHDIR=1 \
122 KVER=$KVER \
123 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
124 KGCC="ccache /usr/bin/gcc" \
125 /tools/bin/bash
126 if [ $? -ne 0 ]; then
127 exiterror "chroot error"
128 else
129 stdumount
130 fi
131}
132
133prepareenv() {
134 ############################################################################
135 # #
136 # Are we running the right shell? #
137 # #
138 ############################################################################
139 if [ ! "$BASH" ]; then
140 exiterror "BASH environment variable is not set. You're probably running the wrong shell."
141 fi
142
143 if [ -z "${BASH_VERSION}" ]; then
144 exiterror "Not running BASH shell."
145 fi
146
147
148 ############################################################################
149 # #
150 # Trap on emergency exit #
151 # #
152 ############################################################################
153 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
154
155
156 ############################################################################
157 # #
158 # Resetting our nice level #
159 # #
160 ############################################################################
161 echo "`date -u '+%b %e %T'`: Resetting our nice level to $NICE" | tee -a $LOGFILE
162 renice $NICE $$ > /dev/null
163 if [ `nice` != "$NICE" ]; then
164 exiterror "Failed to set correct nice level"
165 fi
166
167 ############################################################################
168 # #
169 # Checking if running as root user #
170 # #
171 ############################################################################
172 echo "`date -u '+%b %e %T'`: Checking if we're running as root user" | tee -a $LOGFILE
173 if [ `id -u` != 0 ]; then
174 exiterror "Not building as root"
175 fi
176
177
178 ############################################################################
179 # #
180 # Checking for necessary temporary space #
181 # #
182 ############################################################################
183 echo "`date -u '+%b %e %T'`: Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
184 BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
185 BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
186 if (( 2202000 > $BASE_ASPACE )); then
187 BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
188 if (( 2202000 - $BASE_USPACE > $BASE_ASPACE )); then
189 exiterror "Not enough temporary space available, need at least 2.1GB on $BASE_DEV"
190 fi
191 fi
192
193 ############################################################################
194 # #
195 # Building Linux From Scratch system #
196 # #
197 ############################################################################
198 echo "`date -u '+%b %e %T'`: Building Linux From Scratch system" | tee -a $LOGFILE
199
200 # Set umask
201 umask 022
202
203 # Set LFS Directory
204 LFS=$BASEDIR/build
205
206 # Check /tools symlink
207 if [ -h /tools ]; then
208 rm -f /tools
209 fi
210 if [ ! -a /tools ]; then
211 ln -s $BASEDIR/build/tools /
212 fi
213 if [ ! -h /tools ]; then
214 exiterror "Could not create /tools symbolic link."
215 fi
216
217 # Setup environment
218 set +h
219 LC_ALL=POSIX
220 export LFS LC_ALL CFLAGS CXXFLAGS
221 unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
222
223 # Make some extra directories
224 mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
225 mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
226 mkdir -p $BASEDIR/build/dev/pts $BASEDIR/build/proc $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
227
228 # Make all sources and proc available under lfs build
229 mount --bind /dev/pts $BASEDIR/build/dev/pts
230 mount --bind /proc $BASEDIR/build/proc
231 mount --bind $BASEDIR/cache $BASEDIR/build/usr/src/cache
232 mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
233 mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
234 mount --bind $BASEDIR/doc $BASEDIR/build/usr/src/doc
235 mount --bind $BASEDIR/html $BASEDIR/build/usr/src/html
236 mount --bind $BASEDIR/langs $BASEDIR/build/usr/src/langs
237 mount --bind $BASEDIR/lfs $BASEDIR/build/usr/src/lfs
238 mount --bind $BASEDIR/log $BASEDIR/build/usr/src/log
239 mount --bind $BASEDIR/src $BASEDIR/build/usr/src/src
240
241 # Run LFS static binary creation scripts one by one
242 export CCACHE_DIR=$BASEDIR/ccache
243 export CCACHE_HASHDIR=1
244
245 # Remove pre-install list of installed files in case user erase some files before rebuild
246 rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
247}
248
249
250############################################################################
251# #
252# Necessary shell functions #
253# #
254############################################################################
255lfsmake1() {
256 if [ -f $BASEDIR/lfs/$1 ]; then
257 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
258 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download >> $LOGFILE 2>&1
259 if [ $? -ne 0 ]; then
260 exiterror "Download error in $1"
261 fi
262 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1
263 if [ $? -ne 0 ]; then
264 exiterror "md5sum error in $1, check file in cache or signature"
265 fi
266 cd $BASEDIR/lfs && make -f $* BUILDTARGET=$BUILDTARGET \
267 MACHINE=$MACHINE \
268 LFS_BASEDIR=$BASEDIR \
269 ROOT=$LFS \
270 KVER=$KVER \
271 install >> $LOGFILE 2>&1
272 if [ $? -ne 0 ]; then
273 exiterror "Building $*";
274 fi
275 else
276 exiterror "No such file or directory: $BASEDIR/$1"
277 fi
278 return 0
279}
280
281lfsmake2() {
282 if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
283 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
284 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download >> $LOGFILE 2>&1
285 if [ $? -ne 0 ]; then
286 exiterror "Download error in $1"
287 fi
288 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1
289 if [ $? -ne 0 ]; then
290 exiterror "md5sum error in $1, check file in cache or signature"
291 fi
292 chroot $LFS /tools/bin/env -i HOME=/root \
293 TERM=$TERM PS1='\u:\w\$ ' \
294 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
295 VERSION=$VERSION \
296 CONFIG_ROOT=$CONFIG_ROOT \
297 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
298 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
299 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
300 KVER=$KVER \
301 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
302 /tools/bin/bash -x -c "cd /usr/src/lfs && \
303 make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
304 if [ $? -ne 0 ]; then
305 exiterror "Building $*"
306 fi
307 else
308 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
309 fi
310 return 0
311}
312
313ipcopmake() {
314 if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
315 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
316 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download >> $LOGFILE 2>&1
317 if [ $? -ne 0 ]; then
318 exiterror "Download error in $1"
319 fi
320 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1
321 if [ $? -ne 0 ]; then
322 exiterror "md5sum error in $1, check file in cache or signature"
323 fi
324 chroot $LFS /tools/bin/env -i HOME=/root \
325 TERM=$TERM PS1='\u:\w\$ ' \
326 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
327 VERSION=$VERSION \
328 CONFIG_ROOT=$CONFIG_ROOT \
329 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
330 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
331 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
332 KVER=$KVER \
333 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
334 /bin/bash -x -c "cd /usr/src/lfs && \
335 make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
336 if [ $? -ne 0 ]; then
337 exiterror "Building $*"
338 fi
339 else
340 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
341 fi
342 return 0
343}
344
345ipfiredist() {
346 if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
347# if [ ! `ls -w1 $BASEDIR/packages/*.tar.gz | grep $1` ]; then
348 echo "`date -u '+%b %e %T'`: Packaging $1" | tee -a $LOGFILE
349 chroot $LFS /tools/bin/env -i HOME=/root \
350 TERM=$TERM PS1='\u:\w\$ ' \
351 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
352 VERSION=$VERSION \
353 CONFIG_ROOT=$CONFIG_ROOT \
354 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
355 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
356 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
357 KVER=$KVER \
358 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
359 /bin/bash -x -c "cd /usr/src/lfs && \
360 make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1
361 if [ $? -ne 0 ]; then
362 exiterror "Packaging $1"
363 fi
364# else
365# echo "`date -u '+%b %e %T'`: Packaging: The package $1 already exists"
366# fi
367 else
368 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
369 fi
370 return 0
371}
372
373
374installmake() {
375 if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
376 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
377 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download >> $LOGFILE 2>&1
378 if [ $? -ne 0 ]; then
379 exiterror "Download error in $1"
380 fi
381 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1
382 if [ $? -ne 0 ]; then
383 exiterror "md5sum error in $1, check file in cache or signature"
384 fi
385 chroot $LFS /tools/bin/env -i HOME=/root \
386 TERM=$TERM PS1='\u:\w\$ ' \
387 PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \
388 VERSION=$VERSION \
389 CONFIG_ROOT=$CONFIG_ROOT \
390 LFS_PASS="install" \
391 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
392 CFLAGS="-Os" CXXFLAGS="-Os" \
393 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
394 KVER=$KVER \
395 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
396 /bin/bash -x -c "cd /usr/src/lfs && \
397 make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
398 if [ $? -ne 0 ]; then
399 exiterror "Building $*"
400 fi
401 else
402 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
403 fi
404 return 0
405}
406
407buildtoolchain() {
408 LOGFILE="$BASEDIR/log/_build.toolchain.log"
409 export LOGFILE
410 echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" | tee -a $LOGFILE
411 # Build sed now, as we use some extensions
412 ORG_PATH=$PATH
413 NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
414 export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
415 lfsmake1 ccache
416 lfsmake1 sed LFS_PASS=1
417 lfsmake1 m4 LFS_PASS=1
418 lfsmake1 bison LFS_PASS=1
419 lfsmake1 flex LFS_PASS=1
420 lfsmake1 binutils LFS_PASS=1
421 lfsmake1 gcc LFS_PASS=1
422 export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
423
424 lfsmake1 linux
425 lfsmake1 tcl
426 lfsmake1 expect
427 lfsmake1 glibc
428 lfsmake1 dejagnu
429 lfsmake1 gcc LFS_PASS=2
430 lfsmake1 binutils LFS_PASS=2
431 lfsmake1 gawk
432 lfsmake1 coreutils
433 lfsmake1 bzip2
434 lfsmake1 gzip
435 lfsmake1 diffutils
436 lfsmake1 findutils
437 lfsmake1 make
438 lfsmake1 grep
439 lfsmake1 sed LFS_PASS=2
440 lfsmake1 m4 LFS_PASS=2
441 lfsmake1 bison LFS_PASS=2
442 lfsmake1 flex LFS_PASS=2
443 lfsmake1 gettext
444 lfsmake1 ncurses
445 lfsmake1 patch
446 lfsmake1 tar
447 lfsmake1 texinfo
448 lfsmake1 bash
449 lfsmake1 util-linux
450 lfsmake1 perl
451 export PATH=$ORG_PATH
452}
453
454buildbase() {
455 LOGFILE="$BASEDIR/log/_build.base.log"
456 export LOGFILE
457 echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" | tee -a $LOGFILE
458 # Run LFS dynamic binary creation scripts one by one
459 lfsmake2 stage2
460 lfsmake2 makedev
461 lfsmake2 linux
462 lfsmake2 man-pages
463 lfsmake2 glibc
464 lfsmake2 binutils
465 lfsmake2 gcc
466 lfsmake2 coreutils
467 lfsmake2 zlib
468 lfsmake2 mktemp
469 lfsmake2 iana-etc
470 lfsmake2 findutils
471 lfsmake2 gawk
472 lfsmake2 ncurses
473 lfsmake2 vim
474 lfsmake2 m4
475 lfsmake2 bison
476 lfsmake2 less
477 lfsmake2 groff
478 lfsmake2 sed
479 lfsmake2 flex
480 lfsmake2 gettext
481 lfsmake2 net-tools
482 lfsmake2 inetutils
483 lfsmake2 perl
484 lfsmake2 texinfo
485 lfsmake2 autoconf
486 lfsmake2 automake
487 lfsmake2 bash
488 lfsmake2 file
489 lfsmake2 libtool
490 lfsmake2 bzip2
491 lfsmake2 diffutils
492 lfsmake2 ed
493 lfsmake2 kbd
494 lfsmake2 e2fsprogs
495 lfsmake2 grep
496 if [ 'i386' = $MACHINE ]; then
497 lfsmake2 grub
498 elif [ 'alpha' = $MACHINE ]; then
499 lfsmake2 aboot
500 fi
501 lfsmake2 gzip
502 lfsmake2 man
503 lfsmake2 make
504 lfsmake2 modutils
505 lfsmake2 patch
506 lfsmake2 procinfo
507 lfsmake2 procps
508 lfsmake2 psmisc
509 lfsmake2 shadow
510 lfsmake2 sysklogd
511 lfsmake2 sysvinit
512 lfsmake2 tar
513 lfsmake2 util-linux
514}
515
516buildipcop() {
517 # Run IPFire make scripts one by one
518 LOGFILE="$BASEDIR/log/_build.ipfire.log"
519 export LOGFILE
520 echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" | tee -a $LOGFILE
521
522 # Build these first as some of the kernel packages below rely on
523 # these for some of their client program functionality
524 ipcopmake configroot
525 ipcopmake dhcp
526 ipcopmake dhcpcd
527 ipcopmake libusb
528 ipcopmake libpcap
529 ipcopmake linux-atm
530 ipcopmake ppp
531 ipcopmake rp-pppoe
532 ipcopmake unzip
533 # Do SMP now
534 if [ 'i386' = $MACHINE ]; then
535 # abuse the SMP flag, and make an minimal installer kernel first
536 # so that the boot floppy always works.....
537 ipcopmake linux LFS_PASS=ipfire SMP=installer
538 ipcopmake linux LFS_PASS=ipfire SMP=1
539 ipcopmake 3cp4218 SMP=1
540 ipcopmake amedyn SMP=1
541 ipcopmake cxacru SMP=1
542 ipcopmake eagle SMP=1
543
544 # These are here because they have i386 only binary libraries
545 # included in the package.
546 ipcopmake cnx_pci SMP=1
547 ipcopmake fcdsl SMP=1
548 ipcopmake fcdsl2 SMP=1
549 ipcopmake fcdslsl SMP=1
550 ipcopmake fcdslusb SMP=1
551 ipcopmake fcdslslusb SMP=1
552 ipcopmake fcpci SMP=1
553 ipcopmake fcclassic SMP=1
554 ipcopmake pulsar SMP=1
555 ipcopmake unicorn SMP=1
556 ipcopmake promise-sata-300-tx SMP=1
557 fi
558
559 ipcopmake linux LFS_PASS=ipfire
560 ipcopmake 3cp4218
561 ipcopmake amedyn
562 ipcopmake cxacru
563 ipcopmake eciadsl
564 ipcopmake eagle
565 ipcopmake speedtouch
566 if [ 'i386' = $MACHINE ]; then
567 # These are here because they have i386 only binary libraries
568 # included in the package.
569 ipcopmake cnx_pci
570 ipcopmake fcdsl
571 ipcopmake fcdsl2
572 ipcopmake fcdslsl
573 ipcopmake fcdslusb
574 ipcopmake fcdslslusb
575 ipcopmake fcpci
576 ipcopmake fcclassic
577 ipcopmake pulsar
578 ipcopmake unicorn
579 ipcopmake promise-sata-300-tx
580 fi
581
582 ipcopmake pcmcia-cs
583 ipcopmake expat
584 ipcopmake gdbm
585 ipcopmake gmp
586 ipcopmake openssl
587 ipcopmake python
588 ipcopmake libnet
589 ipcopmake libpng
590 ipcopmake libtiff
591 ipcopmake libjpeg
592 ipcopmake lcms
593 ipcopmake libmng
594 ipcopmake freetype
595 ipcopmake gd
596 ipcopmake popt
597 ipcopmake slang
598 ipcopmake newt
599 ipcopmake libcap
600 ipcopmake pciutils
601 ipcopmake pcre
602 ipcopmake apache
603 ipcopmake arping
604 ipcopmake beep
605 ipcopmake bind
606 ipcopmake capi4k-utils
607 ipcopmake cdrtools
608 ipcopmake dnsmasq
609 ipcopmake dosfstools
610 ipcopmake ethtool
611 ipcopmake ez-ipupdate
612 ipcopmake fcron
613 ipcopmake perl-GD
614 ipcopmake gnupg
615 ipcopmake hdparm
616 ipcopmake ibod
617 ipcopmake initscripts
618 ipcopmake iptables
619 ipcopmake ipac-ng
620 ipcopmake ipaddr
621 ipcopmake iproute2
622 ipcopmake iptstate
623 ipcopmake iputils
624 ipcopmake l7-protocols
625 ipcopmake isapnptools
626 ipcopmake isdn4k-utils
627 ipcopmake kudzu
628 ipcopmake logrotate
629 ipcopmake logwatch
630 ipcopmake mingetty
631 ipcopmake misc-progs
632 ipcopmake mtools
633 ipcopmake nano
634 ipcopmake nash
635 ipcopmake nasm
636 ipcopmake URI
637 ipcopmake HTML-Tagset
638 ipcopmake HTML-Parser
639 ipcopmake Compress-Zlib
640 ipcopmake Digest
641 ipcopmake Digest-SHA1
642 ipcopmake Digest-HMAC
643 ipcopmake libwww-perl
644 ipcopmake Net-DNS
645 ipcopmake Net-IPv4Addr
646 ipcopmake Net_SSLeay
647 ipcopmake IO-Stringy
648 ipcopmake Unix-Syslog
649 ipcopmake Mail-Tools
650 ipcopmake MIME-Tools
651 ipcopmake Net-Server
652 ipcopmake Convert-TNEF
653 ipcopmake Convert-UUlib
654 ipcopmake Archive-Tar
655 ipcopmake Archive-Zip
656 ipcopmake Text-Tabs+Wrap
657 ipcopmake Locale-Country
658 ipcopmake GeoIP
659 ipcopmake fwhits
660 ipcopmake berkeley
661 ipcopmake BerkeleyDB ## The Perl module
662 ipcopmake noip_updater
663 ipcopmake ntp
664 ipcopmake oinkmaster
665 ipcopmake openssh
666 ipcopmake openswan
667 ipcopmake pptpclient
668 ipcopmake rrdtool
669 ipcopmake setserial
670 ipcopmake setup
671 ipcopmake snort
672 #ipcopmake speedycgi
673 ipcopmake saslauthd PASS=1
674 ipcopmake openldap
675 ipcopmake squid
676 ipcopmake squid-graph
677 ipcopmake squidguard
678 ipcopmake tcpdump
679 ipcopmake traceroute
680 ipcopmake vlan
681 #ipcopmake wireless
682 ipcopmake libsafe
683 ipcopmake 3c5x9setup
684# echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
685 ipcopmake pakfire
686 ipcopmake startscripts
687## Zuerst die Libs und dann die Programme. Ordnung muss sein!
688 ipcopmake java
689 ipcopmake bootsplash
690 ipcopmake libxml2
691 ipcopmake spandsp
692 ipcopmake lzo
693 ipcopmake openvpn
694 ipcopmake pkg-config
695 ipcopmake glib
696 ipcopmake xampp
697 ipcopmake pam
698 ipcopmake pammysql
699 ipcopmake saslauthd PASS=2
700 ipcopmake xinetd
701 ipcopmake ghostscript
702 ipcopmake cups
703# ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
704 ipcopmake samba
705 ipcopmake sudo
706 ipcopmake mc
707# ipcopmake pwlib
708# ipcopmake openh323
709 ipcopmake wget
710 ipcopmake wput
711 ipcopmake bridge-utils
712 ipcopmake screen
713 ipcopmake hddtemp
714 ipcopmake smartmontools
715 ipcopmake htop
716 ipcopmake lynx
717 echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
718 ipcopmake postfix
719 ipcopmake procmail
720 ipcopmake fetchmail
721 ipcopmake cyrusimap
722 ipcopmake web-cyradm
723 ipcopmake mailx
724 ipcopmake clamav
725 ipcopmake razor
726 ipcopmake spamassassin
727# ipcopmake amavisd
728 echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
729 ipcopmake stund
730 ipcopmake zaptel
731 ipcopmake libpri
732 ipcopmake bristuff
733 ipcopmake asterisk
734 ipcopmake mpg123
735 echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
736 ipcopmake libogg
737 ipcopmake libvorbis
738 ipcopmake lame
739 ipcopmake sox
740 ipcopmake gnump3d
741 echo -ne "`date -u '+%b %e %T'`: Building ### P2P-Clients ### \n" | tee -a $LOGFILE
742 ipcopmake applejuice
743 ipcopmake ocaml
744 ipcopmake mldonkey
745# ipcopmake edonkeyclc
746# ipcopmake sane
747 echo -ne "`date -u '+%b %e %T'`: Building ### Net-Tools ### \n" | tee -a $LOGFILE
748 ipcopmake ntop
749# ipcopmake rsync
750 ipcopmake tcpwrapper
751 ipcopmake portmap
752 ipcopmake nfs
753 ipcopmake nmap
754 ipcopmake mbmon
755 ipcopmake iftop
756 ipcopmake ncftp
757 ipcopmake cftp
758 ipcopmake etherwake
759 ipcopmake ethereal
760 ipcopmake tftp-hpa
761 ipcopmake subversion
762 ipcopmake iptraf
763 ipcopmake nagios
764# ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
765}
766
767buildinstaller() {
768 # Run installer scripts one by one
769 LOGFILE="$BASEDIR/log/_build.installer.log"
770 export LOGFILE
771 echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
772 if [ 'i386' = $MACHINE ]; then
773 ipcopmake syslinux
774 ipcopmake as86
775 ipcopmake mbr
776 ipcopmake uClibc
777 fi
778 installmake busybox
779 installmake sysvinit
780 installmake e2fsprogs
781 installmake misc-progs
782 installmake slang
783 installmake util-linux
784 installmake newt
785 installmake pciutils
786 installmake pcmcia-cs
787 installmake kbd
788 installmake installer
789 installmake scsi.img
790 installmake driver.img
791 installmake initrd
792 installmake boot.img
793}
794
795buildpackages() {
796 LOGFILE="$BASEDIR/log/_build.packages.log"
797 export LOGFILE
798 echo "... see detailed log in _build.*.log files" >> $LOGFILE
799 echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
800 # Strip files
801 echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
802 find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
803 ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
804 -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
805 # add -ls before -exec if you want to verify what files are stripped
806
807 find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
808 -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
809 # there add -v to strip to verify
810
811 if [ 'i386' = $MACHINE ]; then
812 # Create fcdsl packages
813 echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
814 cp $LFS/install/images/fcdsl/license.txt $LFS >> $LOGFILE 2>&1
815 touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
816 cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
817 lib/modules/$KVER/misc/fcdsl*.o.gz \
818 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
819 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
820 etc/fcdsl/fcdsl*.conf \
821 etc/drdsl/{drdsl,drdsl.ini} \
822 license.txt \
823 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
824 rm -f $LFS/license.txt >> $LOGFILE 2>&1
825 cd $BASEDIR
826 fi
827
828 # Generating list of packages used
829 echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
830 rm -f $BASEDIR/doc/packages-list
831 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
832 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
833 echo " * `basename $i`" >>$BASEDIR/doc/packages-list
834 fi
835 done
836 echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
837 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipfire$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|^ipfire-logs' \
838 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
839 rm -f $BASEDIR/doc/packages-list
840 # packages-list.txt is ready to be displayed for wiki page
841
842 # Create ISO for CDRom and USB-superfloppy
843 ipcopmake cdrom
844 rm -f $LFS/install/images/*usb*
845 cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
846
847 ipfirepackages
848
849 # Cleanup
850 stdumount
851 rm -rf $BASEDIR/build/tmp/*
852
853 # Generating total list of files
854 echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
855 rm -f $BASEDIR/log/FILES
856 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
857 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
858 echo "##" >>$BASEDIR/log/FILES
859 echo "## `basename $i`" >>$BASEDIR/log/FILES
860 echo "##" >>$BASEDIR/log/FILES
861 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
862 fi
863 done
864 cd $BASEDIR/packages; ls -w1 *.tar.gz | awk -F ".tar.gz" '{ print $1 }' > $BASEDIR/packages/packages_list.txt
865 echo "###EOF###" >> $BASEDIR/packages/packages_list.txt
866
867 cd $PWD
868
869}
870
871ipfirepackages() {
872 if [ -d "$BASEDIR/packages" ]; then
873 for i in `ls $BASEDIR/packages`; do
874 touch $BASEDIR/build/install/packages/$i.empty
875 done
876 fi
877 ipfiredist amavisd
878 ipfiredist applejuice
879 ipfiredist asterisk
880 ipfiredist clamav
881 ipfiredist cups
882 ipfiredist cyrusimap
883 ipfiredist fetchmail
884 ipfiredist gnump3d
885 ipfiredist iptraf
886 ipfiredist java
887 ipfiredist lame
888 ipfiredist libogg
889 ipfiredist libtiff
890 ipfiredist libvorbis
891 ipfiredist libxml2
892 ipfiredist mailx
893 ipfiredist mldonkey
894 ipfiredist nagios
895 ipfiredist nfs
896 ipfiredist nmap
897 ipfiredist ntop
898 ipfiredist portmap
899 ipfiredist postfix
900 ipfiredist procmail
901 ipfiredist samba
902 ipfiredist sox
903 ipfiredist spamassassin
904 ipfiredist subversion
905 ipfiredist web-cyradm
906 ipfiredist xampp
907# ipfiredist xinetd
908 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
909 mv -f $LFS/install/packages/*.{tar.gz,md5} $BASEDIR/packages >> $LOGFILE 2>&1
910 rm -rf $BASEDIR/build/install/packages/*
911}
912
913update_logs() {
914 tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.*
915 rm -f log/_build.*
916}
917
918# See what we're supposed to do
919case "$1" in
920build)
921 BUILDMACHINE=`uname -m`
922 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
923 #only restore on a clean disk
924 if [ ! -f log/perl-*-tools ]; then
925 if [ ! -n "$PACKAGE" ]; then
926 echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
927 prepareenv
928 buildtoolchain
929 else
930 PACKAGENAME=${PACKAGE%.tar.gz}
931 echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
932 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
933 tar zxf $PACKAGE
934 prepareenv
935 else
936 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
937 fi
938 fi
939 else
940 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
941 prepareenv
942 fi
943
944 buildbase
945 buildipcop
946
947 # Setzen des IPFire Builds
948 if [ "$FIREBUILD" ]; then
949 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
950 else
951 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
952 fi
953
954 buildinstaller
955 buildpackages
956 ;;
957shell)
958 # enter a shell inside LFS chroot
959 # may be used to changed kernel settings
960 prepareenv
961 entershell
962 ;;
963changelog)
964 echo -n "Loading new Changelog from SVN: "
965 svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
966 echo "Finished!"
967 ;;
968check)
969 echo "Checking sources files availability on the web"
970 if [ ! -d $DIR_CHK ]; then
971 mkdir -p $DIR_CHK
972 fi
973 FINISHED=0
974 cd $BASEDIR/lfs
975 for c in `seq $MAX_RETRIES`; do
976 if (( FINISHED==1 )); then
977 break
978 fi
979 FINISHED=1
980 cd $BASEDIR/lfs
981 for i in *; do
982 if [ -f "$i" -a "$i" != "Config" ]; then
983 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
984 MESSAGE="$i\t ($c/$MAX_RETRIES)" check
985 if [ $? -ne 0 ]; then
986 echo "Check : wget error in lfs/$i"
987 FINISHED=0
988 fi
989 fi
990 done
991 done
992 cd -
993 ;;
994checkclean)
995 echo "Erasing sources files availability tags"
996 rm -rf $DIR_CHK/*
997 ;;
998clean)
999 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
1000 $LOSETUP -d $i 2>/dev/null
1001 done
1002 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
1003 umount $i
1004 done
1005 stdumount
1006 for i in `seq 0 7`; do
1007 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
1008 umount /dev/loop${i} 2>/dev/null;
1009 losetup -d /dev/loop${i} 2>/dev/null;
1010 fi;
1011 done
1012 rm -rf $BASEDIR/build
1013 rm -rf $BASEDIR/cdrom
1014 rm -rf $BASEDIR/packages
1015 rm -rf $BASEDIR/log
1016 if [ -h /tools ]; then
1017 rm -f /tools
1018 fi
1019 ;;
1020newpak)
1021 # create structure for a new package
1022 echo -e "Name of the new package: $2"
1023 if [ ! -f "lfs/$2" ]; then
1024 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
1025 mkdir -p src/paks/$2
1026 cd src/paks/$2
1027 echo "`date -u '+%b %e %T'`: Creating files"
1028 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
1029
1030 touch ROOTFILES
1031 touch {,un}install.sh
1032 ## install.sh
1033 echo '#!/bin/bash' > install.sh
1034 echo '#' >> install.sh
1035 echo '#################################################################' >> install.sh
1036 echo '# #' >> install.sh
1037 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1038 echo '# #' >> install.sh
1039 echo '#################################################################' >> install.sh
1040 echo '#' >> install.sh
1041 echo '# Extract the files' >> install.sh
1042 echo 'tar xfz files.tgz -C /' >> install.sh
1043 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1044 ## uninstall.sh
1045 echo '#!/bin/bash' > uninstall.sh
1046 echo '#################################################################' >> uninstall.sh
1047 echo '# #' >> uninstall.sh
1048 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1049 echo '# #' >> uninstall.sh
1050 echo '#################################################################' >> uninstall.sh
1051 echo '#' >> uninstall.sh
1052 echo '# Delete the files' >> uninstall.sh
1053 echo '## Befehl fehlt noch' >> uninstall.sh
1054 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1055 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1056 cd - && svn add lfs/$2 && svn add src/paks/$2
1057
1058 echo -n "Do you want to remove the folders? [y/n]"
1059 read REM
1060 if [ "$REM" == "y" ]; then
1061 echo "Removing the folders..."
1062 svn del src/paks/$2 --force
1063 else
1064 echo "Folders are kept."
1065 fi
1066 else
1067 echo "$2 already exists"
1068 fi
1069 exit 0
1070 ;;
1071prefetch)
1072 if [ ! -d $BASEDIR/cache ]; then
1073 mkdir $BASEDIR/cache
1074 fi
1075 mkdir -p $BASEDIR/log
1076 echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1077 FINISHED=0
1078 cd $BASEDIR/lfs
1079 for c in `seq $MAX_RETRIES`; do
1080 if (( FINISHED==1 )); then
1081 break
1082 fi
1083 FINISHED=1
1084 cd $BASEDIR/lfs
1085 for i in *; do
1086 if [ -f "$i" -a "$i" != "Config" ]; then
1087 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1088 if [ $? -ne 0 ]; then
1089 echo "Prefetch : wget error in lfs/$i"
1090 FINISHED=0
1091 else
1092 if [ $c -eq 1 ]; then
1093 echo "Prefetch : lfs/$i files loaded"
1094 fi
1095 fi
1096 fi
1097 done
1098 done
1099 echo "Prefetch : verifying md5sum"
1100 ERROR=0
1101 for i in *; do
1102 if [ -f "$i" -a "$i" != "Config" ]; then
1103 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1104 if [ $? -ne 0 ]; then
1105 echo "md5 difference in lfs/$i"
1106 ERROR=1
1107 fi
1108 fi
1109 done
1110 if [ $ERROR -eq 0 ]; then
1111 echo "Prefetch : all files md5sum match"
1112 fi
1113 cd -
1114 ;;
1115toolchain)
1116 prepareenv
1117 buildtoolchain
1118 BUILDMACHINE=`uname -m`
1119 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1120 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1121 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1122 build/{bin,etc,usr/bin,usr/local} \
1123 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1124 log >> $LOGFILE
1125 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1126 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1127 stdumount
1128 ;;
1129gettoolchain)
1130 BUILDMACHINE=`uname -m`
1131 # arbitrary name to be updated in case of new toolchain package upload
1132 PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
1133 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1134 URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1135 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1136 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1137 cd $BASEDIR/cache/toolchains
1138 wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1139 if [ $? -ne 0 ]; then
1140 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1141 else
1142 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1143 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1144 else
1145 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1146 fi
1147 fi
1148 else
1149 echo "Toolchain is already downloaded. Exiting..."
1150 fi
1151 ;;
1152sources-iso)
1153 prepareenv
1154 echo "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1155 chroot $LFS /tools/bin/env -i HOME=/root \
1156 TERM=$TERM PS1='\u:\w\$ ' \
1157 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1158 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1159 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1160 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1161 stdumount
1162 ;;
1163svn)
1164 case "$2" in
1165 update|up)
1166 # clear
1167 echo -n "Load the latest source files..."
1168 svn update >> $PWD/log/_build.svn.update.log
1169 if [ $? -eq 0 ]; then
1170 echo ".Done!"
1171 else
1172 echo ".Fail!"
1173 exit 1
1174 fi
1175 echo -n "Write the svn info to a file..."
1176 svn info > $PWD/svn_status
1177 if [ "$?" -eq "0" ]; then
1178 echo ".Done!"
1179 else
1180 echo ".Fail!"
1181 exit 1
1182 fi
1183 chmod 755 $0
1184 exit 0
1185 ;;
1186 commit|ci)
1187 clear
1188 if [ -e /sbin/yast ]; then
1189 $0 changelog
1190 fi
1191 echo "Upload the changed files..."
1192 sleep 1
1193 IPFIRE_SVN_MESSAGE=/tmp/ipfire-svn-co-message.txt
1194 rm -f $IPFIRE_SVN_MESSAGE
1195 mcedit $IPFIRE_SVN_MESSAGE
1196 svn commit -F $IPFIRE_SVN_MESSAGE
1197 rm -f $IPFIRE_SVN_MESSAGE
1198 $0 svn up
1199 ;;
1200 dist)
1201 #$0 svn up
1202 echo -ne "Download source package from svn..."
1203 svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
1204 if [ "$?" -eq "0" ]; then
1205 echo ".Done!"
1206 else
1207 echo ".Fail!"
1208 exit 1
1209 fi
1210 echo -n "Compress files..."
1211 tar cfz ipfire-source-r$SVN_REVISION.tar.gz ipfire-source
1212 if [ "$?" -eq "0" ]; then
1213 echo ".Done!"
1214 else
1215 echo ".Fail!"
1216 exit 1
1217 fi
1218 echo -n "Cleanup..."
1219 rm ipfire-source/ -r
1220 if [ "$?" -eq "0" ]; then
1221 echo ".Done!"
1222 else
1223 echo ".Fail!"
1224 exit 1
1225 fi
1226 ;;
1227 diff)
1228 echo -ne "Make a local diff to last svn revision..."
1229 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1230 if [ "$?" -eq "0" ]; then
1231 echo ".Done!"
1232 else
1233 echo ".Fail!"
1234 exit 1
1235 fi
1236 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1237 ;;
1238 esac
1239 ;;
1240make-config)
1241 echo -e "This is for creating your configuration..."
1242 echo -e "We will need some input:"
1243 echo -e ""
1244 echo -n "FTP-DOMAIN FOR THE ISO: "
1245 read IPFIRE_FTP_URL_EXT
1246 echo -n "PATH FOR $IPFIRE_FTP_URL_EXT: "
1247 read IPFIRE_FTP_PATH_EXT
1248 echo -n "USERNAME FOR $IPFIRE_FTP_URL_EXT: "
1249 read IPFIRE_FTP_USER_EXT
1250 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_EXT: "
1251 read -s IPFIRE_FTP_PASS_EXT
1252 echo ""
1253 echo "(You can leave this empty if the cache-server is the same as your iso-server.)"
1254 echo -n "FTP-DOMAIN FOR THE CACHE: "
1255 read IPFIRE_FTP_URL_INT
1256 echo -n "PATH FOR $IPFIRE_FTP_URL_INT: "
1257 read IPFIRE_FTP_PATH_INT
1258 if [ $IPFIRE_FTP_URL_INT ]; then
1259 echo -n "USERNAME FOR $IPFIRE_FTP_URL_INT: "
1260 read IPFIRE_FTP_USER_INT
1261 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_INT: "
1262 read -s IPFIRE_FTP_PASS_INT
1263 else
1264 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_EXT
1265 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_EXT
1266 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_EXT
1267 echo "USERNAME FOR $IPFIRE_FTP_URL_INT: $IPFIRE_FTP_USER_INT"
1268 echo "PASSWORD FOR $IPFIRE_FTP_URL_INT: !HIDDEN!"
1269 fi
1270 echo ""
1271 echo "(You can leave this empty if the pak-server is the same as your iso-server.)"
1272 echo -n "FTP-DOMAIN FOR THE PAKS: "
1273 read IPFIRE_FTP_URL_PAK
1274 echo -n "PATH FOR $IPFIRE_FTP_URL_PAK: "
1275 read IPFIRE_FTP_PATH_PAK
1276 if [ $IPFIRE_FTP_URL_PAK ]; then
1277 echo -n "USERNAME FOR $IPFIRE_FTP_URL_PAK: "
1278 read IPFIRE_FTP_USER_PAK
1279 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_PAK: "
1280 read -s IPFIRE_FTP_PASS_PAK
1281 else
1282 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_EXT
1283 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_EXT
1284 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_EXT
1285 echo "USERNAME FOR $IPFIRE_FTP_URL_PAK: $IPFIRE_FTP_USER_PAK"
1286 echo "PASSWORD FOR $IPFIRE_FTP_URL_PAK: !HIDDEN!"
1287 fi
1288 echo ""
1289 echo -e "ONE OR MORE EMAIL ADDRESS(ES) TO WHICH THE REPORTS WILL BE SENT"
1290 echo -e "(seperated by comma)"
1291 read IPFIRE_MAIL_REPORT
1292 echo -n "EMAIL FROM: "
1293 read IPFIRE_MAIL_FROM
1294 echo -n "EMAIL SERVER: "
1295 read IPFIRE_MAIL_SERVER
1296 echo -n "LOGIN TO MAIL SERVER: "
1297 read IPFIRE_MAIL_USER
1298 echo -n "MAIL PASSWORD: "
1299 read -s IPFIRE_MAIL_PASS
1300 echo -n "Saving..."
1301 for i in `seq 20`; do
1302 sleep 0.1; echo -n "."
1303 done
1304 echo ".Finished!"
1305 cat <<END > .config
1306### ISO server
1307IPFIRE_FTP_URL_EXT=$IPFIRE_FTP_URL_EXT
1308IPFIRE_FTP_PATH_EXT=$IPFIRE_FTP_PATH_EXT
1309IPFIRE_FTP_USER_EXT=$IPFIRE_FTP_USER_EXT
1310IPFIRE_FTP_PASS_EXT=$IPFIRE_FTP_PASS_EXT
1311### cache server
1312IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_INT
1313IPFIRE_FTP_PATH_INT=$IPFIRE_FTP_PATH_INT
1314IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_INT
1315IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_INT
1316### paks server
1317IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_PAK
1318IPFIRE_FTP_PATH_PAK=$IPFIRE_FTP_PATH_PAK
1319IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_PAK
1320IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_PAK
1321### mail reports
1322IPFIRE_MAIL_REPORT=$IPFIRE_MAIL_REPORT
1323IPFIRE_MAIL_FROM=$IPFIRE_MAIL_FROM
1324IPFIRE_MAIL_SERVER=$IPFIRE_MAIL_SERVER
1325IPFIRE_MAIL_USER=$IPFIRE_MAIL_USER
1326IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS
1327END
1328 ;;
1329sync)
1330 echo -e "Syncing cache to ftp:"
1331# rm -f doc/packages-to-remove-from-ftp
1332 ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > ftplist
1333 for i in `ls -w1 cache/`; do
1334 grep $i ftplist
1335 if [ "$?" -ne "0" ]; then
1336 ncftpput -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ cache/$i
1337 if [ "$?" -eq "0" ]; then
1338 echo -e "$i was successfully uploaded to the ftp server."
1339 else
1340 echo -e "There was an error while uploading $i to the ftp server."
1341 fi
1342 fi
1343 done
1344# for i in `cat ftplist`; do
1345# ls -w1 cache/ | grep $i
1346# if [ "$?" -eq "1" ]; then
1347# echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1348# fi
1349# done
1350 rm -f ftplist
1351 ;;
1352upload)
1353 case "$2" in
1354 iso)
1355 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
1356 cat <<EOF > .ftp-commands
1357mkdir $IPFIRE_FTP_PATH_EXT
1358ls -lah
1359quit
1360EOF
1361 ncftp -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT < .ftp-commands
1362 rm -f .ftp-commands
1363 md5sum ipfire-install-$VERSION.i386.iso > ipfire-install-$VERSION.i386.iso.md5
1364 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386.iso
1365 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
1366 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
1367 ncftpput -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ svn_status
1368 if [ "$?" -eq "0" ]; then
1369 echo -e "The iso of Revision $SVN_REVISION was successfully uploaded to $IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/."
1370 else
1371 echo -e "There was an error while uploading the iso to the ftp server."
1372 exit 1
1373 fi
1374 if [ "$3" = "--with-sources-cd" ]; then
1375 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
1376 fi
1377 ;;
1378 paks)
1379 cat <<EOF > .ftp-commands
1380mkdir $IPFIRE_FTP_PATH_PAK
1381ls -lah
1382quit
1383EOF
1384 ncftp -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK < .ftp-commands
1385 rm -f .ftp-commands
1386 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1387 if [ "$?" -eq "0" ]; then
1388 echo -e "The packages were successfully uploaded to $IPFIRE_FTP_URL_PAK$IPFIRE_FTP_PATH_PAK/."
1389 else
1390 echo -e "There was an error while uploading the packages to the ftp server."
1391 exit 1
1392 fi
1393 ;;
1394 esac
1395 ;;
1396build-only)
1397 rm -f $BASEDIR/log/$2*
1398 BUILDMACHINE=`uname -m`
1399 prepareenv
1400 ipcopmake $2
1401 ;;
1402build-silent)
1403 screen -dmS ipfire $0 build
1404 echo "Build started... This will take a while!"
1405 echo "You can see the status with 'screen -x ipfire'."
1406 ;;
1407mail)
1408 chmod 755 tools/sendEmail
1409 ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz
1410 if [ "$2" = "ERROR" ]; then
1411 SUBJECT="ERROR: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1412 echo "ERROR: $0 build!"
1413 cat <<END > /tmp/ipfire_mail_body
1414When I was building IPFire on `hostname`, I have found an ERROR!
1415Here you can see the logs and detect the reason for this error.
1416
1417Best Regards
1418Your IPFire-Build-Script
1419END
1420 fi
1421 if [ "$2" = "SUCCESS" ]; then
1422 SUBJECT="SUCCESS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1423 cat <<END > /tmp/ipfire_mail_body
1424Building IPFire on `hostname` in Revision $SVN_REVISION was successfull!
1425You can find the ISO on your ftp server.
1426
1427Statistics:
1428-----------
1429Started: $IPFIRE_START_TIME
1430Finished: `date`
1431
1432Best Regards
1433Your IPFire-Build-Script
1434END
1435 fi
1436 if [ "$2" = "SVNUPDATE" ]; then
1437 SUBJECT="SVNUPDATE: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1438 echo "ERROR: $0 svn up!"
1439 cat <<END > /tmp/ipfire_mail_body
1440When I was downloading the latest svn source,
1441I have found an ERROR!
1442Here you can see the logs and detect the reason for this error.
1443
1444Best Regards
1445Your IPFire-Build-Script
1446END
1447 fi
1448
1449 if [ "$2" = "SVNDIST" ]; then
1450 SUBJECT="SVNDIST: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1451 echo "ERROR: $0 svn dist!"
1452 cat <<END > /tmp/ipfire_mail_body
1453When I was exporting the latest svn source,
1454I have found an ERROR!
1455Here you can see the logs and detect the reason for this error.
1456
1457Best Regards
1458Your IPFire-Build-Script
1459END
1460 fi
1461
1462 if [ "$2" = "PREFETCH" ]; then
1463 SUBJECT="PREFETCH: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1464 echo "ERROR: $0 prefetch!"
1465 cat <<END > /tmp/ipfire_mail_body
1466When I was downloading the source packages,
1467I have found an ERROR!
1468Here you can see the logs and detect the reason for this error.
1469
1470Best Regards
1471Your IPFire-Build-Script
1472END
1473 fi
1474
1475 if [ "$2" = "ISO" ]; then
1476 SUBJECT="ISO: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1477 echo "ERROR: $0 upload iso!"
1478 cat <<END > /tmp/ipfire_mail_body
1479When I was uploading the iso image,
1480I have found an ERROR!
1481Here you can see the logs and detect the reason for this error.
1482
1483Best Regards
1484Your IPFire-Build-Script
1485END
1486 fi
1487
1488 if [ "$2" = "PAKS" ]; then
1489 SUBJECT="PAKS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1490 echo "ERROR: $0 upload paks!"
1491 cat <<END > /tmp/ipfire_mail_body
1492When I was uploading the packages,
1493I have found an ERROR!
1494Here you can see the logs and detect the reason for this error.
1495
1496Best Regards
1497Your IPFire-Build-Script
1498END
1499 fi
1500
1501 tar cfz $ATTACHMENT log/_build*
1502 cat <<END >> /tmp/ipfire_mail_body
1503
1504Here is a summary... The full logs are in the attachment.
1505---------------------------------------------------------
1506
1507`tail log/_*`
1508END
1509 cat /tmp/ipfire_mail_body | tools/sendEmail -q \
1510 -f $IPFIRE_MAIL_FROM \
1511 -t $IPFIRE_MAIL_REPORT \
1512 -u $SUBJECT \
1513 -s $IPFIRE_MAIL_SERVER:25 \
1514 -xu $IPFIRE_MAIL_USER \
1515 -xp $IPFIRE_MAIL_PASS \
1516 -l log/_build.mail.log \
1517 -a $ATTACHMENT # -v
1518 rm -f /tmp/ipfire_mail_body $ATTACHMENT
1519 ;;
1520unattended)
1521 if [ ! -f .config ]; then
1522 echo "No configuration found. Try ./make.sh make-config."
1523 fi
1524 ### This is our procedure that will compile the IPFire by herself...
1525 echo "### UPDATE LOGS"
1526 update_logs
1527
1528 if [ "$IPFIRE_REBUILD" -eq "0" ]; then
1529 echo "### SAVING TIME"
1530 export IPFIRE_START_TIME=`date`
1531
1532 echo "### GETTING TOOLCHAIN"
1533 $0 gettoolchain
1534
1535 echo "### RUNNING SVN-UPDATE"
1536 $0 svn update
1537 if [ $? -ne 0 ]; then
1538 $0 mail SVNUPDATE
1539 exit 1
1540 fi
1541
1542 echo "### EXPORT SOURCES"
1543 $0 svn dist
1544 if [ $? -ne 0 ]; then
1545 $0 mail SVNDIST
1546 exit 1
1547 fi
1548
1549 echo "### RUNNING PREFETCH"
1550 $0 prefetch | grep -q "md5 difference"
1551 if [ $? -eq 0 ]; then
1552 $0 mail PREFETCH
1553 exit 1
1554 fi
1555 fi
1556
1557 echo "### RUNNING BUILD"
1558 $0 build
1559 if [ $? -ne 0 ]; then
1560 $0 mail ERROR
1561 exit 1
1562 fi
1563
1564 echo "### MAKING SOURCES-ISO"
1565 echo "DISABLED by Delaco!"
1566 #$0 sources-iso
1567
1568 echo "### UPLOADING ISO"
1569 $0 upload iso
1570 if [ $? -ne 0 ]; then
1571 $0 mail ISO
1572 exit 1
1573 fi
1574
1575 echo "### UPLOADING PAKS"
1576 $0 upload paks
1577 if [ $? -ne 0 ]; then
1578 $0 mail PAKS
1579 exit 1
1580 fi
1581
1582 echo "### SUCCESS!"
1583 $0 mail SUCCESS
1584 exit 0
1585 ;;
1586batch)
1587 if [ `screen -ls | grep -q ipfire` ]; then
1588 echo "Build is already running, sorry!"
1589 exit 1
1590 else
1591 if [ "$2" = "--rebuild" ]; then
1592 export IPFIRE_REBUILD=1
1593 echo "REBUILD!"
1594 else
1595 export IPFIRE_REBUILD=0
1596 fi
1597 echo -n "IPFire-Batch-Build is starting..."
1598 screen -dmS ipfire $0 unattended
1599 if [ "$?" -eq "0" ]; then
1600 echo ".Done!"
1601 else
1602 echo ".ERROR!"
1603 exit 1
1604 fi
1605 exit 0
1606 fi
1607 ;;
1608*)
1609 clear
1610 svn info
1611 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"
1612 do
1613 case $name in
1614 "IPFIRE: Prefetch")
1615 $0 prefetch
1616 ;;
1617 "IPFIRE: Build (silent)")
1618 $0 build-silent
1619 ;;
1620 "IPFIRE: Watch Build")
1621 echo "Exit with Ctrl+A, Ctrl+D."
1622 echo -n "Preparing..."
1623 for i in `seq 10`; do
1624 sleep 0.1; echo -n "."
1625 done
1626 echo ".Ready!"
1627 sleep 0.3
1628 screen -x ipfire
1629 ;;
1630 "IPFIRE: Batch")
1631 $0 batch
1632 ;;
1633 "IPFIRE: Clean")
1634 $0 clean
1635 ;;
1636 "SVN: Commit")
1637 echo "Are your sure to Update all Files to the Server (write: yes)?"; read input
1638 if [ "$input" == "yes" ]; then
1639 $0 svn commit
1640 fi
1641 ;;
1642 "SVN: Update")
1643 $0 svn update
1644 ;;
1645 "SVN: Status")
1646 svn status # | grep -v ^?
1647 ;;
1648 "SVN: Diff")
1649 $0 svn diff
1650 ;;
1651 "Help")
1652 echo "Usage: $0 {build|changelog|check|checkclean|clean|gettoolchain|newpak|prefetch|shell|sync|toolchain}"
1653 cat doc/make.sh-usage
1654 ;;
1655 "LOG: Tail")
1656 tail -f log/_*
1657 ;;
1658 "Exit")
1659 break
1660 ;;
1661 esac
1662 done
1663 ;;
1664esac