]> git.ipfire.org Git - ipfire-2.x.git/blame - make.sh
pwlib geƤndert.
[ipfire-2.x.git] / make.sh
CommitLineData
df5e82b3
MT
1#!/bin/bash
2#
3############################################################################
4# #
f8e5510c 5# This file is part of the IPFire Firewall. #
df5e82b3 6# #
f8e5510c 7# IPFire is free software; you can redistribute it and/or modify #
df5e82b3
MT
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# #
f8e5510c 12# IPFire is distributed in the hope that it will be useful, #
df5e82b3
MT
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 #
f8e5510c 18# along with IPFire; if not, write to the Free Software #
df5e82b3
MT
19# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
20# #
f8e5510c 21# Copyright (C) 2006 IPFire-Team <entwickler@ipfire.org>. #
df5e82b3
MT
22# #
23############################################################################
df5e82b3
MT
24#
25
f8e5510c 26 NAME="IPFire" # Software name
3ea75603 27 SNAME="ipfire" # Short name
f8e5510c 28 VERSION="1.4" # Version number
3ea75603
MT
29# PREVIOUSTAG=IPCOP_v1_4_10_FINAL
30 SLOGAN="We secure your network" # Software slogan
31 CONFIG_ROOT=/var/ipfire # Configuration rootdir
df5e82b3 32 NICE=10
94025eea 33 MAX_RETRIES=3 # prefetch/check loop
df5e82b3
MT
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
75stdumount() {
76 umount $BASEDIR/build/dev/pts 2>/dev/null;
94025eea
MT
77 umount $BASEDIR/build/proc 2>/dev/null;
78 umount $BASEDIR/build/install/mnt 2>/dev/null;
df5e82b3
MT
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;
94025eea
MT
82 umount $BASEDIR/build/usr/src/doc 2>/dev/null;
83 umount $BASEDIR/build/usr/src/html 2>/dev/null;
df5e82b3 84 umount $BASEDIR/build/usr/src/langs 2>/dev/null;
94025eea
MT
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;
df5e82b3
MT
88}
89
90exiterror() {
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
102entershell() {
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
125prepareenv() {
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############################################################################
247lfsmake1() {
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
273lfsmake2() {
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
305ipcopmake() {
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
e7164bb4
MT
337ipfiredist() {
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/sbin/
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 if [ -e $BASEDIR/packages ]; then
360 mv -f $BASEDIR/build/paks/* $BASEDIR/packages/
361 else
362 mkdir -p $BASEDIR/packages
363 mv -f $BASEDIR/build/paks/* $BASEDIR/packages/
364 fi
365 return 0
366}
367
df5e82b3
MT
368
369installmake() {
370 if [ -f $BASEDIR/build/usr/src/lfs/$1 ]; then
371 echo "`date -u '+%b %e %T'`: Building $*" | tee -a $LOGFILE
372 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t " download >> $LOGFILE 2>&1
373 if [ $? -ne 0 ]; then
374 exiterror "Download error in $1"
375 fi
376 cd $BASEDIR/lfs && make -s -f $* LFS_BASEDIR=$BASEDIR MESSAGE="$1\t md5sum" md5 >> $LOGFILE 2>&1
377 if [ $? -ne 0 ]; then
378 exiterror "md5sum error in $1, check file in cache or signature"
379 fi
380 chroot $LFS /tools/bin/env -i HOME=/root \
381 TERM=$TERM PS1='\u:\w\$ ' \
382 PATH=/usr/local/bin:/opt/$MACHINE-uClibc/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin \
383 VERSION=$VERSION \
384 CONFIG_ROOT=$CONFIG_ROOT \
385 LFS_PASS="install" \
386 NAME="$NAME" SNAME="$SNAME" SLOGAN="$SLOGAN" \
387 CFLAGS="-Os" CXXFLAGS="-Os" \
388 CCACHE_DIR=/usr/src/ccache CCACHE_HASHDIR=1 \
389 KVER=$KVER \
390 BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \
391 /bin/bash -x -c "cd /usr/src/lfs && \
392 make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
393 if [ $? -ne 0 ]; then
394 exiterror "Building $*"
395 fi
396 else
397 exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
398 fi
399 return 0
400}
401
402buildtoolchain() {
403 LOGFILE="$BASEDIR/log/_build.toolchain.log"
404 export LOGFILE
405 echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" | tee -a $LOGFILE
406 # Build sed now, as we use some extensions
407 ORG_PATH=$PATH
408 NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
409 export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
410 lfsmake1 ccache
411 lfsmake1 sed LFS_PASS=1
412 lfsmake1 m4 LFS_PASS=1
413 lfsmake1 bison LFS_PASS=1
414 lfsmake1 flex LFS_PASS=1
415 lfsmake1 binutils LFS_PASS=1
416 lfsmake1 gcc LFS_PASS=1
417 export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
418
419 lfsmake1 linux
420 lfsmake1 tcl
421 lfsmake1 expect
422 lfsmake1 glibc
423 lfsmake1 dejagnu
424 lfsmake1 gcc LFS_PASS=2
425 lfsmake1 binutils LFS_PASS=2
426 lfsmake1 gawk
427 lfsmake1 coreutils
428 lfsmake1 bzip2
429 lfsmake1 gzip
430 lfsmake1 diffutils
431 lfsmake1 findutils
432 lfsmake1 make
433 lfsmake1 grep
434 lfsmake1 sed LFS_PASS=2
435 lfsmake1 m4 LFS_PASS=2
436 lfsmake1 bison LFS_PASS=2
437 lfsmake1 flex LFS_PASS=2
438 lfsmake1 gettext
439 lfsmake1 ncurses
440 lfsmake1 patch
441 lfsmake1 tar
442 lfsmake1 texinfo
443 lfsmake1 bash
444 lfsmake1 util-linux
445 lfsmake1 perl
446 export PATH=$ORG_PATH
447}
448
449buildbase() {
450 LOGFILE="$BASEDIR/log/_build.base.log"
451 export LOGFILE
452 echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" | tee -a $LOGFILE
453 # Run LFS dynamic binary creation scripts one by one
454 lfsmake2 stage2
455 lfsmake2 makedev
456 lfsmake2 linux
457 lfsmake2 man-pages
458 lfsmake2 glibc
459 lfsmake2 binutils
460 lfsmake2 gcc
461 lfsmake2 coreutils
462 lfsmake2 zlib
463 lfsmake2 mktemp
464 lfsmake2 iana-etc
465 lfsmake2 findutils
466 lfsmake2 gawk
467 lfsmake2 ncurses
468 lfsmake2 vim
469 lfsmake2 m4
470 lfsmake2 bison
471 lfsmake2 less
472 lfsmake2 groff
473 lfsmake2 sed
474 lfsmake2 flex
475 lfsmake2 gettext
476 lfsmake2 net-tools
477 lfsmake2 inetutils
478 lfsmake2 perl
479 lfsmake2 texinfo
480 lfsmake2 autoconf
481 lfsmake2 automake
482 lfsmake2 bash
483 lfsmake2 file
484 lfsmake2 libtool
485 lfsmake2 bzip2
486 lfsmake2 diffutils
487 lfsmake2 ed
488 lfsmake2 kbd
489 lfsmake2 e2fsprogs
490 lfsmake2 grep
491 if [ 'i386' = $MACHINE ]; then
492 lfsmake2 grub
493 elif [ 'alpha' = $MACHINE ]; then
494 lfsmake2 aboot
495 fi
496 lfsmake2 gzip
497 lfsmake2 man
498 lfsmake2 make
499 lfsmake2 modutils
500 lfsmake2 patch
501 lfsmake2 procinfo
502 lfsmake2 procps
503 lfsmake2 psmisc
504 lfsmake2 shadow
505 lfsmake2 sysklogd
506 lfsmake2 sysvinit
507 lfsmake2 tar
508 lfsmake2 util-linux
509}
510
511buildipcop() {
512 # Run IPCop make scripts one by one
513 LOGFILE="$BASEDIR/log/_build.ipcop.log"
514 export LOGFILE
515 echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" | tee -a $LOGFILE
516
517 # Build these first as some of the kernel packages below rely on
518 # these for some of their client program functionality
519 ipcopmake configroot
520 ipcopmake dhcp
521 ipcopmake dhcpcd
522 ipcopmake libusb
523 ipcopmake libpcap
524 ipcopmake linux-atm
525 ipcopmake ppp
526 ipcopmake rp-pppoe
527 ipcopmake unzip
528 # Do SMP now
529 if [ 'i386' = $MACHINE ]; then
530 # abuse the SMP flag, and make an minimal installer kernel first
531 # so that the boot floppy always works.....
532 ipcopmake linux LFS_PASS=ipcop SMP=installer
533 ipcopmake linux LFS_PASS=ipcop SMP=1
534 ipcopmake 3cp4218 SMP=1
535 ipcopmake amedyn SMP=1
536 ipcopmake cxacru SMP=1
537 ipcopmake eagle SMP=1
538
539 # These are here because they have i386 only binary libraries
540 # included in the package.
541 ipcopmake cnx_pci SMP=1
542 ipcopmake fcdsl SMP=1
543 ipcopmake fcdsl2 SMP=1
544 ipcopmake fcdslsl SMP=1
545 ipcopmake fcdslusb SMP=1
546 ipcopmake fcdslslusb SMP=1
547 ipcopmake pulsar SMP=1
548 ipcopmake unicorn SMP=1
549 fi
550
551 ipcopmake linux LFS_PASS=ipcop
552 ipcopmake 3cp4218
553 ipcopmake amedyn
554 ipcopmake cxacru
555 ipcopmake eciadsl
556 ipcopmake eagle
557 ipcopmake speedtouch
558 if [ 'i386' = $MACHINE ]; then
559 # These are here because they have i386 only binary libraries
560 # included in the package.
561 ipcopmake cnx_pci
562 ipcopmake fcdsl
563 ipcopmake fcdsl2
564 ipcopmake fcdslsl
565 ipcopmake fcdslusb
566 ipcopmake fcdslslusb
567 ipcopmake pulsar
568 ipcopmake unicorn
569 fi
570
571 ipcopmake pcmcia-cs
572 ipcopmake expat
573 ipcopmake gdbm
574 ipcopmake gmp
575 ipcopmake openssl
576 ipcopmake python
577 ipcopmake libnet
578 ipcopmake libpng
579 ipcopmake gd
580 ipcopmake popt
581 ipcopmake slang
582 ipcopmake newt
583 ipcopmake libcap
584 ipcopmake pciutils
585 ipcopmake pcre
586 ipcopmake apache
587 ipcopmake arping
588 ipcopmake beep
589 ipcopmake bind
590 ipcopmake capi4k-utils
591 ipcopmake cdrtools
592 ipcopmake dnsmasq
593 ipcopmake dosfstools
594 ipcopmake ethtool
595 ipcopmake ez-ipupdate
596 ipcopmake fcron
597 ipcopmake perl-GD
598 ipcopmake gnupg
599 ipcopmake hdparm
600 ipcopmake ibod
601 ipcopmake initscripts
602 ipcopmake iptables
603 ipcopmake ipac-ng
604 ipcopmake ipaddr
605 ipcopmake iproute2
606 ipcopmake iptstate
607 ipcopmake iputils
608 ipcopmake isapnptools
609 ipcopmake isdn4k-utils
610 ipcopmake kudzu
611 ipcopmake logrotate
612 ipcopmake logwatch
613 ipcopmake mingetty
614 ipcopmake misc-progs
615 ipcopmake mtools
616 ipcopmake nano
617 ipcopmake nash
618 ipcopmake nasm
619 ipcopmake URI
620 ipcopmake HTML-Tagset
621 ipcopmake HTML-Parser
622 ipcopmake Compress-Zlib
623 ipcopmake Digest
624 ipcopmake Digest-SHA1
625 ipcopmake Digest-HMAC
626 ipcopmake libwww-perl
627 ipcopmake Net-DNS
628 ipcopmake Net-IPv4Addr
629 ipcopmake Net_SSLeay
630 ipcopmake noip_updater
631 ipcopmake ntp
632 ipcopmake oinkmaster
633 ipcopmake openssh
634 ipcopmake openswan
635 ipcopmake pptpclient
636 ipcopmake rrdtool
637 ipcopmake setserial
638 ipcopmake setup
639 ipcopmake snort
640 #ipcopmake speedycgi
641 ipcopmake squid
642 ipcopmake squid-graph
643 ipcopmake tcpdump
644 ipcopmake traceroute
645 ipcopmake vlan
646 ipcopmake wireless
647 ipcopmake libsafe
648 ipcopmake 3c5x9setup
56daf5bb 649 echo -ne "`date -u '+%b %e %T'`: Building IPFire modules \n" | tee -a $LOGFILE
c9673262
MT
650 ipcopmake sudo
651 ipcopmake xinetd
f8e5510c
MT
652 ipcopmake pkg-config
653 ipcopmake glib
1fe6c87b 654 ipcopmake wget
56daf5bb 655 ipcopmake berkeley-DB
df5e82b3 656 ipcopmake xampp
1fe6c87b 657 ipcopmake bridge-utils
df5e82b3 658 ipcopmake pam
56daf5bb 659 ipcopmake pammysql
052ad1cd
MT
660 ipcopmake saslauthd PASS=1
661 ipcopmake openldap
662 ipcopmake saslauthd PASS=2
f8e5510c
MT
663# ipcopmake samba
664 ipcopmake mc
94025eea
MT
665 ipcopmake postfix
666 ipcopmake stund
667 ipcopmake lpd
6233f08f
MT
668 ipcopmake pwlib
669 ipcopmake openh323
052ad1cd 670# wget http://www.guzu.net/linux/hddtemp.db && mv hddtemp.db $BASEDIR/build/etc/hddtemp.db
f8e5510c 671# ipcopmake hddtemp
a9b17001
MT
672 ipcopmake lzo
673 ipcopmake openvpn
94025eea 674
df5e82b3
MT
675}
676
677buildinstaller() {
678 # Run installer scripts one by one
679 LOGFILE="$BASEDIR/log/_build.installer.log"
680 export LOGFILE
681 echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" | tee -a $LOGFILE
682 if [ 'i386' = $MACHINE ]; then
683 ipcopmake syslinux
684 ipcopmake as86
685 ipcopmake mbr
686 ipcopmake uClibc
687 fi
688 installmake busybox
689 installmake sysvinit
690 installmake e2fsprogs
691 installmake misc-progs
692 installmake slang
693 installmake util-linux
694 installmake newt
695 installmake pciutils
696 installmake pcmcia-cs
697 installmake kbd
698 installmake installer
699 installmake scsi.img
700 installmake driver.img
701 installmake initrd
702 installmake boot.img
703}
704
705buildpackages() {
706 LOGFILE="$BASEDIR/log/_build.packages.log"
707 export LOGFILE
708 echo "... see detailed log in _build.*.log files" >> $LOGFILE
709 echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" | tee -a $LOGFILE
710 # Strip files
711 echo "`date -u '+%b %e %T'`: Stripping files" | tee -a $LOGFILE
712 find $LFS/lib $LFS/usr/lib $LFS/usr/share/rrdtool-* $LFS/install ! -type l \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
713 ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
94025eea 714 -ls -exec $LFS/tools/bin/strip --strip-all {} \; >> $LOGFILE 2>&1
df5e82b3
MT
715 # add -ls before -exec if you want to verify what files are stripped
716
717 find $LFS/{,s}bin $LFS/usr/{,s}bin $LFS/usr/local/{,s}bin ! -type l \
718 -exec file {} \; | grep " ELF " | cut -f1 -d ':' | xargs $LFS/tools/bin/strip --strip-all >> $LOGFILE 2>&1
719 # there add -v to strip to verify
720
721 if [ 'i386' = $MACHINE ]; then
722 # Create fcdsl packages
723 echo "`date -u '+%b %e %T'`: Building fcdsl tgz" | tee -a $LOGFILE
724 cp $LFS/install/images/fcdsl/license.txt $LFS >> $LOGFILE 2>&1
725 touch $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
726 cd $LFS && tar cvfz $LFS/install/images/$SNAME-fcdsl-$VERSION.$MACHINE.tgz \
727 lib/modules/$KVER/misc/fcdsl*.o.gz \
728 lib/modules/$KVER-smp/misc/fcdsl*.o.gz \
729 usr/lib/isdn/{fds?base.bin,fd?ubase.frm} \
730 etc/fcdsl/fcdsl*.conf \
731 etc/drdsl/{drdsl,drdsl.ini} \
732 license.txt \
733 var/run/{need-depmod-$KVER,need-depmod-$KVER-smp} >> $LOGFILE 2>&1
734 rm -f $LFS/license.txt >> $LOGFILE 2>&1
735 cd $BASEDIR
736 fi
737
c2b15814 738# Create update for this version
df5e82b3
MT
739# echo "`date -u '+%b %e %T'`: Building update $VERSION tgz" | tee -a $LOGFILE
740# tar -cz -C $BASEDIR/build --files-from=$BASEDIR/updates/$VERSION/ROOTFILES.$MACHINE-$VERSION -f $BASEDIR/updates/$VERSION/patch.tar.gz --exclude='#*';
741# chmod 755 $BASEDIR/updates/$VERSION/setup
742# tar -cz -C $BASEDIR/updates/$VERSION -f $LFS/install/images/$SNAME-update-$VERSION.$MACHINE.tgz patch.tar.gz setup information
743# rm -f $LFS/var/run/{need-depmod-$KVER,need-depmod-$KVER-smp}
744
745 # Generating list of packages used
746 echo "`date -u '+%b %e %T'`: Generating packages list from logs" | tee -a $LOGFILE
747 rm -f $BASEDIR/doc/packages-list
748 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
749 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
3ea75603 750 echo " * `basename $i`" >>$BASEDIR/doc/packages-list
df5e82b3
MT
751 fi
752 done
3ea75603 753 echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
df5e82b3
MT
754 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
755 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
756 rm -f $BASEDIR/doc/packages-list
c9673262 757 # packages-list.txt is ready to be displayed for wiki page
df5e82b3
MT
758
759 # Create ISO for CDRom and USB-superfloppy
760 ipcopmake cdrom
761 cp $LFS/install/images/{*.iso,*.tgz} $BASEDIR >> $LOGFILE 2>&1
c9673262 762
e7164bb4 763 # Build IPFire packages
f8e5510c 764 ipfiredist mc
c9673262
MT
765 ipfiredist postfix
766 ipfiredist sudo
767 ipfiredist xinetd
df5e82b3
MT
768 # Cleanup
769 stdumount
770 rm -rf $BASEDIR/build/tmp/*
771
772 # Generating total list of files
773 echo "`date -u '+%b %e %T'`: Generating files list from logs" | tee -a $LOGFILE
774 rm -f $BASEDIR/log/FILES
775 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
776 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
777 echo "##" >>$BASEDIR/log/FILES
778 echo "## `basename $i`" >>$BASEDIR/log/FILES
779 echo "##" >>$BASEDIR/log/FILES
780 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
781 fi
782 done
783
784 cd $PWD
785
786}
787
788# See what we're supposed to do
789case "$1" in
790build)
791 BUILDMACHINE=`uname -m`
792 PACKAGE=`ls -v -r $BASEDIR/cache/$SNAME-1.4.*-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
793 #only restore on a clean disk
794 if [ ! -f log/perl-*-tools ]; then
795 if [ ! -n "$PACKAGE" ]; then
796 echo "`date -u '+%b %e %T'`: Full toolchain compilation" | tee -a $LOGFILE
797 prepareenv
798 buildtoolchain
799 else
800 PACKAGENAME=${PACKAGE%.tar.gz}
801 echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" | tee -a $LOGFILE
802 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
803 tar zxf $PACKAGE
804 prepareenv
805 else
806 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
807 fi
808 fi
809 else
810 echo "`date -u '+%b %e %T'`: Using installed toolchain" | tee -a $LOGFILE
811 prepareenv
812 fi
813 buildbase
814 buildipcop
815 buildinstaller
816 buildpackages
817 ;;
818shell)
819 # enter a shell inside LFS chroot
820 # may be used to changed kernel settings
821 prepareenv
822 entershell
823 ;;
824changelog)
825 echo "Building doc/Changelog from CVS"
826 # cv2cl script come from http://www.red-bean.com/cvs2cl/
827 if [ ! -s $BASEDIR/doc/CVS/Tag ]; then
828 BRANCHOPTS=""
829 else
830 BRANCH=`cat $BASEDIR/doc/CVS/Tag`
831 BRANCH=${BRANCH:1}
832 BRANCHOPTS="--follow-only $BRANCH"
833 fi
834
835 $BASEDIR/tools/cvs2cl.pl --gmt --show-dead $BRANCHOPTS -f $BASEDIR/doc/ChangeLog
836 rm -f $BASEDIR/doc/ChangeLog.bak
837 echo
838 echo "Commit the change now to update CVS"
839 ;;
840check)
841 echo "Checking sources files availability on the web"
842 if [ ! -d $DIR_CHK ]; then
843 mkdir -p $DIR_CHK
844 fi
845 FINISHED=0
846 cd $BASEDIR/lfs
847 for c in `seq $MAX_RETRIES`; do
848 if (( FINISHED==1 )); then
849 break
850 fi
851 FINISHED=1
852 cd $BASEDIR/lfs
853 for i in *; do
854 if [ -f "$i" -a "$i" != "Config" ]; then
855 make -s -f $i MACHINE=$MACHINE LFS_BASEDIR=$BASEDIR ROOT=$BASEDIR/build \
856 MESSAGE="$i\t ($c/$MAX_RETRIES)" check
857 if [ $? -ne 0 ]; then
858 echo "Check : wget error in lfs/$i"
859 FINISHED=0
860 fi
861 fi
862 done
863 done
864 cd -
865 ;;
866checkclean)
867 echo "Erasing sources files availability tags"
868 rm -rf $DIR_CHK/*
869 ;;
870clean)
871 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
872 $LOSETUP -d $i 2>/dev/null
873 done
874 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
875 umount $i
876 done
877 stdumount
878 for i in `seq 0 7`; do
879 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
880 umount /dev/loop${i} 2>/dev/null;
881 losetup -d /dev/loop${i} 2>/dev/null;
882 fi;
883 done
884 rm -rf $BASEDIR/build
885 rm -rf $BASEDIR/cdrom
886 rm -rf $BASEDIR/log
887 rm -f $BASEDIR/updates/$VERSION/patch.tar.gz;
888 if [ -h /tools ]; then
889 rm -f /tools
890 fi
891 ;;
892dist)
893 echo "Building source package from CVS, list of changed files, MD5 of release files"
894 if [ ! -s $BASEDIR/doc/CVS/Tag ]; then
895 BRANCH=""
896 BRANCHOPTS="-D `date +'%Y-%m-%d'`"
897 else
898 BRANCH=`cat $BASEDIR/doc/CVS/Tag`
899 BRANCH=${BRANCH:1}
900 BRANCHOPTS="-r $BRANCH"
901 fi
902
903 rm -rf $BASEDIR/build/tmp/$SNAME-$VERSION $BASEDIR/doc/release.txt
904 cd $BASEDIR/build/tmp
905 # build sources tgz
906 echo "Export tree $BRANCH $SNAME-$VERSION"
907 cvs -z3 -d `cat $BASEDIR/CVS/Root` export $BRANCHOPTS ipcop
908 if [ $? -eq 0 ]; then
909 mv ipcop $SNAME-$VERSION
910 tar cfz $BASEDIR/$SNAME-sources-$VERSION.tgz $SNAME-$VERSION
911 cd $BASEDIR
912
913 if [ ! -d $BASEDIR/build/tmp/$PREVIOUSTAG ]; then
914 # export previous version to be compared with actual, this help to check wich files need to go in update
915 cd $BASEDIR/build/tmp
916 echo "Export tree $PREVIOUSTAG"
917 cvs -z3 -d `cat $BASEDIR/CVS/Root` export -r $PREVIOUSTAG ipcop
918 mv ipcop $PREVIOUSTAG
919 fi
920 if [ -d $BASEDIR/build/tmp/$PREVIOUSTAG -o -d $BASEDIR/build/tmp/$SNAME-$VERSION ]; then
921 cd $BASEDIR/build/tmp
922 echo "diff $PREVIOUSTAG <> $BRANCH $SNAME-$VERSION >doc/updated-sources.txt"
923 diff -rq $PREVIOUSTAG $SNAME-$VERSION > $BASEDIR/doc/updated-sources.txt
924 mv $BASEDIR/doc/updated-sources.txt $BASEDIR/doc/updated-sources.bak
925 sed -e "s+Files $PREVIOUSTAG\/++" \
926 -e "s+ and .*$++" \
927 -e "s+src/rc.d+etc/rc.d+" \
928 -e "s+^langs/+var/ipcop/langs/+" \
929 -e "s+html/cgi-bin+home/httpd/cgi-bin+" $BASEDIR/doc/updated-sources.bak \
930 > $BASEDIR/doc/updated-sources.txt
931 rm -f $BASEDIR/doc/updated-sources.bak
932 fi
933 fi
934 ;;
f8e5510c 935newpak)
a9b17001
MT
936 # create structure for a new package
937 echo -e "Name of the new package: $2"
938 if [ ! -f "lfs/$2" ]; then
939 echo "`date -u '+%b %e %T'`: Creating directory src/paks/$2"
940 mkdir -p src/paks/$2
941 cd src/paks/$2
f8e5510c 942 echo "`date -u '+%b %e %T'`: Creating files"
a9b17001
MT
943 cp $BASEDIR/lfs/postfix $BASEDIR/lfs/$2
944
f8e5510c
MT
945 touch ROOTFILES
946 touch CONFFILES
947 touch {,un}install.sh
a9b17001 948 ## install.sh
f8e5510c
MT
949 echo '#!/bin/bash' > install.sh
950 echo '#' >> install.sh
951 echo '#################################################################' >> install.sh
952 echo '# #' >> install.sh
953 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> install.sh
954 echo '# #' >> install.sh
955 echo '#################################################################' >> install.sh
956 echo '#' >> install.sh
957 echo '# Extract the files' >> install.sh
958 echo 'tar xfz files.tgz -C /' >> install.sh
a9b17001
MT
959 echo 'cp -f ROOTFILES /opt/pakfire/installed/ROOTFILES.$2' >> install.sh
960 ## uninstall.sh
f8e5510c
MT
961 echo '#!/bin/bash' > uninstall.sh
962 echo '#################################################################' >> uninstall.sh
963 echo '# #' >> uninstall.sh
964 echo '# This file belongs to IPFire Firewall - GPLv2 - www.ipfire.org #' >> uninstall.sh
965 echo '# #' >> uninstall.sh
966 echo '#################################################################' >> uninstall.sh
967 echo '#' >> uninstall.sh
968 echo '# Delete the files' >> uninstall.sh
969 echo '## Befehl fehlt noch' >> uninstall.sh
a9b17001 970 echo 'rm -f /opt/pakfire/installed/ROOTFILES.$2' >> uninstall.sh
f8e5510c 971 echo "`date -u '+%b %e %T'`: Adding files to SVN"
a9b17001
MT
972 cd - && svn add lfs/$2 && svn add src/paks/$2
973
974 echo -n "Do you want to remove the folders? [y/n]"
975 read REM
976 if [ "$REM" == "y" ]; then
977 echo "Removing the folders..."
978 svn del src/paks/$2 --force
979 else
980 echo "Folders are kept."
981 fi
df5e82b3 982 else
a9b17001 983 echo "$2 already exists"
df5e82b3 984 fi
df5e82b3
MT
985 exit 0
986 ;;
987prefetch)
988 if [ ! -d $BASEDIR/cache ]; then
989 mkdir $BASEDIR/cache
990 fi
991 mkdir -p $BASEDIR/log
992 echo "`date -u '+%b %e %T'`:Preload all source files" | tee -a $LOGFILE
993 FINISHED=0
994 cd $BASEDIR/lfs
995 for c in `seq $MAX_RETRIES`; do
996 if (( FINISHED==1 )); then
997 break
998 fi
999 FINISHED=1
1000 cd $BASEDIR/lfs
1001 for i in *; do
1002 if [ -f "$i" -a "$i" != "Config" ]; then
1003 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
1004 if [ $? -ne 0 ]; then
1005 echo "Prefetch : wget error in lfs/$i"
1006 FINISHED=0
1007 else
1008 if [ $c -eq 1 ]; then
1009 echo "Prefetch : lfs/$i files loaded"
1010 fi
1011 fi
1012 fi
1013 done
1014 done
1015 echo "Prefetch : verifying md5sum"
1016 ERROR=0
1017 for i in *; do
1018 if [ -f "$i" -a "$i" != "Config" ]; then
1019 make -s -f $i LFS_BASEDIR=$BASEDIR MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
1020 if [ $? -ne 0 ]; then
1021 echo "md5 difference in lfs/$i"
1022 ERROR=1
1023 fi
1024 fi
1025 done
1026 if [ $ERROR -eq 0 ]; then
1027 echo "Prefetch : all files md5sum match"
1028 fi
1029 cd -
1030 ;;
1031rootfiles)
1032 PREVIOUSVERSION=`echo $PREVIOUSTAG | sed -e 's/IPCOP_v//' -e 's/_FINAL//' -e 's/_/\./g'`
1033 # make md5 list of actual build
1034 # some packages include a timestamp (kernel/perl/python/vim and more), so md5 vary at each build
1035 # anyway, it is sometime usable after a patch or a minor upgrade to know wich files include in update
1036 if [ ! -f "$BASEDIR/build/install/cdrom/$SNAME-$VERSION.tgz" ]; then
1037 echo "need cdrom be build to read include files list, use ./make.sh build before."
1038 else
1039 tar tzf $BASEDIR/build/install/cdrom/$SNAME-$VERSION.tgz > $BASEDIR/updates/$VERSION/FILES.tmp
1040 cd $BASEDIR/build
1041 rm -f $BASEDIR/updates/$VERSION/FILES-$MACHINE-$VERSION.md5
1042 for line in `cat $BASEDIR/updates/$VERSION/FILES.tmp`; do
1043 if [ -f "$line" -a ! -L "$line" ]; then
1044 md5sum "$line" >> $BASEDIR/updates/$VERSION/FILES-$MACHINE-$VERSION.md5
1045 fi
1046 done
1047 diff $BASEDIR/updates/$PREVIOUSVERSION/FILES-$MACHINE-$PREVIOUSVERSION.md5 \
1048 $BASEDIR/updates/$VERSION/FILES-$MACHINE-$VERSION.md5 \
1049 > $BASEDIR/updates/$VERSION/FILES-$MACHINE.diff
1050 awk '$1==">" {print $3}' $BASEDIR/updates/$VERSION/FILES-$MACHINE.diff \
1051 > $BASEDIR/updates/$VERSION/ROOTFILES.add.$MACHINE
1052 awk '$1=="<" {print $3}' $BASEDIR/updates/$VERSION/FILES-$MACHINE.diff \
1053 > $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE.tmp
1054 rm -f $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE
1055 for line in `cat $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE.tmp`; do
1056 # a file is only removed when not in add file
1057 if ( ! grep -q "^$line$" $BASEDIR/updates/$VERSION/ROOTFILES.add.$MACHINE ); then
1058 echo $line >> $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE
1059 fi
1060 done
1061 rm -f $BASEDIR/updates/$VERSION/{FILES.tmp,FILES-*.diff,ROOTFILES.remove.*.tmp}
1062 fi
1063 exit 0
1064 ;;
1065toolchain)
1066 prepareenv
1067 buildtoolchain
1068 BUILDMACHINE=`uname -m`
1069 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1070 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1071 build/{bin,etc,usr/bin,usr/local} \
1072 build/tools/{bin,etc,*-linux-gnu,include,lib,libexec,sbin,share,var} \
1073 log >> $LOGFILE
1074 md5sum cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.tar.gz \
1075 > cache/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1076 stdumount
1077 ;;
1078gettoolchain)
1079 BUILDMACHINE=`uname -m`
1080 # arbitrary name to be updated in case of new toolchain package upload
e29556d8
MT
1081 PACKAGE=$SNAME-1.4-toolchain-$BUILDMACHINE
1082 URL_IPFIRE=`grep URL_IPFIRE lfs/Config | awk '{ print $3 }'`
df5e82b3
MT
1083 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" | tee -a $LOGFILE
1084 cd $BASEDIR/cache
e29556d8 1085 wget -c $URL_IPFIRE/toolchains/$PACKAGE.tar.gz $URL_IPFIRE/toolchains/$PACKAGE.md5
df5e82b3
MT
1086 if [ $? -ne 0 ]; then
1087 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" | tee -a $LOGFILE
1088 else
1089 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1090 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
e29556d8
MT
1091 echo "`date -u '+%b %e %T'`: Uncompressing toolchain" | tee -a $LOGFILE
1092 cd $BASEDIR && tar xvfz cache/$PACKAGE.tar.gz -C .
df5e82b3
MT
1093 else
1094 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1095 fi
1096 fi
1097 ;;
a9b17001
MT
1098update)
1099 echo "Load the latest source-files:"
1100 svn update
1101 ;;
df5e82b3 1102*)
a9b17001 1103 echo "Usage: $0 {build|changelog|check|checkclean|clean|dist|gettoolchain|newpak|prefetch|rootfiles|shell|toolchain|update}"
df5e82b3
MT
1104 cat doc/make.sh-usage
1105 exit 1
1106 ;;
3ea75603 1107esac