3 ############################################################################
5 # This file is part of the IPCop Firewall. #
7 # IPCop 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. #
12 # IPCop 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. #
17 # You should have received a copy of the GNU General Public License #
18 # along with IPCop; if not, write to the Free Software #
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
21 # Copyright (C) 2001 Mark Wormgoor <mark@wormgoor.com>. #
23 # (c) 2001 Eric S. Johansson <esj@harvee.billerica.ma.us> Check for Bash #
24 # (c) 2002 Thorsten Fischer <frosch@cs.tu-berlin.de> MD5Sum checking #
26 ############################################################################
28 # $Id: make.sh,v 1.129.2.145 2006/02/01 07:04:09 gespinasse Exp $
31 NAME
="IPFire" # Software name
32 SNAME
="ipfire" # Short name
33 VERSION
="1.4.11" # Version number
34 PREVIOUSTAG
=IPCOP_v1_4_10_FINAL
35 SLOGAN
="We save your network" # Software slogan
36 CONFIG_ROOT
=/var
/ipfire
# Configuration rootdir
38 MAX_RETRIES
=3 # prefetch/check loop
39 KVER
=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
42 # Debian specific settings
43 if [ ! -e /etc
/debian_version
]; then
46 if [ -x /usr
/bin
/realpath
]; then
47 FULLPATH
=`/usr/bin/realpath $0`
49 echo "ERROR: Need to do apt-get install realpath"
56 BASENAME
=`basename $0`
57 BASEDIR
=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
58 LOGFILE
=$BASEDIR/log
/_build.preparation.log
59 export BASEDIR LOGFILE
60 DIR_CHK
=$BASEDIR/cache
/check
61 mkdir
$BASEDIR/log
/ 2>/dev
/null
63 if [ 'x86_64' = $MACHINE -o 'i686' = $MACHINE -o 'i586' = $MACHINE -o 'i486' = $MACHINE -o 'i386' = $MACHINE ]; then
64 echo "`date -u '+%b %e %T'`: Machine is ix86 (or equivalent)" |
tee -a $LOGFILE
66 BUILDTARGET
=i386-pc-linux-gnu
67 CFLAGS
="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
68 CXXFLAGS
="-O2 -mcpu=i386 -march=i386 -pipe -fomit-frame-pointer"
69 elif [ 'alpha' = $MACHINE ]; then
70 echo "`date -u '+%b %e %T'`: Machine is Alpha AXP" |
tee -a $LOGFILE
71 BUILDTARGET
=alpha-unknown-linux-gnu
72 CFLAGS
="-O2 -mcpu=ev4 -mieee -pipe"
73 CXXFLAGS
="-O2 -mcpu=ev4 -mieee -pipe"
75 echo "`date -u '+%b %e %T'`: Can't determine your architecture - $MACHINE" |
tee -a $LOGFILE
81 umount
$BASEDIR/build
/dev
/pts
2>/dev
/null
;
82 umount
$BASEDIR/build
/proc
2>/dev
/null
;
83 umount
$BASEDIR/build
/install
/mnt
2>/dev
/null
;
84 umount
$BASEDIR/build
/usr
/src
/cache
2>/dev
/null
;
85 umount
$BASEDIR/build
/usr
/src
/ccache
2>/dev
/null
;
86 umount
$BASEDIR/build
/usr
/src
/config
2>/dev
/null
;
87 umount
$BASEDIR/build
/usr
/src
/doc
2>/dev
/null
;
88 umount
$BASEDIR/build
/usr
/src
/html
2>/dev
/null
;
89 umount
$BASEDIR/build
/usr
/src
/langs
2>/dev
/null
;
90 umount
$BASEDIR/build
/usr
/src
/lfs
2>/dev
/null
;
91 umount
$BASEDIR/build
/usr
/src
/log
2>/dev
/null
;
92 umount
$BASEDIR/build
/usr
/src
/src
2>/dev
/null
;
97 for i
in `seq 0 7`; do
98 if ( losetup
/dev
/loop
${i} 2>/dev
/null |
grep -q "/install/images" ); then
99 losetup
-d /dev
/loop
${i} 2>/dev
/null
103 echo " Check $LOGFILE for errors if applicable"
108 if [ ! -e $BASEDIR/build
/usr
/src
/lfs
/ ]; then
109 exiterror
"No such file or directory: $BASEDIR/build/usr/src/lfs/"
111 echo "Entering to a shell inside LFS chroot, go out with exit"
112 chroot
$LFS /tools
/bin
/env
-i HOME
=/root TERM
=$TERM PS1
='\u:\w\$ ' \
113 PATH
=/usr
/local
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/tools
/bin \
114 VERSION
=$VERSION CONFIG_ROOT
=$CONFIG_ROOT \
115 NAME
="$NAME" SNAME
="$SNAME" SLOGAN
="$SLOGAN" \
116 CFLAGS
="$CFLAGS" CXXFLAGS
="$CXXFLAGS" \
117 CCACHE_DIR
=/usr
/src
/ccache \
120 BUILDTARGET
="$BUILDTARGET" MACHINE
="$MACHINE" \
121 KGCC
="ccache /usr/bin/gcc" \
123 if [ $?
-ne 0 ]; then
124 exiterror
"chroot error"
131 ############################################################################
133 # Are we running the right shell? #
135 ############################################################################
136 if [ ! "$BASH" ]; then
137 exiterror
"BASH environment variable is not set. You're probably running the wrong shell."
140 if [ -z "${BASH_VERSION}" ]; then
141 exiterror
"Not running BASH shell."
145 ############################################################################
147 # Trap on emergency exit #
149 ############################################################################
150 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
153 ############################################################################
155 # Resetting our nice level #
157 ############################################################################
158 echo "`date -u '+%b %e %T'`: Resetting our nice level to $NICE" |
tee -a $LOGFILE
159 renice
$NICE $$
> /dev
/null
160 if [ `nice` != "$NICE" ]; then
161 exiterror
"Failed to set correct nice level"
164 ############################################################################
166 # Checking if running as root user #
168 ############################################################################
169 echo "`date -u '+%b %e %T'`: Checking if we're running as root user" |
tee -a $LOGFILE
170 if [ `id -u` != 0 ]; then
171 exiterror
"Not building as root"
175 ############################################################################
177 # Checking for necessary temporary space #
179 ############################################################################
180 echo "`date -u '+%b %e %T'`: Checking for necessary space on disk $BASE_DEV" |
tee -a $LOGFILE
181 BASE_DEV
=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
182 BASE_ASPACE
=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
183 if (( 2202000 > $BASE_ASPACE )); then
184 BASE_USPACE
=`du -skx $BASEDIR | awk '{print $1}'`
185 if (( 2202000 - $BASE_USPACE > $BASE_ASPACE )); then
186 exiterror
"Not enough temporary space available, need at least 2.1GB on $BASE_DEV"
190 ############################################################################
192 # Building Linux From Scratch system #
194 ############################################################################
195 echo "`date -u '+%b %e %T'`: Building Linux From Scratch system" |
tee -a $LOGFILE
203 # Check /tools symlink
204 if [ -h /tools
]; then
207 if [ ! -a /tools
]; then
208 ln -s $BASEDIR/build
/tools
/
210 if [ ! -h /tools
]; then
211 exiterror
"Could not create /tools symbolic link."
217 export LFS LC_ALL CFLAGS CXXFLAGS
218 unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
220 # Make some extra directories
221 mkdir
-p $BASEDIR/build
/{tools
,etc
,usr
/src
} 2>/dev
/null
222 mkdir
-p $BASEDIR/{cache
,ccache
} 2>/dev
/null
223 mkdir
-p $BASEDIR/build
/dev
/pts
$BASEDIR/build
/proc
$BASEDIR/build
/usr
/src
/{cache
,config
,doc
,html
,langs
,lfs
,log
,src
,ccache
}
225 # Make all sources and proc available under lfs build
226 mount
--bind /dev
/pts
$BASEDIR/build
/dev
/pts
227 mount
--bind /proc
$BASEDIR/build
/proc
228 mount
--bind $BASEDIR/cache
$BASEDIR/build
/usr
/src
/cache
229 mount
--bind $BASEDIR/ccache
$BASEDIR/build
/usr
/src
/ccache
230 mount
--bind $BASEDIR/config
$BASEDIR/build
/usr
/src
/config
231 mount
--bind $BASEDIR/doc
$BASEDIR/build
/usr
/src
/doc
232 mount
--bind $BASEDIR/html
$BASEDIR/build
/usr
/src
/html
233 mount
--bind $BASEDIR/langs
$BASEDIR/build
/usr
/src
/langs
234 mount
--bind $BASEDIR/lfs
$BASEDIR/build
/usr
/src
/lfs
235 mount
--bind $BASEDIR/log
$BASEDIR/build
/usr
/src
/log
236 mount
--bind $BASEDIR/src
$BASEDIR/build
/usr
/src
/src
238 # Run LFS static binary creation scripts one by one
239 export CCACHE_DIR
=$BASEDIR/ccache
240 export CCACHE_HASHDIR
=1
242 # Remove pre-install list of installed files in case user erase some files before rebuild
243 rm -f $BASEDIR/build
/usr
/src
/lsalr
2>/dev
/null
247 ############################################################################
249 # Necessary shell functions #
251 ############################################################################
253 if [ -f $BASEDIR/lfs
/$1 ]; then
254 echo "`date -u '+%b %e %T'`: Building $*" |
tee -a $LOGFILE
255 cd $BASEDIR/lfs
&& make -s -f $
* LFS_BASEDIR
=$BASEDIR MESSAGE
="$1\t " download
>> $LOGFILE 2>&1
256 if [ $?
-ne 0 ]; then
257 exiterror
"Download error in $1"
259 cd $BASEDIR/lfs
&& make -s -f $
* LFS_BASEDIR
=$BASEDIR MESSAGE
="$1\t md5sum" md5
>> $LOGFILE 2>&1
260 if [ $?
-ne 0 ]; then
261 exiterror
"md5sum error in $1, check file in cache or signature"
263 cd $BASEDIR/lfs
&& make -f $
* BUILDTARGET
=$BUILDTARGET \
265 LFS_BASEDIR
=$BASEDIR \
268 install >> $LOGFILE 2>&1
269 if [ $?
-ne 0 ]; then
270 exiterror
"Building $*";
273 exiterror
"No such file or directory: $BASEDIR/$1"
279 if [ -f $BASEDIR/build
/usr
/src
/lfs
/$1 ]; then
280 echo "`date -u '+%b %e %T'`: Building $*" |
tee -a $LOGFILE
281 cd $BASEDIR/lfs
&& make -s -f $
* LFS_BASEDIR
=$BASEDIR MESSAGE
="$1\t " download
>> $LOGFILE 2>&1
282 if [ $?
-ne 0 ]; then
283 exiterror
"Download error in $1"
285 cd $BASEDIR/lfs
&& make -s -f $
* LFS_BASEDIR
=$BASEDIR MESSAGE
="$1\t md5sum" md5
>> $LOGFILE 2>&1
286 if [ $?
-ne 0 ]; then
287 exiterror
"md5sum error in $1, check file in cache or signature"
289 chroot
$LFS /tools
/bin
/env
-i HOME
=/root \
290 TERM
=$TERM PS1
='\u:\w\$ ' \
291 PATH
=/usr
/local
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin
:/tools
/bin \
293 CONFIG_ROOT
=$CONFIG_ROOT \
294 NAME
="$NAME" SNAME
="$SNAME" SLOGAN
="$SLOGAN" \
295 CFLAGS
="$CFLAGS" CXXFLAGS
="$CXXFLAGS" \
296 CCACHE_DIR
=/usr
/src
/ccache CCACHE_HASHDIR
=1 \
298 BUILDTARGET
="$BUILDTARGET" MACHINE
="$MACHINE" \
299 /tools
/bin
/bash
-x -c "cd /usr/src/lfs && \
300 make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
301 if [ $?
-ne 0 ]; then
302 exiterror
"Building $*"
305 exiterror
"No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
311 if [ -f $BASEDIR/build
/usr
/src
/lfs
/$1 ]; then
312 echo "`date -u '+%b %e %T'`: Building $*" |
tee -a $LOGFILE
313 cd $BASEDIR/lfs
&& make -s -f $
* LFS_BASEDIR
=$BASEDIR MESSAGE
="$1\t " download
>> $LOGFILE 2>&1
314 if [ $?
-ne 0 ]; then
315 exiterror
"Download error in $1"
317 cd $BASEDIR/lfs
&& make -s -f $
* LFS_BASEDIR
=$BASEDIR MESSAGE
="$1\t md5sum" md5
>> $LOGFILE 2>&1
318 if [ $?
-ne 0 ]; then
319 exiterror
"md5sum error in $1, check file in cache or signature"
321 chroot
$LFS /tools
/bin
/env
-i HOME
=/root \
322 TERM
=$TERM PS1
='\u:\w\$ ' \
323 PATH
=/usr
/local
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin \
325 CONFIG_ROOT
=$CONFIG_ROOT \
326 NAME
="$NAME" SNAME
="$SNAME" SLOGAN
="$SLOGAN" \
327 CFLAGS
="$CFLAGS" CXXFLAGS
="$CXXFLAGS" \
328 CCACHE_DIR
=/usr
/src
/ccache CCACHE_HASHDIR
=1 \
330 BUILDTARGET
="$BUILDTARGET" MACHINE
="$MACHINE" \
331 /bin
/bash
-x -c "cd /usr/src/lfs && \
332 make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
333 if [ $?
-ne 0 ]; then
334 exiterror
"Building $*"
337 exiterror
"No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
344 if [ -f $BASEDIR/build
/usr
/src
/lfs
/$1 ]; then
345 echo "`date -u '+%b %e %T'`: Building $*" |
tee -a $LOGFILE
346 cd $BASEDIR/lfs
&& make -s -f $
* LFS_BASEDIR
=$BASEDIR MESSAGE
="$1\t " download
>> $LOGFILE 2>&1
347 if [ $?
-ne 0 ]; then
348 exiterror
"Download error in $1"
350 cd $BASEDIR/lfs
&& make -s -f $
* LFS_BASEDIR
=$BASEDIR MESSAGE
="$1\t md5sum" md5
>> $LOGFILE 2>&1
351 if [ $?
-ne 0 ]; then
352 exiterror
"md5sum error in $1, check file in cache or signature"
354 chroot
$LFS /tools
/bin
/env
-i HOME
=/root \
355 TERM
=$TERM PS1
='\u:\w\$ ' \
356 PATH
=/usr
/local
/bin
:/opt
/$MACHINE-uClibc/usr
/bin
:/bin
:/usr
/bin
:/sbin
:/usr
/sbin \
358 CONFIG_ROOT
=$CONFIG_ROOT \
360 NAME
="$NAME" SNAME
="$SNAME" SLOGAN
="$SLOGAN" \
361 CFLAGS
="-Os" CXXFLAGS
="-Os" \
362 CCACHE_DIR
=/usr
/src
/ccache CCACHE_HASHDIR
=1 \
364 BUILDTARGET
="$BUILDTARGET" MACHINE
="$MACHINE" \
365 /bin
/bash
-x -c "cd /usr/src/lfs && \
366 make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
367 if [ $?
-ne 0 ]; then
368 exiterror
"Building $*"
371 exiterror
"No such file or directory: $BASEDIR/build/usr/src/lfs/$1"
377 LOGFILE
="$BASEDIR/log/_build.toolchain.log"
379 echo -ne "`date -u '+%b %e %T'`: Stage1 toolchain build \n" |
tee -a $LOGFILE
380 # Build sed now, as we use some extensions
382 NATIVEGCC
=`gcc --version | grep GCC | awk {'print $3'}`
383 export NATIVEGCC GCCmajor
=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
385 lfsmake1
sed LFS_PASS
=1
386 lfsmake1
m4 LFS_PASS
=1
387 lfsmake1 bison LFS_PASS
=1
388 lfsmake1 flex LFS_PASS
=1
389 lfsmake1 binutils LFS_PASS
=1
390 lfsmake1 gcc LFS_PASS
=1
391 export PATH
=$BASEDIR/build
/usr
/local
/bin
:$BASEDIR/build
/tools
/bin
:$PATH
398 lfsmake1 gcc LFS_PASS
=2
399 lfsmake1 binutils LFS_PASS
=2
408 lfsmake1
sed LFS_PASS
=2
409 lfsmake1
m4 LFS_PASS
=2
410 lfsmake1 bison LFS_PASS
=2
411 lfsmake1 flex LFS_PASS
=2
420 export PATH
=$ORG_PATH
424 LOGFILE
="$BASEDIR/log/_build.base.log"
426 echo -ne "`date -u '+%b %e %T'`: Stage2 linux base build \n" |
tee -a $LOGFILE
427 # Run LFS dynamic binary creation scripts one by one
465 if [ 'i386' = $MACHINE ]; then
467 elif [ 'alpha' = $MACHINE ]; then
486 # Run IPCop make scripts one by one
487 LOGFILE
="$BASEDIR/log/_build.ipcop.log"
489 echo -ne "`date -u '+%b %e %T'`: Stage3 $NAME build \n" |
tee -a $LOGFILE
491 # Build these first as some of the kernel packages below rely on
492 # these for some of their client program functionality
503 if [ 'i386' = $MACHINE ]; then
504 # abuse the SMP flag, and make an minimal installer kernel first
505 # so that the boot floppy always works.....
506 ipcopmake linux LFS_PASS
=ipcop SMP
=installer
507 ipcopmake linux LFS_PASS
=ipcop SMP
=1
508 ipcopmake
3cp4218 SMP
=1
509 ipcopmake amedyn SMP
=1
510 ipcopmake cxacru SMP
=1
511 ipcopmake eagle SMP
=1
513 # These are here because they have i386 only binary libraries
514 # included in the package.
515 ipcopmake cnx_pci SMP
=1
516 ipcopmake fcdsl SMP
=1
517 ipcopmake fcdsl2 SMP
=1
518 ipcopmake fcdslsl SMP
=1
519 ipcopmake fcdslusb SMP
=1
520 ipcopmake fcdslslusb SMP
=1
521 ipcopmake pulsar SMP
=1
522 ipcopmake unicorn SMP
=1
525 ipcopmake linux LFS_PASS
=ipcop
532 if [ 'i386' = $MACHINE ]; then
533 # These are here because they have i386 only binary libraries
534 # included in the package.
564 ipcopmake capi4k-utils
569 ipcopmake ez-ipupdate
575 ipcopmake initscripts
582 ipcopmake isapnptools
583 ipcopmake isdn4k-utils
594 ipcopmake HTML-Tagset
595 ipcopmake HTML-Parser
596 ipcopmake Compress-Zlib
598 ipcopmake Digest-SHA1
599 ipcopmake Digest-HMAC
600 ipcopmake libwww-perl
602 ipcopmake Net-IPv4Addr
604 ipcopmake noip_updater
616 ipcopmake squid-graph
630 # Run installer scripts one by one
631 LOGFILE
="$BASEDIR/log/_build.installer.log"
633 echo -ne "`date -u '+%b %e %T'`: Stage4 installer build \n" |
tee -a $LOGFILE
634 if [ 'i386' = $MACHINE ]; then
642 installmake e2fsprogs
643 installmake misc-progs
645 installmake util-linux
648 installmake pcmcia-cs
650 installmake installer
652 installmake driver.img
658 LOGFILE
="$BASEDIR/log/_build.packages.log"
660 echo "... see detailed log in _build.*.log files" >> $LOGFILE
661 echo -ne "`date -u '+%b %e %T'`: Stage5 packages build \n" |
tee -a $LOGFILE
663 echo "`date -u '+%b %e %T'`: Stripping files" |
tee -a $LOGFILE
664 find $LFS/lib
$LFS/usr
/lib
$LFS/usr
/share
/rrdtool-
* $LFS/install ! -type l \
( -name '*.so' -o -name '*.so[\.0-9]*' \
) \
665 ! -name 'libc.so' ! -name 'libpthread.so' ! -name 'libcrypto.so.0.9.7.sha1' \
666 -exec $LFS/tools
/bin
/strip
--strip-all {} \
; >> $LOGFILE 2>&1
667 # add -ls before -exec if you want to verify what files are stripped
669 find $LFS/{,s
}bin
$LFS/usr
/{,s
}bin
$LFS/usr
/local
/{,s
}bin
! -type l \
670 -exec file {} \
; |
grep " ELF " | cut
-f1 -d ':' |
xargs $LFS/tools
/bin
/strip
--strip-all >> $LOGFILE 2>&1
671 # there add -v to strip to verify
673 if [ 'i386' = $MACHINE ]; then
674 # Create fcdsl packages
675 echo "`date -u '+%b %e %T'`: Building fcdsl tgz" |
tee -a $LOGFILE
676 cp $LFS/install
/images
/fcdsl
/license.txt
$LFS >> $LOGFILE 2>&1
677 touch $LFS/var
/run
/{need-depmod-
$KVER,need-depmod-
$KVER-smp}
678 cd $LFS && tar cvfz
$LFS/install
/images
/$SNAME-fcdsl-$VERSION.
$MACHINE.tgz \
679 lib
/modules
/$KVER/misc
/fcdsl
*.o.gz \
680 lib
/modules
/$KVER-smp/misc
/fcdsl
*.o.gz \
681 usr
/lib
/isdn
/{fds?base.bin
,fd?ubase.frm
} \
682 etc
/fcdsl
/fcdsl
*.conf \
683 etc
/drdsl
/{drdsl
,drdsl.ini
} \
685 var
/run
/{need-depmod-
$KVER,need-depmod-
$KVER-smp} >> $LOGFILE 2>&1
686 rm -f $LFS/license.txt
>> $LOGFILE 2>&1
690 # Create update for this version
691 echo "`date -u '+%b %e %T'`: Building update $VERSION tgz" |
tee -a $LOGFILE
692 tar -cz -C $BASEDIR/build
--files-from=$BASEDIR/updates
/$VERSION/ROOTFILES.
$MACHINE-$VERSION -f $BASEDIR/updates
/$VERSION/patch.
tar.gz
--exclude='#*';
693 chmod 755 $BASEDIR/updates
/$VERSION/setup
694 tar -cz -C $BASEDIR/updates
/$VERSION -f $LFS/install
/images
/$SNAME-update-$VERSION.
$MACHINE.tgz
patch.
tar.gz setup information
695 rm -f $LFS/var
/run
/{need-depmod-
$KVER,need-depmod-
$KVER-smp}
697 # Generating list of packages used
698 echo "`date -u '+%b %e %T'`: Generating packages list from logs" |
tee -a $LOGFILE
699 rm -f $BASEDIR/doc
/packages-list
700 for i
in `ls -1tr $BASEDIR/log/[^_]*`; do
701 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
702 echo "* `basename $i`" >>$BASEDIR/doc
/packages-list
705 echo "!!! List of softwares used to build $NAME Version:$VERSION" > $BASEDIR/doc
/packages-list.txt
706 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
707 $BASEDIR/doc
/packages-list |
sort >> $BASEDIR/doc
/packages-list.txt
708 rm -f $BASEDIR/doc
/packages-list
709 # packages-list.txt is ready to be displayed for wiki page IPCopSoftwares
711 # Create ISO for CDRom and USB-superfloppy
713 cp $LFS/install
/images
/{*.iso
,*.tgz
} $BASEDIR >> $LOGFILE 2>&1
717 rm -rf $BASEDIR/build
/tmp
/*
719 # Generating total list of files
720 echo "`date -u '+%b %e %T'`: Generating files list from logs" |
tee -a $LOGFILE
721 rm -f $BASEDIR/log
/FILES
722 for i
in `ls -1tr $BASEDIR/log/[^_]*`; do
723 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
724 echo "##" >>$BASEDIR/log
/FILES
725 echo "## `basename $i`" >>$BASEDIR/log
/FILES
726 echo "##" >>$BASEDIR/log
/FILES
727 cat $i |
sed "s%^\./%#%" |
sort >> $BASEDIR/log
/FILES
735 # See what we're supposed to do
738 BUILDMACHINE
=`uname -m`
739 PACKAGE
=`ls -v -r $BASEDIR/cache/$SNAME-1.4.*-toolchain-$BUILDMACHINE.tar.gz 2> /dev/null | head -n 1`
740 #only restore on a clean disk
741 if [ ! -f log
/perl-
*-tools ]; then
742 if [ ! -n "$PACKAGE" ]; then
743 echo "`date -u '+%b %e %T'`: Full toolchain compilation" |
tee -a $LOGFILE
747 PACKAGENAME
=${PACKAGE%.tar.gz}
748 echo "`date -u '+%b %e %T'`: Restore from $PACKAGE" |
tee -a $LOGFILE
749 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
753 exiterror
"$PACKAGENAME md5 did not match, check downloaded package"
757 echo "`date -u '+%b %e %T'`: Using installed toolchain" |
tee -a $LOGFILE
766 # enter a shell inside LFS chroot
767 # may be used to changed kernel settings
772 echo "Building doc/Changelog from CVS"
773 # cv2cl script come from http://www.red-bean.com/cvs2cl/
774 if [ ! -s $BASEDIR/doc
/CVS
/Tag
]; then
777 BRANCH
=`cat $BASEDIR/doc/CVS/Tag`
779 BRANCHOPTS
="--follow-only $BRANCH"
782 $BASEDIR/tools
/cvs2cl.pl
--gmt --show-dead $BRANCHOPTS -f $BASEDIR/doc
/ChangeLog
783 rm -f $BASEDIR/doc
/ChangeLog.bak
785 echo "Commit the change now to update CVS"
788 echo "Checking sources files availability on the web"
789 if [ ! -d $DIR_CHK ]; then
794 for c
in `seq $MAX_RETRIES`; do
795 if (( FINISHED
==1 )); then
801 if [ -f "$i" -a "$i" != "Config" ]; then
802 make -s -f $i MACHINE
=$MACHINE LFS_BASEDIR
=$BASEDIR ROOT
=$BASEDIR/build \
803 MESSAGE
="$i\t ($c/$MAX_RETRIES)" check
804 if [ $?
-ne 0 ]; then
805 echo "Check : wget error in lfs/$i"
814 echo "Erasing sources files availability tags"
818 for i
in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
819 $LOSETUP -d $i 2>/dev
/null
821 for i
in `mount | grep $BASEDIR | cut -d " " -f 1`; do
825 for i
in `seq 0 7`; do
826 if ( losetup
/dev
/loop
${i} 2>/dev
/null |
grep -q "/install/images" ); then
827 umount
/dev
/loop
${i} 2>/dev
/null
;
828 losetup
-d /dev
/loop
${i} 2>/dev
/null
;
831 rm -rf $BASEDIR/build
832 rm -rf $BASEDIR/cdrom
834 rm -f $BASEDIR/updates
/$VERSION/patch.
tar.gz
;
835 if [ -h /tools
]; then
840 echo "Building source package from CVS, list of changed files, MD5 of release files"
841 if [ ! -s $BASEDIR/doc
/CVS
/Tag
]; then
843 BRANCHOPTS
="-D `date +'%Y-%m-%d'`"
845 BRANCH
=`cat $BASEDIR/doc/CVS/Tag`
847 BRANCHOPTS
="-r $BRANCH"
850 rm -rf $BASEDIR/build
/tmp
/$SNAME-$VERSION $BASEDIR/doc
/release.txt
851 cd $BASEDIR/build
/tmp
853 echo "Export tree $BRANCH $SNAME-$VERSION"
854 cvs
-z3 -d `cat $BASEDIR/CVS/Root` export $BRANCHOPTS ipcop
855 if [ $?
-eq 0 ]; then
856 mv ipcop
$SNAME-$VERSION
857 tar cfz
$BASEDIR/$SNAME-sources-$VERSION.tgz
$SNAME-$VERSION
860 if [ ! -d $BASEDIR/build
/tmp
/$PREVIOUSTAG ]; then
861 # export previous version to be compared with actual, this help to check wich files need to go in update
862 cd $BASEDIR/build
/tmp
863 echo "Export tree $PREVIOUSTAG"
864 cvs
-z3 -d `cat $BASEDIR/CVS/Root` export -r $PREVIOUSTAG ipcop
865 mv ipcop
$PREVIOUSTAG
867 if [ -d $BASEDIR/build
/tmp
/$PREVIOUSTAG -o -d $BASEDIR/build
/tmp
/$SNAME-$VERSION ]; then
868 cd $BASEDIR/build
/tmp
869 echo "diff $PREVIOUSTAG <> $BRANCH $SNAME-$VERSION >doc/updated-sources.txt"
870 diff -rq $PREVIOUSTAG $SNAME-$VERSION > $BASEDIR/doc
/updated-sources.txt
871 mv $BASEDIR/doc
/updated-sources.txt
$BASEDIR/doc
/updated-sources.bak
872 sed -e "s+Files $PREVIOUSTAG\/++" \
874 -e "s+src/rc.d+etc/rc.d+" \
875 -e "s+^langs/+var/ipcop/langs/+" \
876 -e "s+html/cgi-bin+home/httpd/cgi-bin+" $BASEDIR/doc
/updated-sources.bak \
877 > $BASEDIR/doc
/updated-sources.txt
878 rm -f $BASEDIR/doc
/updated-sources.bak
883 # create structure for $VERSION update
884 if [ ! -f "updates/$VERSION" ]; then
885 mkdir
-p updates
/$VERSION
888 echo 'etc/issue' > ROOTFILES.alpha-
$VERSION
889 echo 'etc/issue' > ROOTFILES.i386-
$VERSION
890 echo 'patch.tar.gz' > .cvsignore
891 sed -e "s+^UPGRADEVERSION.*$+UPGRADEVERSION=$VERSION+" $BASEDIR/src
/scripts
/updatesetup
> setup
894 echo "Adding directory $VERSION to cvs"
896 echo "Adding files to cvs"
897 cvs add
$VERSION/ROOTFILES.alpha-
$VERSION \
898 $VERSION/ROOTFILES.i386-
$VERSION \
899 $VERSION/information \
903 echo "update/$VERSION already exist"
909 if [ ! -d $BASEDIR/cache
]; then
912 mkdir
-p $BASEDIR/log
913 echo "`date -u '+%b %e %T'`:Preload all source files" |
tee -a $LOGFILE
916 for c
in `seq $MAX_RETRIES`; do
917 if (( FINISHED
==1 )); then
923 if [ -f "$i" -a "$i" != "Config" ]; then
924 make -s -f $i LFS_BASEDIR
=$BASEDIR MESSAGE
="$i\t ($c/$MAX_RETRIES)" download
>> $LOGFILE 2>&1
925 if [ $?
-ne 0 ]; then
926 echo "Prefetch : wget error in lfs/$i"
929 if [ $c -eq 1 ]; then
930 echo "Prefetch : lfs/$i files loaded"
936 echo "Prefetch : verifying md5sum"
939 if [ -f "$i" -a "$i" != "Config" ]; then
940 make -s -f $i LFS_BASEDIR
=$BASEDIR MESSAGE
="$i\t " md5
>> $LOGFILE 2>&1
941 if [ $?
-ne 0 ]; then
942 echo "md5 difference in lfs/$i"
947 if [ $ERROR -eq 0 ]; then
948 echo "Prefetch : all files md5sum match"
953 PREVIOUSVERSION
=`echo $PREVIOUSTAG | sed -e 's/IPCOP_v//' -e 's/_FINAL//' -e 's/_/\./g'`
954 # make md5 list of actual build
955 # some packages include a timestamp (kernel/perl/python/vim and more), so md5 vary at each build
956 # anyway, it is sometime usable after a patch or a minor upgrade to know wich files include in update
957 if [ ! -f "$BASEDIR/build/install/cdrom/$SNAME-$VERSION.tgz" ]; then
958 echo "need cdrom be build to read include files list, use ./make.sh build before."
960 tar tzf
$BASEDIR/build
/install
/cdrom
/$SNAME-$VERSION.tgz
> $BASEDIR/updates
/$VERSION/FILES.tmp
962 rm -f $BASEDIR/updates
/$VERSION/FILES-
$MACHINE-$VERSION.md5
963 for line
in `cat $BASEDIR/updates/$VERSION/FILES.tmp`; do
964 if [ -f "$line" -a ! -L "$line" ]; then
965 md5sum "$line" >> $BASEDIR/updates
/$VERSION/FILES-
$MACHINE-$VERSION.md5
968 diff $BASEDIR/updates
/$PREVIOUSVERSION/FILES-
$MACHINE-$PREVIOUSVERSION.md5 \
969 $BASEDIR/updates
/$VERSION/FILES-
$MACHINE-$VERSION.md5 \
970 > $BASEDIR/updates
/$VERSION/FILES-
$MACHINE.
diff
971 awk '$1==">" {print $3}' $BASEDIR/updates
/$VERSION/FILES-
$MACHINE.
diff \
972 > $BASEDIR/updates
/$VERSION/ROOTFILES.add.
$MACHINE
973 awk '$1=="<" {print $3}' $BASEDIR/updates
/$VERSION/FILES-
$MACHINE.
diff \
974 > $BASEDIR/updates
/$VERSION/ROOTFILES.remove.
$MACHINE.tmp
975 rm -f $BASEDIR/updates
/$VERSION/ROOTFILES.remove.
$MACHINE
976 for line
in `cat $BASEDIR/updates/$VERSION/ROOTFILES.remove.$MACHINE.tmp`; do
977 # a file is only removed when not in add file
978 if ( ! grep -q "^$line$" $BASEDIR/updates
/$VERSION/ROOTFILES.add.
$MACHINE ); then
979 echo $line >> $BASEDIR/updates
/$VERSION/ROOTFILES.remove.
$MACHINE
982 rm -f $BASEDIR/updates
/$VERSION/{FILES.tmp
,FILES-
*.
diff,ROOTFILES.remove.
*.tmp
}
989 BUILDMACHINE
=`uname -m`
990 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $BUILDMACHINE" |
tee -a $LOGFILE
991 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache
/$SNAME-$VERSION-toolchain-$BUILDMACHINE.
tar.gz \
992 build
/{bin
,etc
,usr
/bin
,usr
/local} \
993 build
/tools
/{bin
,etc
,*-linux-gnu,include
,lib
,libexec
,sbin
,share
,var
} \
995 md5sum cache
/$SNAME-$VERSION-toolchain-$BUILDMACHINE.
tar.gz \
996 > cache
/$SNAME-$VERSION-toolchain-$BUILDMACHINE.md5
1000 BUILDMACHINE
=`uname -m`
1001 # arbitrary name to be updated in case of new toolchain package upload
1002 PACKAGE
=$SNAME-1.4
.11-toolchain-$BUILDMACHINE
1003 URL_SFNET
=`grep URL_SFNET lfs/Config | awk '{ print $3 }'`
1004 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $BUILDMACHINE" |
tee -a $LOGFILE
1006 wget
-c $URL_SFNET/ipcop
/$PACKAGE.
tar.gz
$URL_SFNET/ipcop
/$PACKAGE.md5
1007 if [ $?
-ne 0 ]; then
1008 echo "`date -u '+%b %e %T'`: error downloading toolchain for $BUILDMACHINE machine" |
tee -a $LOGFILE
1010 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1011 echo "`date -u '+%b %e %T'`: toolchain md5 ok" |
tee -a $LOGFILE
1013 exiterror
"$PACKAGE.md5 did not match, check downloaded package"
1018 echo "Usage: $0 {build|changelog|check|checkclean|clean|dist|gettoolchain|newupdate|prefetch|rootfiles|shell|toolchain}"
1019 cat doc
/make.sh-usage