]> git.ipfire.org Git - ipfire-2.x.git/blob - make.sh
cfd30c58dfe3120945e579886eeab798783a12a4
[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 fcpci SMP=1
544 ipcopmake pulsar SMP=1
545 ipcopmake unicorn SMP=1
546 fi
547
548 ipcopmake linux LFS_PASS=ipcop
549 ipcopmake 3cp4218
550 ipcopmake amedyn
551 ipcopmake cxacru
552 ipcopmake eciadsl
553 ipcopmake eagle
554 ipcopmake speedtouch
555 if [ 'i386' = $MACHINE ]; then
556 # These are here because they have i386 only binary libraries
557 # included in the package.
558 ipcopmake cnx_pci
559 ipcopmake fcdsl
560 ipcopmake fcdsl2
561 ipcopmake fcdslsl
562 ipcopmake fcdslusb
563 ipcopmake fcdslslusb
564 ipcopmake fcpci
565 ipcopmake pulsar
566 ipcopmake unicorn
567 fi
568
569 ipcopmake pcmcia-cs
570 ipcopmake expat
571 ipcopmake gdbm
572 ipcopmake gmp
573 ipcopmake openssl
574 ipcopmake python
575 ipcopmake libnet
576 ipcopmake libpng
577 ipcopmake gd
578 ipcopmake popt
579 ipcopmake slang
580 ipcopmake newt
581 ipcopmake libcap
582 ipcopmake pciutils
583 ipcopmake pcre
584 ipcopmake apache
585 ipcopmake arping
586 ipcopmake beep
587 ipcopmake bind
588 ipcopmake capi4k-utils
589 ipcopmake cdrtools
590 ipcopmake dnsmasq
591 ipcopmake dosfstools
592 ipcopmake ethtool
593 ipcopmake ez-ipupdate
594 ipcopmake fcron
595 ipcopmake perl-GD
596 ipcopmake gnupg
597 ipcopmake hdparm
598 ipcopmake ibod
599 ipcopmake initscripts
600 ipcopmake iptables
601 ipcopmake ipac-ng
602 ipcopmake ipaddr
603 ipcopmake iproute2
604 ipcopmake iptstate
605 ipcopmake iputils
606 ipcopmake isapnptools
607 ipcopmake isdn4k-utils
608 ipcopmake kudzu
609 ipcopmake logrotate
610 ipcopmake logwatch
611 ipcopmake mingetty
612 ipcopmake misc-progs
613 ipcopmake mtools
614 ipcopmake nano
615 ipcopmake nash
616 ipcopmake nasm
617 ipcopmake URI
618 ipcopmake HTML-Tagset
619 ipcopmake HTML-Parser
620 ipcopmake Compress-Zlib
621 ipcopmake Digest
622 ipcopmake Digest-SHA1
623 ipcopmake Digest-HMAC
624 ipcopmake libwww-perl
625 ipcopmake Net-DNS
626 ipcopmake Net-IPv4Addr
627 ipcopmake Net_SSLeay
628 ipcopmake IO-Stringy
629 ipcopmake Unix-Syslog
630 ipcopmake Mail-Tools
631 ipcopmake MIME-Tools
632 ipcopmake Net-Server
633 ipcopmake Convert-TNEF
634 ipcopmake Convert-UUlib
635 ipcopmake Archive-Tar
636 ipcopmake Archive-Zip
637 ipcopmake noip_updater
638 ipcopmake ntp
639 ipcopmake oinkmaster
640 ipcopmake openssh
641 ipcopmake openswan
642 ipcopmake pptpclient
643 ipcopmake rrdtool
644 ipcopmake setserial
645 ipcopmake setup
646 ipcopmake snort
647 #ipcopmake speedycgi
648 ipcopmake squid
649 ipcopmake squid-graph
650 ipcopmake tcpdump
651 ipcopmake traceroute
652 ipcopmake vlan
653 #ipcopmake wireless
654 ipcopmake libsafe
655 ipcopmake 3c5x9setup
656 echo -ne "`date -u '+%b %e %T'`: Building ### IPFire modules ### \n" | tee -a $LOGFILE
657 ipcopmake pakfire
658 ## Zuerst die Libs und dann die Programme. Ordnung muss sein!
659 ipcopmake berkeley
660 ipcopmake BerkeleyDB ## The Perl module
661 ipcopmake libtiff
662 ipcopmake libjpeg
663 ipcopmake libxml2
664 ipcopmake spandsp
665 ipcopmake lzo
666 ipcopmake pkg-config
667 ipcopmake glib
668 ipcopmake xampp
669 ipcopmake pam
670 ipcopmake pammysql
671 ipcopmake saslauthd PASS=1
672 ipcopmake openldap
673 ipcopmake saslauthd PASS=2
674 ipcopmake xinetd
675 ipcopmake ghostscript
676 ipcopmake cups
677 # ipcopmake lpd ## Im Moment aus, da CUPS vorhanden ist.
678 ipcopmake samba
679 ipcopmake sudo
680 ipcopmake mc
681 ipcopmake pwlib
682 ipcopmake openh323
683 ipcopmake wget
684 ipcopmake bridge-utils
685 echo -ne "`date -u '+%b %e %T'`: Building ### Mailserver ### \n" | tee -a $LOGFILE
686 ipcopmake postfix
687 ipcopmake fetchmail
688 ipcopmake cyrusimap
689 ipcopmake procmail
690 ipcopmake clamav
691 ipcopmake razor
692 ipcopmake spamassassin
693 ipcopmake amavisd
694 echo -ne "`date -u '+%b %e %T'`: Building ### VoIP-Server ### \n" | tee -a $LOGFILE
695 ipcopmake stund
696 ipcopmake asterisk
697 ipcopmake openvpn
698 ipcopmake edonkeyclc
699 ipcopmake sane
700 echo -ne "`date -u '+%b %e %T'`: Building ### MP3-Server ### \n" | tee -a $LOGFILE
701 ipcopmake lame
702 ipcopmake gnump3d
703 ipcopmake rsync
704 ipcopmake tcpwrapper
705 ipcopmake portmap
706 ipcopmake nfs
707 # wget http://www.guzu.net/linux/hddtemp.db && mv hddtemp.db $BASEDIR/build/etc/hddtemp.db
708 # ipcopmake hddtemp
709 # ipcopmake stunnel # Ausgeschaltet, weil wir es doch nicht nutzen
710 }
711
712 buildinstaller() {
713 # Run installer scripts one by one
714 LOGFILE="$BASEDIR/log/_build.installer.log"
715 export LOGFILE
716 echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
717 if [ 'i386' = $MACHINE ]; then
718 ipcopmake syslinux
719 ipcopmake as86
720 ipcopmake mbr
721 ipcopmake uClibc
722 fi
723 installmake busybox
724 installmake sysvinit
725 installmake e2fsprogs
726 installmake misc-progs
727 installmake slang
728 installmake util-linux
729 installmake newt
730 installmake pciutils
731 installmake pcmcia-cs
732 installmake kbd
733 installmake installer
734 installmake scsi.img
735 installmake driver.img
736 installmake initrd
737 installmake boot.img
738 }
739
740 buildpackages() {
741 LOGFILE="$BASEDIR/log/_build.packages.log"
742 export LOGFILE
743 echo "... see detailed log in _build.*.log files" >> $LOGFILE
744 echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
745 # Strip files
746 echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
747 find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
748 ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
749 -ls -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
750 # add -ls before -exec if you want to verify what files are stripped
751
752 find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
753 -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
754 # there add -v to strip to verify
755
756 if [ 'i386' = $MACHINE ]; then
757 # Create fcdsl packages
758 echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
759 cp $LFS/install/images/fcdsl/license.txt $LFS >> $LOGFILE 2>&1
760 touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
761 cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
762 lib/modules/$KVER/misc/fcdsl*.o.gz \
763 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
764 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
765 etc/fcdsl/fcdsl*.conf \
766 etc/drdsl/{drdsl,drdsl.ini} \
767 license.txt \
768 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
769 rm -f $LFS/license.txt >> $LOGFILE 2>&1
770 cd $BASEDIR
771 fi
772
773 # Create update for this version
774 # echo "`date -u '+%b %e %T'`: Building update $VERSION tgz" | tee -a $LOGFILE
775 # tar -cz -C $BASEDIR/build --files-from=$BASEDIR/updates/$VERSION/ROOTFILES.$MACHINE-$VERSION -f $BASEDIR/updates/$VERSION/patch.tar.gz --exclude='#*';
776 # chmod 755 $BASEDIR/updates/$VERSION/setup
777 # tar -cz -C $BASEDIR/updates/$VERSION -f $LFS/install/images/$SNAME-update-$VERSION.$MACHINE.tgz patch.tar.gz setup information
778 # rm -f $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
779
780 # Generating list of packages used
781 echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
782 rm -f $BASEDIR/doc/packages-list
783 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
784 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
785 echo " * `basename $i`" >>$BASEDIR/doc/packages-list
786 fi
787 done
788 echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
789 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
790 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
791 rm -f $BASEDIR/doc/packages-list
792 # packages-list.txt is ready to be displayed for wiki page
793
794 # Create ISO for CDRom and USB-superfloppy
795 ipcopmake cdrom
796 cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
797
798 # Build IPFire packages
799 ipfiredist asterisk
800 ipfiredist cyrusimap
801 ipfiredist fetchmail
802 ipfiredist gnump3d
803 ipfiredist libtiff
804 ipfiredist libxml2
805 ipfiredist mc
806 ipfiredist postfix
807 ipfiredist pwlib
808 ipfiredist sane
809 ipfiredist spandsp
810 ipfiredist sudo
811 ipfiredist xampp
812 ipfiredist xinetd
813 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
814 cp -f $LFS/paks/*.tar.gz $LFS/paks/*.md5 $BASEDIR/packages >> $LOGFILE 2>&1
815
816 # Cleanup
817 stdumount
818 rm -rf $BASEDIR/build/tmp/*
819
820 # Generating total list of files
821 echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
822 rm -f $BASEDIR/log/FILES
823 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
824 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
825 echo "##" >>$BASEDIR/log/FILES
826 echo "## `basename $i`" >>$BASEDIR/log/FILES
827 echo "##" >>$BASEDIR/log/FILES
828 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
829 fi
830 done
831
832 cd $PWD
833
834 }
835
836 # See what we're supposed to do
837 case "$1" in
838 build)
839 BUILDMACHINE=`uname -m`
840 PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4.*-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
841 #only restore on a clean disk
842 if [ ! -f log/perl-*-tools ]; then
843 if [ ! -n "$PACKAGE" ]; then
844 echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
845 prepareenv
846 buildtoolchain
847 else
848 PACKAGENAME=${PACKAGE%.tar.gz}
849 echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
850 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
851 tar zxf $PACKAGE
852 prepareenv
853 else
854 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
855 fi
856 fi
857 else
858 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
859 prepareenv
860 fi
861 buildbase
862 buildipcop
863 buildinstaller
864 buildpackages
865 ;;
866 shell)
867 # enter a shell inside LFS chroot
868 # may be used to changed kernel settings
869 prepareenv
870 entershell
871 ;;
872 changelog)
873 echo -n "Loading new Changelog from SVN: "
874 svn log http://svn.ipfire.eu/svn/ipfire > doc/ChangeLog
875 echo "Finished!"
876 ;;
877 check)
878 echo "Checking sources files availability on the web"
879 if [ ! -d $DIR_CHK ]; then
880 mkdir -p $DIR_CHK
881 fi
882 FINISHED=0
883 cd $BASEDIR/lfs
884 for c in `seq $MAX_RETRIES`; do
885 if (( FINISHED==1 )); then
886 break
887 fi
888 FINISHED=1
889 cd $BASEDIR/lfs
890 for i in *; do
891 if [ -f "$i" -a "$i" != "Config" ]; then
892 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
893 MESSAGE="$i\t ($c/$MAX_RETRIES)" check
894 if [ $? -ne 0 ]; then
895 echo "Check : wget error in lfs/$i"
896 FINISHED=0
897 fi
898 fi
899 done
900 done
901 cd -
902 ;;
903 checkclean)
904 echo "Erasing sources files availability tags"
905 rm -rf $DIR_CHK/*
906 ;;
907 clean)
908 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
909 $LOSETUP -d $i 2>/dev/null
910 done
911 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
912 umount $i
913 done
914 stdumount
915 for i in `seq 0 7`; do
916 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
917 umount /dev/loop${i} 2>/dev/null;
918 losetup -d /dev/loop${i} 2>/dev/null;
919 fi;
920 done
921 rm -rf $BASEDIR/build
922 rm -rf $BASEDIR/cdrom
923 rm -rf $BASEDIR/packages
924 rm -rf $BASEDIR/log
925 if [ -h /tools ]; then
926 rm -f /tools
927 fi
928 ;;
929 dist)
930 echo -ne "Updating & building source package from SVN: "
931 svn up > /dev/null
932 svn export http://svn.ipfire.eu/svn/ipfire ipfire-source/ --force > /dev/null
933 tar cfz ipfire-source-`date +'%Y-%m-%d'`-r`svn info | grep Revision | cut -c 11-`.tar.gz ipfire-source
934 rm ipfire-source/ -r
935 echo "Finished!"
936 ;;
937 newpak)
938 # create structure for a new package
939 echo -e "Name of the new package: $2"
940 if [ ! -f "lfs/$2" ]; then
941 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
942 mkdir -p src/paks/$2
943 cd src/paks/$2
944 echo "`date -u '+%b %e %T'`: Creating files"
945 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
946
947 touch ROOTFILES
948 touch CONFFILES
949 touch {,un}install.sh
950 ## install.sh
951 echo '#!/bin/bash' > install.sh
952 echo '#' >> install.sh
953 echo '#################################################################' >> install.sh
954 echo '# #' >> install.sh
955 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
956 echo '# #' >> install.sh
957 echo '#################################################################' >> install.sh
958 echo '#' >> install.sh
959 echo '# Extract the files' >> install.sh
960 echo 'tar xfz files.tgz -C /' >> install.sh
961 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
962 ## uninstall.sh
963 echo '#!/bin/bash' > uninstall.sh
964 echo '#################################################################' >> uninstall.sh
965 echo '# #' >> uninstall.sh
966 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
967 echo '# #' >> uninstall.sh
968 echo '#################################################################' >> uninstall.sh
969 echo '#' >> uninstall.sh
970 echo '# Delete the files' >> uninstall.sh
971 echo '## Befehl fehlt noch' >> uninstall.sh
972 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
973 echo "`date -u '+%b %e %T'`: Adding files to SVN"
974 cd - && svn add lfs/$2 && svn add src/paks/$2
975
976 echo -n "Do you want to remove the folders? [y/n]"
977 read REM
978 if [ "$REM" == "y" ]; then
979 echo "Removing the folders..."
980 svn del src/paks/$2 --force
981 else
982 echo "Folders are kept."
983 fi
984 else
985 echo "$2 already exists"
986 fi
987 exit 0
988 ;;
989 prefetch)
990 if [ ! -d $BASEDIR/cache ]; then
991 mkdir $BASEDIR/cache
992 fi
993 mkdir -p $BASEDIR/log
994 echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
995 FINISHED=0
996 cd $BASEDIR/lfs
997 for c in `seq $MAX_RETRIES`; do
998 if (( FINISHED==1 )); then
999 break
1000 fi
1001 FINISHED=1
1002 cd $BASEDIR/lfs
1003 for i in *; do
1004 if [ -f "$i" -a "$i" != "Config" ]; then
1005 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1006 if [ $? -ne 0 ]; then
1007 echo "Prefetch : wget error in lfs/$i"
1008 FINISHED=0
1009 else
1010 if [ $c -eq 1 ]; then
1011 echo "Prefetch : lfs/$i files loaded"
1012 fi
1013 fi
1014 fi
1015 done
1016 done
1017 echo "Prefetch : verifying md5sum"
1018 ERROR=0
1019 for i in *; do
1020 if [ -f "$i" -a "$i" != "Config" ]; then
1021 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1022 if [ $? -ne 0 ]; then
1023 echo "md5 difference in lfs/$i"
1024 ERROR=1
1025 fi
1026 fi
1027 done
1028 if [ $ERROR -eq 0 ]; then
1029 echo "Prefetch : all files md5sum match"
1030 fi
1031 cd -
1032 ;;
1033 toolchain)
1034 prepareenv
1035 buildtoolchain
1036 BUILDMACHINE=`uname -m`
1037 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1038 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1039 build/{bin,etc,usr/bin,usr/local} \
1040 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1041 log >> $LOGFILE
1042 md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1043 > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1044 stdumount
1045 ;;
1046 gettoolchain)
1047 BUILDMACHINE=`uname -m`
1048 # arbitrary name to be updated in case of new toolchain package upload
1049 PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
1050 URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
1051 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1052 cd $BASEDIR/cache
1053 wget $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5
1054 if [ $? -ne 0 ]; then
1055 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1056 else
1057 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1058 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1059 echo "`date -u '+%b %e %T'`: Uncompressing toolchain" | tee -a $LOGFILE
1060 cd $BASEDIR && tar xvfz cache/$PACKAGE.tar.gz -C .
1061 rm -vf $BASEDIR/cache/$PACKAGE.{tar.gz,md5}
1062 else
1063 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1064 fi
1065 fi
1066 ;;
1067 update)
1068 echo "Load the latest source-files:"
1069 svn update
1070 ;;
1071 commit)
1072 echo "Upload the changed files:"
1073 svn commit
1074 svn up > /dev/null
1075 ;;
1076 make)
1077 echo "Do a complete compile:"
1078 ./make.sh prefetch && ./make.sh build
1079 ;;
1080 diff)
1081 echo -ne "Make a local diff to last SVN revision: "
1082 svn diff > ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff
1083 echo "Finished!"
1084 echo "Diff was successfully saved to ipfire-diff-`date +'%Y-%m-%d-%H:%M'`-r`svn info | grep Revision | cut -c 11-`.diff"
1085 ;;
1086 *)
1087 echo "Usage: $0 {build|changelog|check|checkclean|clean|commit|diff|dist|gettoolchain|make|newpak|prefetch|shell|toolchain|update}"
1088 cat doc/make.sh-usage
1089 exit 1
1090 ;;
1091 esac