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