HinzugefĆ¼gt:
[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 gd
591 ipcopmake popt
592 ipcopmake slang
593 ipcopmake newt
594 ipcopmake libcap
595 ipcopmake pciutils
596 ipcopmake pcre
597 ipcopmake apache
598 ipcopmake arping
599 ipcopmake beep
600 ipcopmake bind
601 ipcopmake capi4k-utils
602 ipcopmake cdrtools
603 ipcopmake dnsmasq
604 ipcopmake dosfstools
605 ipcopmake ethtool
606 ipcopmake ez-ipupdate
607 ipcopmake fcron
608 ipcopmake perl-GD
609 ipcopmake gnupg
610 ipcopmake hdparm
611 ipcopmake ibod
612 ipcopmake initscripts
613 ipcopmake iptables
614 ipcopmake ipac-ng
615 ipcopmake ipaddr
616 ipcopmake iproute2
617 ipcopmake iptstate
618 ipcopmake iputils
619 ipcopmake l7-protocols
620 ipcopmake isapnptools
621 ipcopmake isdn4k-utils
622 ipcopmake kudzu
623 ipcopmake logrotate
624 ipcopmake logwatch
625 ipcopmake mingetty
626 ipcopmake misc-progs
627 ipcopmake mtools
628 ipcopmake nano
629 ipcopmake nash
630 ipcopmake nasm
631 ipcopmake URI
632 ipcopmake HTML-Tagset
633 ipcopmake HTML-Parser
634 ipcopmake Compress-Zlib
635 ipcopmake Digest
636 ipcopmake Digest-SHA1
637 ipcopmake Digest-HMAC
638 ipcopmake libwww-perl
639 ipcopmake Net-DNS
640 ipcopmake Net-IPv4Addr
641 ipcopmake Net_SSLeay
642 ipcopmake IO-Stringy
643 ipcopmake Unix-Syslog
644 ipcopmake Mail-Tools
645 ipcopmake MIME-Tools
646 ipcopmake Net-Server
647 ipcopmake Convert-TNEF
648 ipcopmake Convert-UUlib
649 ipcopmake Archive-Tar
650 ipcopmake Archive-Zip
651 ipcopmake Text-Tabs+Wrap
652 ipcopmake Locale-Country
653 ipcopmake GeoIP
654 ipcopmake fwhits
655 ipcopmake berkeley
656 ipcopmake BerkeleyDB ## The Perl module
657 ipcopmake noip_updater
658 ipcopmake ntp
659 ipcopmake oinkmaster
660 ipcopmake openssh
661 ipcopmake openswan
662 ipcopmake pptpclient
663 ipcopmake rrdtool
664 ipcopmake setserial
665 ipcopmake setup
666 ipcopmake snort
667 #ipcopmake speedycgi
668 ipcopmake saslauthd PASS=1
669 ipcopmake openldap
670 ipcopmake squid
671 ipcopmake squid-graph
672 ipcopmake squidguard
673 ipcopmake tcpdump
674 ipcopmake traceroute
675 ipcopmake vlan
676 #ipcopmake wireless
677 ipcopmake libsafe
678 ipcopmake 3c5x9setup
679# echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
680 ipcopmake pakfire
681 ipcopmake startscripts
682## Zuerst die Libs und dann die Programme. Ordnung muss sein!
683 ipcopmake java
684 ipcopmake libtiff
685 ipcopmake libjpeg
686 ipcopmake lcms
687 ipcopmake libmng
688 ipcopmake freetype
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 stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
762}
763
764buildinstaller() {
765 # Run installer scripts one by one
766 LOGFILE="$BASEDIR/log/_build.installer.log"
767 export LOGFILE
768 echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
769 if [ 'i386' = $MACHINE ]; then
770 ipcopmake syslinux
771 ipcopmake as86
772 ipcopmake mbr
773 ipcopmake uClibc
774 fi
775 installmake busybox
776 installmake sysvinit
777 installmake e2fsprogs
778 installmake misc-progs
779 installmake slang
780 installmake util-linux
781 installmake newt
782 installmake pciutils
783 installmake pcmcia-cs
784 installmake kbd
785 installmake installer
786 installmake scsi.img
787 installmake driver.img
788 installmake initrd
789 installmake boot.img
790}
791
792buildpackages() {
793 LOGFILE="$BASEDIR/log/_build.packages.log"
794 export LOGFILE
795 echo "... see detailed log in _build.*.log files" >> $LOGFILE
796 echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
797 # Strip files
798 echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
799 find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
800 ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
801 -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
802 # add -ls before -exec if you want to verify what files are stripped
803
804 find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
805 -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
806 # there add -v to strip to verify
807
808 if [ 'i386' = $MACHINE ]; then
809 # Create fcdsl packages
810 echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
811 cp $LFS/install/images/fcdsl/license.txt $LFS >> $LOGFILE 2>&1
812 touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
813 cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
814 lib/modules/$KVER/misc/fcdsl*.o.gz \
815 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
816 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
817 etc/fcdsl/fcdsl*.conf \
818 etc/drdsl/{drdsl,drdsl.ini} \
819 license.txt \
820 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
821 rm -f $LFS/license.txt >> $LOGFILE 2>&1
822 cd $BASEDIR
823 fi
824
825 # Generating list of packages used
826 echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
827 rm -f $BASEDIR/doc/packages-list
828 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
829 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
830 echo " * `basename $i`" >>$BASEDIR/doc/packages-list
831 fi
832 done
833 echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
834 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipfire$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|^ipfire-logs' \
835 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
836 rm -f $BASEDIR/doc/packages-list
837 # packages-list.txt is ready to be displayed for wiki page
838
839 # Create ISO for CDRom and USB-superfloppy
840 ipcopmake cdrom
841 rm -f $LFS/install/images/*usb*
842 cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
843
844 ipfirepackages
845
846 # Cleanup
847 stdumount
848 rm -rf $BASEDIR/build/tmp/*
849
850 # Generating total list of files
851 echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
852 rm -f $BASEDIR/log/FILES
853 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
854 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
855 echo "##" >>$BASEDIR/log/FILES
856 echo "## `basename $i`" >>$BASEDIR/log/FILES
857 echo "##" >>$BASEDIR/log/FILES
858 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
859 fi
860 done
861
862 cd $PWD
863
864}
865
866ipfirepackages() {
867 if [ -d "$BASEDIR/packages" ]; then
868 for i in `ls $BASEDIR/packages`; do
869 touch $BASEDIR/build/install/packages/$i.empty
870 done
871 fi
872 ipfiredist amavisd
873 ipfiredist applejuice
874 ipfiredist asterisk
875 ipfiredist clamav
876 ipfiredist cups
877 ipfiredist cyrusimap
878 ipfiredist fetchmail
879 ipfiredist gnump3d
880 ipfiredist java
881 ipfiredist lame
882 ipfiredist libogg
883 ipfiredist libtiff
884 ipfiredist libvorbis
885 ipfiredist libxml2
886 ipfiredist mailx
887 ipfiredist mldonkey
888 ipfiredist nfs
889 ipfiredist nmap
890 ipfiredist ntop
891 ipfiredist postfix
892 ipfiredist procmail
893 ipfiredist samba
894 ipfiredist sox
895 ipfiredist spamassassin
896 ipfiredist web-cyradm
897 ipfiredist xampp
898# ipfiredist xinetd
899 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
900 mv -f $LFS/install/packages/*.{tar.gz,md5} $BASEDIR/packages >> $LOGFILE 2>&1
901 rm -rf $BASEDIR/build/install/packages/*
902}
903
904update_logs() {
905 tar cfz log/ipfire-logs-`date +'%Y-%m-%d-%H:%M'`.tgz log/_build.*
906 rm -f log/_build.*
907}
908
909# See what we're supposed to do
910case "$1" in
911build)
912 BUILDMACHINE=`uname -m`
913 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
914 #only restore on a clean disk
915 if [ ! -f log/perl-*-tools ]; then
916 if [ ! -n "$PACKAGE" ]; then
917 echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
918 prepareenv
919 buildtoolchain
920 else
921 PACKAGENAME=${PACKAGE%.tar.gz}
922 echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
923 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
924 tar zxf $PACKAGE
925 prepareenv
926 else
927 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
928 fi
929 fi
930 else
931 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
932 prepareenv
933 fi
934
935 buildbase
936 buildipcop
937
938 # Setzen des IPFire Builds
939 if [ "$FIREBUILD" ]; then
940 echo "$FIREBUILD" > $BASEDIR/build/var/ipfire/firebuild
941 else
942 echo "_(OvO)_" > $BASEDIR/build/var/ipfire/firebuild
943 fi
944
945 buildinstaller
946 buildpackages
947 ;;
948shell)
949 # enter a shell inside LFS chroot
950 # may be used to changed kernel settings
951 prepareenv
952 entershell
953 ;;
954changelog)
955 echo -n "Loading new Changelog from SVN: "
956 svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
957 echo "Finished!"
958 ;;
959check)
960 echo "Checking sources files availability on the web"
961 if [ ! -d $DIR_CHK ]; then
962 mkdir -p $DIR_CHK
963 fi
964 FINISHED=0
965 cd $BASEDIR/lfs
966 for c in `seq $MAX_RETRIES`; do
967 if (( FINISHED==1 )); then
968 break
969 fi
970 FINISHED=1
971 cd $BASEDIR/lfs
972 for i in *; do
973 if [ -f "$i" -a "$i" != "Config" ]; then
974 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
975 MESSAGE="$i\t ($c/$MAX_RETRIES)" check
976 if [ $? -ne 0 ]; then
977 echo "Check : wget error in lfs/$i"
978 FINISHED=0
979 fi
980 fi
981 done
982 done
983 cd -
984 ;;
985checkclean)
986 echo "Erasing sources files availability tags"
987 rm -rf $DIR_CHK/*
988 ;;
989clean)
990 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
991 $LOSETUP -d $i 2>/dev/null
992 done
993 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
994 umount $i
995 done
996 stdumount
997 for i in `seq 0 7`; do
998 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
999 umount /dev/loop${i} 2>/dev/null;
1000 losetup -d /dev/loop${i} 2>/dev/null;
1001 fi;
1002 done
1003 rm -rf $BASEDIR/build
1004 rm -rf $BASEDIR/cdrom
1005 rm -rf $BASEDIR/packages
1006 rm -rf $BASEDIR/log
1007 if [ -h /tools ]; then
1008 rm -f /tools
1009 fi
1010 ;;
1011newpak)
1012 # create structure for a new package
1013 echo -e "Name of the new package: $2"
1014 if [ ! -f "lfs/$2" ]; then
1015 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
1016 mkdir -p src/paks/$2
1017 cd src/paks/$2
1018 echo "`date -u '+%b %e %T'`: Creating files"
1019 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
1020
1021 touch ROOTFILES
1022 touch {,un}install.sh
1023 ## install.sh
1024 echo '#!/bin/bash' > install.sh
1025 echo '#' >> install.sh
1026 echo '#################################################################' >> install.sh
1027 echo '# #' >> install.sh
1028 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
1029 echo '# #' >> install.sh
1030 echo '#################################################################' >> install.sh
1031 echo '#' >> install.sh
1032 echo '# Extract the files' >> install.sh
1033 echo 'tar xfz files.tgz -C /' >> install.sh
1034 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
1035 ## uninstall.sh
1036 echo '#!/bin/bash' > uninstall.sh
1037 echo '#################################################################' >> uninstall.sh
1038 echo '# #' >> uninstall.sh
1039 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
1040 echo '# #' >> uninstall.sh
1041 echo '#################################################################' >> uninstall.sh
1042 echo '#' >> uninstall.sh
1043 echo '# Delete the files' >> uninstall.sh
1044 echo '## Befehl fehlt noch' >> uninstall.sh
1045 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
1046 echo "`date -u '+%b %e %T'`: Adding files to SVN"
1047 cd - && svn add lfs/$2 && svn add src/paks/$2
1048
1049 echo -n "Do you want to remove the folders? [y/n]"
1050 read REM
1051 if [ "$REM" == "y" ]; then
1052 echo "Removing the folders..."
1053 svn del src/paks/$2 --force
1054 else
1055 echo "Folders are kept."
1056 fi
1057 else
1058 echo "$2 already exists"
1059 fi
1060 exit 0
1061 ;;
1062prefetch)
1063 if [ ! -d $BASEDIR/cache ]; then
1064 mkdir $BASEDIR/cache
1065 fi
1066 mkdir -p $BASEDIR/log
1067 echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
1068 FINISHED=0
1069 cd $BASEDIR/lfs
1070 for c in `seq $MAX_RETRIES`; do
1071 if (( FINISHED==1 )); then
1072 break
1073 fi
1074 FINISHED=1
1075 cd $BASEDIR/lfs
1076 for i in *; do
1077 if [ -f "$i" -a "$i" != "Config" ]; then
1078 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1079 if [ $? -ne 0 ]; then
1080 echo "Prefetch : wget error in lfs/$i"
1081 FINISHED=0
1082 else
1083 if [ $c -eq 1 ]; then
1084 echo "Prefetch : lfs/$i files loaded"
1085 fi
1086 fi
1087 fi
1088 done
1089 done
1090 echo "Prefetch : verifying md5sum"
1091 ERROR=0
1092 for i in *; do
1093 if [ -f "$i" -a "$i" != "Config" ]; then
1094 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1095 if [ $? -ne 0 ]; then
1096 echo "md5 difference in lfs/$i"
1097 ERROR=1
1098 fi
1099 fi
1100 done
1101 if [ $ERROR -eq 0 ]; then
1102 echo "Prefetch : all files md5sum match"
1103 fi
1104 cd -
1105 ;;
1106toolchain)
1107 prepareenv
1108 buildtoolchain
1109 BUILDMACHINE=`uname -m`
1110 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1111 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1112 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1113 build/{bin,etc,usr/bin,usr/local} \
1114 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1115 log >> $LOGFILE
1116 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1117 > cache/toolchains/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1118 stdumount
1119 ;;
1120gettoolchain)
1121 BUILDMACHINE=`uname -m`
1122 # arbitrary name to be updated in case of new toolchain package upload
1123 PACKAGE=$SNAME-$VERSION-toolchain-$BUILDMACHINE
1124 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1125 URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1126 test -d $BASEDIR/cache/toolchains || mkdir $BASEDIR/cache/toolchains
1127 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1128 cd $BASEDIR/cache/toolchains
1129 wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5 >& /dev/null
1130 if [ $? -ne 0 ]; then
1131 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1132 else
1133 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1134 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1135 else
1136 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1137 fi
1138 fi
1139 else
1140 echo "Toolchain is already downloaded. Exiting..."
1141 fi
1142 ;;
1143sources-iso)
1144 prepareenv
1145 echo "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1146 chroot $LFS /tools/bin/env -i HOME=/root \
1147 TERM=$TERM PS1='\u:\w\$ ' \
1148 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1149 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1150 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1151 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1152 stdumount
1153 ;;
1154svn)
1155 case "$2" in
1156 update|up)
1157 # clear
1158 echo -n "Load the latest source files..."
1159 svn update >> $PWD/log/_build.svn.update.log
1160 if [ $? -eq 0 ]; then
1161 echo ".Done!"
1162 else
1163 echo ".Fail!"
1164 exit 1
1165 fi
1166 echo -n "Write the svn info to a file..."
1167 svn info > $PWD/svn_status
1168 if [ "$?" -eq "0" ]; then
1169 echo ".Done!"
1170 else
1171 echo ".Fail!"
1172 exit 1
1173 fi
1174 chmod 755 $0
1175 exit 0
1176 ;;
1177 commit|ci)
1178 clear
1179 #$0 changelog
1180 #echo "Upload the changed files..."
1181 sleep 1
1182 svn commit
1183 $0 svn up
1184 ;;
1185 dist)
1186 $0 svn up
1187 echo -ne "Download source package from svn..."
1188 svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
1189 if [ "$?" -eq "0" ]; then
1190 echo ".Done!"
1191 else
1192 echo ".Fail!"
1193 exit 1
1194 fi
1195 echo -n "Compress files..."
1196 tar cfz ipfire-source-`date +'%Y-%m-%d'`-r`svn info | grep Revision | cut -c 11-`.tar.gz ipfire-source
1197 if [ "$?" -eq "0" ]; then
1198 echo ".Done!"
1199 else
1200 echo ".Fail!"
1201 exit 1
1202 fi
1203 echo -n "Cleanup..."
1204 rm ipfire-source/ -r
1205 if [ "$?" -eq "0" ]; then
1206 echo ".Done!"
1207 else
1208 echo ".Fail!"
1209 exit 1
1210 fi
1211 ;;
1212 diff)
1213 echo -ne "Make a local diff to last svn revision..."
1214 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1215 if [ "$?" -eq "0" ]; then
1216 echo ".Done!"
1217 else
1218 echo ".Fail!"
1219 exit 1
1220 fi
1221 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1222 ;;
1223 esac
1224 ;;
1225make-config)
1226 echo -e "This is for creating your configuration..."
1227 echo -e "We will need some input:"
1228 echo -e ""
1229 echo -n "FTP-DOMAIN FOR THE ISO: "
1230 read IPFIRE_FTP_URL_EXT
1231 echo -n "PATH FOR $IPFIRE_FTP_URL_EXT: "
1232 read IPFIRE_FTP_PATH_EXT
1233 echo -n "USERNAME FOR $IPFIRE_FTP_URL_EXT: "
1234 read IPFIRE_FTP_USER_EXT
1235 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_EXT: "
1236 read -s IPFIRE_FTP_PASS_EXT
1237 echo ""
1238 echo "(You can leave this empty if the cache-server is the same as your iso-server.)"
1239 echo -n "FTP-DOMAIN FOR THE CACHE: "
1240 read IPFIRE_FTP_URL_INT
1241 echo -n "PATH FOR $IPFIRE_FTP_URL_INT: "
1242 read IPFIRE_FTP_PATH_INT
1243 if [ $IPFIRE_FTP_URL_INT ]; then
1244 echo -n "USERNAME FOR $IPFIRE_FTP_URL_INT: "
1245 read IPFIRE_FTP_USER_INT
1246 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_INT: "
1247 read -s IPFIRE_FTP_PASS_INT
1248 else
1249 IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_EXT
1250 IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_EXT
1251 IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_EXT
1252 echo "USERNAME FOR $IPFIRE_FTP_URL_INT: $IPFIRE_FTP_USER_INT"
1253 echo "PASSWORD FOR $IPFIRE_FTP_URL_INT: !HIDDEN!"
1254 fi
1255 echo ""
1256 echo "(You can leave this empty if the pak-server is the same as your iso-server.)"
1257 echo -n "FTP-DOMAIN FOR THE PAKS: "
1258 read IPFIRE_FTP_URL_PAK
1259 echo -n "PATH FOR $IPFIRE_FTP_URL_PAK: "
1260 read IPFIRE_FTP_PATH_PAK
1261 if [ $IPFIRE_FTP_URL_PAK ]; then
1262 echo -n "USERNAME FOR $IPFIRE_FTP_URL_PAK: "
1263 read IPFIRE_FTP_USER_PAK
1264 echo -n "PASSWORD FOR $IPFIRE_FTP_URL_PAK: "
1265 read -s IPFIRE_FTP_PASS_PAK
1266 else
1267 IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_EXT
1268 IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_EXT
1269 IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_EXT
1270 echo "USERNAME FOR $IPFIRE_FTP_URL_PAK: $IPFIRE_FTP_USER_PAK"
1271 echo "PASSWORD FOR $IPFIRE_FTP_URL_PAK: !HIDDEN!"
1272 fi
1273 echo ""
1274 echo -e "ONE OR MORE EMAIL ADDRESS(ES) TO WHICH THE REPORTS WILL BE SENT"
1275 echo -e "(seperated by comma)"
1276 read IPFIRE_MAIL_REPORT
1277 echo -n "EMAIL FROM: "
1278 read IPFIRE_MAIL_FROM
1279 echo -n "EMAIL SERVER: "
1280 read IPFIRE_MAIL_SERVER
1281 echo -n "LOGIN TO MAIL SERVER: "
1282 read IPFIRE_MAIL_USER
1283 echo -n "MAIL PASSWORD: "
1284 read -s IPFIRE_MAIL_PASS
1285 echo -n "Saving..."
1286 for i in `seq 20`; do
1287 sleep 0.1; echo -n "."
1288 done
1289 echo ".Finished!"
1290 cat <<END > .config
1291### ISO server
1292IPFIRE_FTP_URL_EXT=$IPFIRE_FTP_URL_EXT
1293IPFIRE_FTP_PATH_EXT=$IPFIRE_FTP_PATH_EXT
1294IPFIRE_FTP_USER_EXT=$IPFIRE_FTP_USER_EXT
1295IPFIRE_FTP_PASS_EXT=$IPFIRE_FTP_PASS_EXT
1296### cache server
1297IPFIRE_FTP_URL_INT=$IPFIRE_FTP_URL_INT
1298IPFIRE_FTP_PATH_INT=$IPFIRE_FTP_PATH_INT
1299IPFIRE_FTP_USER_INT=$IPFIRE_FTP_USER_INT
1300IPFIRE_FTP_PASS_INT=$IPFIRE_FTP_PASS_INT
1301### paks server
1302IPFIRE_FTP_URL_PAK=$IPFIRE_FTP_URL_PAK
1303IPFIRE_FTP_PATH_PAK=$IPFIRE_FTP_PATH_PAK
1304IPFIRE_FTP_USER_PAK=$IPFIRE_FTP_USER_PAK
1305IPFIRE_FTP_PASS_PAK=$IPFIRE_FTP_PASS_PAK
1306### mail reports
1307IPFIRE_MAIL_REPORT=$IPFIRE_MAIL_REPORT
1308IPFIRE_MAIL_FROM=$IPFIRE_MAIL_FROM
1309IPFIRE_MAIL_SERVER=$IPFIRE_MAIL_SERVER
1310IPFIRE_MAIL_USER=$IPFIRE_MAIL_USER
1311IPFIRE_MAIL_PASS=$IPFIRE_MAIL_PASS
1312END
1313 ;;
1314sync)
1315 echo -e "Syncing cache to ftp:"
1316# rm -f doc/packages-to-remove-from-ftp
1317 ncftpls -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT ftp://$IPFIRE_FTP_URL_INT$IPFIRE_FTP_PATH_INT/ > ftplist
1318 for i in `ls -w1 cache/`; do
1319 grep $i ftplist
1320 if [ "$?" -ne "0" ]; then
1321 ncftpput -u $IPFIRE_FTP_USER_INT -p $IPFIRE_FTP_PASS_INT $IPFIRE_FTP_URL_INT $IPFIRE_FTP_PATH_INT/ cache/$i
1322 if [ "$?" -eq "0" ]; then
1323 echo -e "$i was successfully uploaded to the ftp server."
1324 else
1325 echo -e "There was an error while uploading $i to the ftp server."
1326 fi
1327 fi
1328 done
1329# for i in `cat ftplist`; do
1330# ls -w1 cache/ | grep $i
1331# if [ "$?" -eq "1" ]; then
1332# echo $i | grep -v toolchain >> doc/packages-to-remove-from-ftp
1333# fi
1334# done
1335 rm -f ftplist
1336 ;;
1337upload)
1338 case "$2" in
1339 iso)
1340 echo -e "Uploading the iso to $IPFIRE_FTP_URL_EXT."
1341 ncftpls -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT ftp://$IPFIRE_FTP_URL_EXT$IPFIRE_FTP_PATH_EXT/ | grep $SVN_REVISION
1342 if [ "$?" -eq "1" ]; then
1343 cp $BASEDIR/ipfire-install-$VERSION.i386.iso $BASEDIR/ipfire-install-$VERSION.i386-r`svn info | grep Revision | cut -c 11-`.iso
1344 md5sum ipfire-install-$VERSION.i386-r$SVN_REVISION.iso > ipfire-install-$VERSION.i386-r$SVN_REVISION.iso.md5
1345 ncftpput -V -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386-r$SVN_REVISION.iso
1346 ncftpput -V -u $IPFIRE_FTP_USER_EXT -p $IPFIRE_FTP_PASS_EXT $IPFIRE_FTP_URL_EXT $IPFIRE_FTP_PATH_EXT/ ipfire-install-$VERSION.i386-r$SVN_REVISION.iso.md5
1347 ncftpput -V -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
1348 if [ "$?" -eq "0" ]; then
1349 echo -e "The ISO of Revision $SVN_REVISION was successfully uploaded to the ftp server."
1350 else
1351 echo -e "There was an error while uploading the iso to the ftp server."
1352 exit 1
1353 fi
1354 else
1355 echo -e "File with name ipfire-install-$VERSION.i386-r$SVN_REVISION.iso already exists on the ftp server!"
1356 fi
1357 rm -f ipfire-install-$VERSION.i386-r$SVN_REVISION.iso{,.md5}
1358 ;;
1359 paks)
1360 ncftpput -z -u $IPFIRE_FTP_USER_PAK -p $IPFIRE_FTP_PASS_PAK $IPFIRE_FTP_URL_PAK $IPFIRE_FTP_PATH_PAK/ packages/*
1361 if [ "$?" -eq "0" ]; then
1362 echo -e "The packages were successfully uploaded to the ftp server."
1363 else
1364 echo -e "There was an error while uploading the packages to the ftp server."
1365 exit 1
1366 fi
1367 ;;
1368 esac
1369 ;;
1370build-only)
1371 rm -f $BASEDIR/log/$2*
1372 BUILDMACHINE=`uname -m`
1373 prepareenv
1374 ipcopmake $2
1375 ;;
1376build-silent)
1377 screen -dmS ipfire $0 build
1378 echo "Build started... This will take a while!"
1379 echo "You can see the status with 'screen -x ipfire'."
1380 ;;
1381mail)
1382 chmod 755 tools/sendEmail
1383 ATTACHMENT=/tmp/ipfire-build-logs-R$SVN_REVISION.tar.gz
1384 if [ "$2" = "ERROR" ]; then
1385 SUBJECT="ERROR: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1386 echo "ERROR: $0 build!"
1387 cat <<END > /tmp/ipfire_mail_body
1388When I was building IPFire on `hostname`, I have found an ERROR!
1389Here you can see the logs and detect the reason for this error.
1390
1391Best Regards
1392Your IPFire-Build-Script
1393END
1394 fi
1395 if [ "$2" = "SUCCESS" ]; then
1396 SUBJECT="SUCCESS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1397 cat <<END > /tmp/ipfire_mail_body
1398Building IPFire on `hostname` in Revision $SVN_REVISION was successfull!
1399You can find the ISO on your ftp server.
1400
1401Statistics:
1402-----------
1403Started: $IPFIRE_START_TIME
1404Finished: `date`
1405
1406Best Regards
1407Your IPFire-Build-Script
1408END
1409 fi
1410 if [ "$2" = "SVNUPDATE" ]; then
1411 SUBJECT="SVNUPDATE: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1412 echo "ERROR: $0 svn up!"
1413 cat <<END > /tmp/ipfire_mail_body
1414When I was downloading the latest svn source,
1415I have found an ERROR!
1416Here you can see the logs and detect the reason for this error.
1417
1418Best Regards
1419Your IPFire-Build-Script
1420END
1421 fi
1422
1423 if [ "$2" = "SVNDIST" ]; then
1424 SUBJECT="SVNDIST: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1425 echo "ERROR: $0 svn dist!"
1426 cat <<END > /tmp/ipfire_mail_body
1427When I was exporting the latest svn source,
1428I have found an ERROR!
1429Here you can see the logs and detect the reason for this error.
1430
1431Best Regards
1432Your IPFire-Build-Script
1433END
1434 fi
1435
1436 if [ "$2" = "PREFETCH" ]; then
1437 SUBJECT="PREFETCH: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1438 echo "ERROR: $0 prefetch!"
1439 cat <<END > /tmp/ipfire_mail_body
1440When I was downloading the source packages,
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" = "ISO" ]; then
1450 SUBJECT="ISO: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1451 echo "ERROR: $0 upload iso!"
1452 cat <<END > /tmp/ipfire_mail_body
1453When I was uploading the iso image,
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" = "PAKS" ]; then
1463 SUBJECT="PAKS: IPFIRE-BUILD R$SVN_REVISION on `hostname`"
1464 echo "ERROR: $0 upload paks!"
1465 cat <<END > /tmp/ipfire_mail_body
1466When I was uploading the 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 tar cfz $ATTACHMENT log/_build*
1476 cat <<END >> /tmp/ipfire_mail_body
1477
1478Here is a summary... The full logs are in the attachment.
1479---------------------------------------------------------
1480
1481`tail log/_*`
1482END
1483 cat /tmp/ipfire_mail_body | tools/sendEmail -q \
1484 -f $IPFIRE_MAIL_FROM \
1485 -t $IPFIRE_MAIL_REPORT \
1486 -u $SUBJECT \
1487 -s $IPFIRE_MAIL_SERVER:25 \
1488 -xu $IPFIRE_MAIL_USER \
1489 -xp $IPFIRE_MAIL_PASS \
1490 -l log/_build.mail.log \
1491 -a $ATTACHMENT # -v
1492 rm -f /tmp/ipfire_mail_body $ATTACHMENT
1493 ;;
1494unattended)
1495 if [ ! -f .config ]; then
1496 echo "No configuration found. Try ./make.sh make-config."
1497 fi
1498 ### This is our procedure that will compile the IPFire by herself...
1499 echo "### UPDATE LOGS"
1500 update_logs
1501 echo "### SAVING TIME"
1502 export IPFIRE_START_TIME=`date`
1503
1504 echo "### GETTING TOOLCHAIN"
1505 $0 gettoolchain
1506
1507 echo "### RUNNING SVN-UPDATE"
1508 $0 svn update
1509 if [ $? -ne 0 ]; then
1510 $0 mail SVNUPDATE
1511 exit 1
1512 fi
1513
1514 echo "### EXPORT SOURCES"
1515 $0 svn dist
1516 if [ $? -ne 0 ]; then
1517 $0 mail SVNDIST
1518 exit 1
1519 fi
1520
1521 echo "### RUNNING PREFETCH"
1522 $0 prefetch | grep -q "md5 difference"
1523 if [ $? -eq 0 ]; then
1524 $0 mail PREFETCH
1525 exit 1
1526 fi
1527
1528 echo "### RUNNING BUILD"
1529 $0 build
1530 if [ $? -ne 0 ]; then
1531 $0 mail ERROR
1532 exit 1
1533 fi
1534
1535 echo "### MAKING SOURCES-ISO"
1536 $0 sources-iso
1537
1538 echo "### UPLOADING ISO"
1539 $0 upload iso
1540 if [ $? -ne 0 ]; then
1541 $0 mail ISO
1542 exit 1
1543 fi
1544
1545 echo "### UPLOADING PAKS"
1546 $0 upload paks
1547 if [ $? -ne 0 ]; then
1548 $0 mail PAKS
1549 exit 1
1550 fi
1551
1552 echo "### SUCCESS!"
1553 $0 mail SUCCESS
1554 exit 0
1555 ;;
1556batch)
1557 if [ `screen -ls | grep batch` ]; then
1558 echo "Build is already running, sorry!"
1559 exit 1
1560 else
1561 echo -n "IPFire-Batch-Build is starting..."
1562 screen -dmS ipfire $0 unattended
1563 if [ "$?" -eq "0" ]; then
1564 echo ".Done!"
1565 else
1566 echo ".ERROR!"
1567 exit 1
1568 fi
1569 #if [ "$2" -eq "-v" ]; then
1570 # screen -x ipfire
1571 #else
1572 # echo "You may attach you with '-v'."
1573 #fi
1574 exit 0
1575 fi
1576 ;;
1577*)
1578 clear
1579 svn info
1580 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"
1581 do
1582 case $name in
1583 "IPFIRE: Prefetch")
1584 $0 prefetch
1585 ;;
1586 "IPFIRE: Build (silent)")
1587 $0 build-silent
1588 ;;
1589 "IPFIRE: Watch Build")
1590 echo "Exit with Ctrl+A, Ctrl+D."
1591 echo -n "Preparing..."
1592 for i in `seq 10`; do
1593 sleep 0.1; echo -n "."
1594 done
1595 echo ".Ready!"
1596 sleep 0.3
1597 screen -x ipfire
1598 ;;
1599 "IPFIRE: Batch")
1600 $0 batch
1601 ;;
1602 "IPFIRE: Clean")
1603 $0 clean
1604 ;;
1605 "SVN: Commit")
1606 echo "Are your sure to Update all Files to the Server (write: yes)?"; read input
1607 if [ "$input" == "yes" ]; then
1608 $0 svn commit
1609 fi
1610 ;;
1611 "SVN: Update")
1612 $0 svn update
1613 ;;
1614 "SVN: Status")
1615 svn status # | grep -v ^?
1616 ;;
1617 "SVN: Diff")
1618 $0 svn diff
1619 ;;
1620 "Help")
1621 echo "Usage: $0 {build|changelog|check|checkclean|clean|gettoolchain|newpak|prefetch|shell|sync|toolchain}"
1622 cat doc/make.sh-usage
1623 ;;
1624 "LOG: Tail")
1625 tail -f log/_*
1626 ;;
1627 "Exit")
1628 break
1629 ;;
1630 esac
1631 done
1632 ;;
1633esac