]> git.ipfire.org Git - ipfire-2.x.git/blob - make.sh
make.sh: fix changelog generation.
[ipfire-2.x.git] / make.sh
1 #!/bin/bash
2 ############################################################################
3 # #
4 # This file is part of the IPFire Firewall. #
5 # #
6 # IPFire is free software; you can redistribute it and/or modify #
7 # it under the terms of the GNU General Public License as published by #
8 # the Free Software Foundation; either version 2 of the License, or #
9 # (at your option) any later version. #
10 # #
11 # IPFire is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
15 # #
16 # You should have received a copy of the GNU General Public License #
17 # along with IPFire; if not, write to the Free Software #
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
19 # #
20 # Copyright (C) 2007-2011 IPFire-Team <info@ipfire.org>. #
21 # #
22 ############################################################################
23 #
24
25 NAME="IPFire" # Software name
26 SNAME="ipfire" # Short name
27 VERSION="2.11" # Version number
28 CORE="53" # Core Level (Filename)
29 PAKFIRE_CORE="52" # Core Level (PAKFIRE)
30 GIT_BRANCH=`git status | head -n1 | cut -d" " -f4` # Git Branch
31 SLOGAN="www.ipfire.org" # Software slogan
32 CONFIG_ROOT=/var/ipfire # Configuration rootdir
33 NICE=10 # Nice level
34 MAX_RETRIES=1 # prefetch/check loop
35 BUILD_IMAGES=1 # Build USB, Flash and Xen Images
36 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
37 MACHINE=`uname -m`
38 GIT_TAG=$(git tag | tail -1) # Git Tag
39 GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit
40 TOOLCHAINVER=1
41
42 BUILDMACHINE=$MACHINE
43 if [ "$MACHINE" = "x86_64" ]; then
44 BUILDMACHINE="i686";
45 linux32="linux32";
46 fi
47
48
49 # Debian specific settings
50 if [ ! -e /etc/debian_version ]; then
51 FULLPATH=`which $0`
52 else
53 if [ -x /usr/bin/realpath ]; then
54 FULLPATH=`/usr/bin/realpath $0`
55 else
56 echo "ERROR: Need to do apt-get install realpath"
57 exit 1
58 fi
59 fi
60
61 PWD=`pwd`
62 BASENAME=`basename $0`
63 BASEDIR=`echo $FULLPATH | sed "s/\/$BASENAME//g"`
64 LOGFILE=$BASEDIR/log/_build.preparation.log
65 export BASEDIR LOGFILE
66 DIR_CHK=$BASEDIR/cache/check
67 mkdir $BASEDIR/log/ 2>/dev/null
68
69 # Include funtions
70 . tools/make-functions
71
72 if [ -f .config ]; then
73 . .config
74 else
75 echo -e "${BOLD}No configuration found!${NORMAL}"
76 echo -ne "Do you want to create one (y/N)?"
77 read CREATE_CONFIG
78 echo ""
79 if [ "$CREATE_CONFIG" == "y" ]; then
80 make_config
81 fi
82 fi
83
84 if [ -z $EDITOR ]; then
85 for i in nano emacs vi; do
86 EDITOR=$(which $i 2>/dev/null)
87 if ! [ -z $EDITOR ]; then
88 export EDITOR=$EDITOR
89 break
90 fi
91 done
92 [ -z $EDITOR ] && exiterror "You should have installed an editor."
93 fi
94
95 prepareenv() {
96 ############################################################################
97 # #
98 # Are we running the right shell? #
99 # #
100 ############################################################################
101 if [ ! "$BASH" ]; then
102 exiterror "BASH environment variable is not set. You're probably running the wrong shell."
103 fi
104
105 if [ -z "${BASH_VERSION}" ]; then
106 exiterror "Not running BASH shell."
107 fi
108
109
110 ############################################################################
111 # #
112 # Trap on emergency exit #
113 # #
114 ############################################################################
115 trap "exiterror 'Build process interrupted'" SIGINT SIGTERM SIGKILL SIGSTOP SIGQUIT
116
117
118 ############################################################################
119 # #
120 # Resetting our nice level #
121 # #
122 ############################################################################
123 echo -ne "Resetting our nice level to $NICE" | tee -a $LOGFILE
124 renice $NICE $$ > /dev/null
125 if [ `nice` != "$NICE" ]; then
126 beautify message FAIL
127 exiterror "Failed to set correct nice level"
128 else
129 beautify message DONE
130 fi
131
132
133 ############################################################################
134 # #
135 # Checking if running as root user #
136 # #
137 ############################################################################
138 echo -ne "Checking if we're running as root user" | tee -a $LOGFILE
139 if [ `id -u` != 0 ]; then
140 beautify message FAIL
141 exiterror "Not building as root"
142 else
143 beautify message DONE
144 fi
145
146
147 ############################################################################
148 # #
149 # Checking for necessary temporary space #
150 # #
151 ############################################################################
152 echo -ne "Checking for necessary space on disk $BASE_DEV" | tee -a $LOGFILE
153 BASE_DEV=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $1 }'`
154 BASE_ASPACE=`df -P -k $BASEDIR | tail -n 1 | awk '{ print $4 }'`
155 if (( 2048000 > $BASE_ASPACE )); then
156 BASE_USPACE=`du -skx $BASEDIR | awk '{print $1}'`
157 if (( 2048000 - $BASE_USPACE > $BASE_ASPACE )); then
158 beautify message FAIL
159 exiterror "Not enough temporary space available, need at least 2GB on $BASE_DEV"
160 fi
161 else
162 beautify message DONE
163 fi
164
165 ############################################################################
166 # #
167 # Building Linux From Scratch system #
168 # #
169 ############################################################################
170 # Set umask
171 umask 022
172
173 # Set LFS Directory
174 LFS=$BASEDIR/build
175
176 # Check /tools symlink
177 if [ -h /tools ]; then
178 rm -f /tools
179 fi
180 if [ ! -a /tools ]; then
181 ln -s $BASEDIR/build/tools /
182 fi
183 if [ ! -h /tools ]; then
184 exiterror "Could not create /tools symbolic link."
185 fi
186
187 # Setup environment
188 set +h
189 LC_ALL=POSIX
190 if [ -z $MAKETUNING ]; then
191 if [ "${MACHINE:0:3}" = "arm" ]; then
192 MAKETUNING="-j2"
193 else
194 MAKETUNING="-j6"
195 fi
196 fi
197 export LFS LC_ALL CFLAGS CXXFLAGS MAKETUNING
198 unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
199
200 # Make some extra directories
201 mkdir -p $BASEDIR/build/{tools,etc,usr/src} 2>/dev/null
202 mkdir -p $BASEDIR/build/{dev/{shm,pts},proc,sys}
203 mkdir -p $BASEDIR/{cache,ccache} 2>/dev/null
204 mkdir -p $BASEDIR/build/usr/src/{cache,config,doc,html,langs,lfs,log,src,ccache}
205
206 mknod -m 600 $BASEDIR/build/dev/console c 5 1 2>/dev/null
207 mknod -m 666 $BASEDIR/build/dev/null c 1 3 2>/dev/null
208
209 # Make all sources and proc available under lfs build
210 mount --bind /dev $BASEDIR/build/dev
211 mount --bind /dev/pts $BASEDIR/build/dev/pts
212 mount --bind /dev/shm $BASEDIR/build/dev/shm
213 mount --bind /proc $BASEDIR/build/proc
214 mount --bind /sys $BASEDIR/build/sys
215 mount --bind $BASEDIR/cache $BASEDIR/build/usr/src/cache
216 mount --bind $BASEDIR/ccache $BASEDIR/build/usr/src/ccache
217 mount --bind $BASEDIR/config $BASEDIR/build/usr/src/config
218 mount --bind $BASEDIR/doc $BASEDIR/build/usr/src/doc
219 mount --bind $BASEDIR/html $BASEDIR/build/usr/src/html
220 mount --bind $BASEDIR/langs $BASEDIR/build/usr/src/langs
221 mount --bind $BASEDIR/lfs $BASEDIR/build/usr/src/lfs
222 mount --bind $BASEDIR/log $BASEDIR/build/usr/src/log
223 mount --bind $BASEDIR/src $BASEDIR/build/usr/src/src
224
225 # This is a temporary hack!!!
226 if [ ! -f /tools/bin/hostname ]; then
227 cp -f /bin/hostname /tools/bin/hostname 2>/dev/null
228 fi
229
230 # Run LFS static binary creation scripts one by one
231 export CCACHE_DIR=$BASEDIR/ccache
232 export CCACHE_COMPRESS=1
233 export CCACHE_HASHDIR=1
234
235 # Remove pre-install list of installed files in case user erase some files before rebuild
236 rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
237 }
238
239 buildtoolchain() {
240 if [ "$(uname -m)" = "x86_64" ]; then
241 exiterror "Cannot build toolchain on x86_64. Please use the download."
242 fi
243 if [ "$(uname -r | grep ipfire)" ]; then
244 exiterror "Cannot build toolchain on ipfire. Please use the download."
245 fi
246
247 LOGFILE="$BASEDIR/log/_build.toolchain.log"
248 export LOGFILE
249 NATIVEGCC=`gcc --version | grep GCC | awk {'print $3'}`
250 export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1}
251 ORG_PATH=$PATH
252 export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH
253 lfsmake1 ccache PASS=1
254 lfsmake1 make PASS=1
255 lfsmake1 binutils PASS=1
256 lfsmake1 gcc PASS=1
257 if [ "${MACHINE_TYPE}" = "arm" ]; then
258 lfsmake1 linux TOOLS=1 HEADERS=1
259 else
260 lfsmake1 linux-libc-header
261 fi
262 lfsmake1 glibc
263 lfsmake1 cleanup-toolchain PASS=1
264 lfsmake1 tcl
265 lfsmake1 expect
266 lfsmake1 dejagnu
267 lfsmake1 gcc PASS=2
268 lfsmake1 binutils PASS=2
269 lfsmake1 ccache PASS=2
270 lfsmake1 ncurses
271 lfsmake1 bash
272 lfsmake1 bzip2
273 lfsmake1 coreutils
274 lfsmake1 diffutils
275 lfsmake1 findutils
276 lfsmake1 gawk
277 lfsmake1 gettext
278 lfsmake1 grep
279 lfsmake1 gzip
280 lfsmake1 m4
281 lfsmake1 make PASS=2
282 lfsmake1 patch
283 lfsmake1 perl
284 lfsmake1 sed
285 lfsmake1 tar
286 lfsmake1 texinfo
287 lfsmake1 util-linux
288 lfsmake1 strip
289 lfsmake1 cleanup-toolchain PASS=2
290 export PATH=$ORG_PATH
291 }
292
293 buildbase() {
294 LOGFILE="$BASEDIR/log/_build.base.log"
295 export LOGFILE
296 lfsmake2 stage2
297 if [ "${MACHINE_TYPE}" = "arm" ]; then
298 lfsmake2 linux HEADERS=1
299 else
300 lfsmake2 linux-libc-header
301 fi
302 lfsmake2 man-pages
303 lfsmake2 glibc
304 lfsmake2 tzdata
305 lfsmake2 cleanup-toolchain PASS=3
306 lfsmake2 binutils
307 lfsmake2 gcc
308 lfsmake2 berkeley
309 lfsmake2 coreutils
310 lfsmake2 iana-etc
311 lfsmake2 m4
312 lfsmake2 bison
313 lfsmake2 ncurses
314 lfsmake2 procps
315 lfsmake2 sed
316 lfsmake2 libtool
317 lfsmake2 perl
318 lfsmake2 readline
319 lfsmake2 zlib
320 lfsmake2 autoconf
321 lfsmake2 automake
322 lfsmake2 bash
323 lfsmake2 bzip2
324 lfsmake2 diffutils
325 lfsmake2 e2fsprogs
326 lfsmake2 ed
327 lfsmake2 file
328 lfsmake2 findutils
329 lfsmake2 flex
330 lfsmake2 gawk
331 lfsmake2 gettext
332 lfsmake2 grep
333 lfsmake2 groff
334 lfsmake2 gzip
335 lfsmake2 inetutils
336 lfsmake2 iproute2
337 lfsmake2 kbd
338 lfsmake2 less
339 lfsmake2 libaal
340 lfsmake2 make
341 lfsmake2 man
342 lfsmake2 mktemp
343 lfsmake2 module-init-tools
344 lfsmake2 net-tools
345 lfsmake2 patch
346 lfsmake2 psmisc
347 lfsmake2 reiser4progs
348 lfsmake2 shadow
349 lfsmake2 sysklogd
350 lfsmake2 sysvinit
351 lfsmake2 tar
352 lfsmake2 texinfo
353 lfsmake2 udev
354 lfsmake2 util-linux
355 lfsmake2 vim
356 lfsmake2 grub
357 }
358
359 buildipfire() {
360 LOGFILE="$BASEDIR/log/_build.ipfire.log"
361 export LOGFILE
362 ipfiremake configroot
363 ipfiremake backup
364 ipfiremake dhcp
365 ipfiremake dhcpcd
366 ipfiremake libusb
367 ipfiremake libpcap
368 ipfiremake ppp
369 ipfiremake pptp
370 ipfiremake unzip
371 ipfiremake which
372 ipfiremake xz
373 ipfiremake linux-firmware
374 ipfiremake zd1211-firmware
375 ipfiremake u-boot
376
377 # The xen and PAE kernels are only available for x86
378 if [ "${MACHINE_TYPE}" != "arm" ]; then
379 ipfiremake linux XEN=1
380 ipfiremake kqemu XEN=1
381 ipfiremake v4l-dvb XEN=1
382 ipfiremake madwifi XEN=1
383 ipfiremake mISDN XEN=1
384 ipfiremake dahdi XEN=1 KMOD=1
385 ipfiremake cryptodev XEN=1
386 ipfiremake compat-wireless XEN=1
387 ipfiremake r8169 XEN=1
388 ipfiremake r8168 XEN=1
389 ipfiremake r8101 XEN=1
390 ipfiremake e1000 XEN=1
391 ipfiremake e1000e XEN=1
392 ipfiremake igb XEN=1
393 ipfiremake linux PAE=1
394 ipfiremake kqemu PAE=1
395 ipfiremake kvm-kmod PAE=1
396 ipfiremake v4l-dvb PAE=1
397 ipfiremake madwifi PAE=1
398 ipfiremake alsa PAE=1 KMOD=1
399 ipfiremake mISDN PAE=1
400 ipfiremake dahdi PAE=1 KMOD=1
401 ipfiremake cryptodev PAE=1
402 ipfiremake compat-wireless PAE=1
403 # ipfiremake r8169 PAE=1
404 # ipfiremake r8168 PAE=1
405 # ipfiremake r8101 PAE=1
406 ipfiremake e1000 PAE=1
407 ipfiremake e1000e PAE=1
408 ipfiremake igb PAE=1
409 fi
410
411 # Default kernel build
412 ipfiremake linux
413 ipfiremake v4l-dvb
414 ipfiremake kqemu
415 ipfiremake kvm-kmod
416 ipfiremake madwifi
417 if [ "${MACHINE_TYPE}" != "arm" ]; then
418 #todo enable alsa driver in kernel config
419 ipfiremake alsa KMOD=1
420 fi
421 #undefined declaration in echo canceler try to fix later
422 ipfiremake mISDN
423 ipfiremake dahdi KMOD=1
424 ipfiremake cryptodev
425 ipfiremake compat-wireless
426 # ipfiremake r8169
427 # ipfiremake r8168
428 # ipfiremake r8101
429 ipfiremake e1000
430 ipfiremake e1000e
431 ipfiremake igb
432 ipfiremake pkg-config
433 ipfiremake linux-atm
434 ipfiremake cpio
435 ipfiremake dracut
436 ipfiremake expat
437 ipfiremake gdbm
438 ipfiremake gmp
439 ipfiremake pam
440 ipfiremake openssl
441 ipfiremake curl
442 ipfiremake tcl
443 ipfiremake sqlite
444 ipfiremake python
445 ipfiremake fireinfo
446 ipfiremake libnet
447 ipfiremake libnl
448 ipfiremake libidn
449 ipfiremake libjpeg
450 ipfiremake libpng
451 ipfiremake libtiff
452 ipfiremake libart
453 ipfiremake freetype
454 ipfiremake gd
455 ipfiremake popt
456 ipfiremake pcre
457 ipfiremake slang
458 ipfiremake newt
459 ipfiremake attr
460 ipfiremake acl
461 ipfiremake libcap
462 ipfiremake pciutils
463 ipfiremake usbutils
464 ipfiremake libxml2
465 ipfiremake libxslt
466 ipfiremake BerkeleyDB
467 ipfiremake mysql
468 ipfiremake cyrus-sasl
469 ipfiremake openldap
470 ipfiremake apache2
471 ipfiremake php
472 ipfiremake apache2 PASS=C
473 ipfiremake arping
474 ipfiremake beep
475 ipfiremake bind
476 ipfiremake dvdrtools
477 ipfiremake dnsmasq
478 ipfiremake dosfstools
479 ipfiremake reiserfsprogs
480 ipfiremake xfsprogs
481 ipfiremake sysfsutils
482 ipfiremake fuse
483 ipfiremake ntfs-3g
484 ipfiremake ethtool
485 ipfiremake ez-ipupdate
486 ipfiremake fcron
487 ipfiremake perl-GD
488 ipfiremake GD-Graph
489 ipfiremake GD-TextUtil
490 ipfiremake gnupg
491 ipfiremake hdparm
492 ipfiremake sdparm
493 ipfiremake mtools
494 ipfiremake initscripts
495 ipfiremake whatmask
496 ipfiremake iptables
497 ipfiremake libupnp
498 ipfiremake ipaddr
499 ipfiremake iptstate
500 ipfiremake iputils
501 ipfiremake l7-protocols
502 ipfiremake mISDNuser
503 ipfiremake capi4k-utils
504 ipfiremake hwdata
505 ipfiremake kudzu
506 ipfiremake logrotate
507 ipfiremake logwatch
508 ipfiremake misc-progs
509 ipfiremake nano
510 ipfiremake nasm
511 ipfiremake URI
512 ipfiremake HTML-Tagset
513 ipfiremake HTML-Parser
514 ipfiremake Compress-Zlib
515 ipfiremake Digest
516 ipfiremake Digest-SHA1
517 ipfiremake Digest-HMAC
518 ipfiremake libwww-perl
519 ipfiremake Net-DNS
520 ipfiremake Net-IPv4Addr
521 ipfiremake Net_SSLeay
522 ipfiremake IO-Stringy
523 ipfiremake Unix-Syslog
524 ipfiremake Mail-Tools
525 ipfiremake MIME-Tools
526 ipfiremake Net-Server
527 ipfiremake Convert-TNEF
528 ipfiremake Convert-UUlib
529 ipfiremake Archive-Tar
530 ipfiremake Archive-Zip
531 ipfiremake Text-Tabs+Wrap
532 ipfiremake Locale-Country
533 ipfiremake XML-Parser
534 ipfiremake python-setuptools
535 ipfiremake python-clientform
536 ipfiremake python-mechanize
537 ipfiremake python-feedparser
538 ipfiremake python-rssdler
539 ipfiremake glib
540 ipfiremake GeoIP
541 ipfiremake fwhits
542 ipfiremake noip_updater
543 ipfiremake ntp
544 ipfiremake openssh
545 ipfiremake rrdtool
546 ipfiremake setserial
547 ipfiremake setup
548 ipfiremake libdnet
549 ipfiremake daq
550 ipfiremake snort
551 ipfiremake oinkmaster
552 ipfiremake squid
553 ipfiremake squidguard
554 ipfiremake calamaris
555 ipfiremake tcpdump
556 ipfiremake traceroute
557 ipfiremake vlan
558 ipfiremake wireless
559 ipfiremake libsafe
560 ipfiremake pakfire
561 ipfiremake spandsp
562 ipfiremake lzo
563 ipfiremake openvpn
564 ipfiremake pammysql
565 ipfiremake cups
566 ipfiremake ghostscript
567 ipfiremake foomatic
568 ipfiremake hplip
569 ipfiremake samba
570 ipfiremake sudo
571 ipfiremake mc
572 ipfiremake wget
573 ipfiremake bridge-utils
574 ipfiremake screen
575 ipfiremake hddtemp
576 ipfiremake smartmontools
577 ipfiremake htop
578 ipfiremake postfix
579 ipfiremake fetchmail
580 ipfiremake cyrus-imapd
581 ipfiremake openmailadmin
582 ipfiremake clamav
583 ipfiremake spamassassin
584 ipfiremake amavisd
585 ipfiremake alsa
586 ipfiremake mpfire
587 ipfiremake guardian
588 ipfiremake libid3tag
589 ipfiremake libmad
590 ipfiremake libogg
591 ipfiremake libvorbis
592 ipfiremake libdvbpsi
593 ipfiremake lame
594 ipfiremake sox
595 ipfiremake libshout
596 ipfiremake xvid
597 ipfiremake libmpeg2
598 ipfiremake cmake
599 ipfiremake gnump3d
600 ipfiremake libsigc++
601 ipfiremake applejuice
602 ipfiremake libtorrent
603 ipfiremake rtorrent
604 ipfiremake ipfireseeder
605 ipfiremake rsync
606 ipfiremake tcpwrapper
607 ipfiremake libevent
608 ipfiremake libevent2
609 ipfiremake portmap
610 ipfiremake nfs
611 ipfiremake nmap
612 ipfiremake ncftp
613 ipfiremake etherwake
614 ipfiremake bwm-ng
615 ipfiremake tripwire
616 ipfiremake sysstat
617 ipfiremake vsftpd
618 ipfiremake strongswan
619 ipfiremake lsof
620 ipfiremake centerim
621 ipfiremake br2684ctl
622 ipfiremake pcmciautils
623 ipfiremake lm_sensors
624 ipfiremake liboping
625 ipfiremake collectd
626 ipfiremake lcd4linux
627 ipfiremake teamspeak
628 ipfiremake elinks
629 ipfiremake igmpproxy
630 ipfiremake fbset
631 ipfiremake sdl
632 ipfiremake qemu
633 ipfiremake qemu-kqemu
634 ipfiremake sane
635 ipfiremake netpbm
636 ipfiremake phpSANE
637 ipfiremake tunctl
638 ipfiremake nagios
639 ipfiremake nagios_nrpe
640 ipfiremake ebtables
641 ipfiremake fontconfig
642 ipfiremake freefont
643 ipfiremake directfb
644 ipfiremake dfb++
645 ipfiremake faad2
646 ipfiremake ffmpeg
647 ipfiremake videolan
648 ipfiremake vdr
649 ipfiremake w_scan
650 ipfiremake icecast
651 ipfiremake icegenerator
652 ipfiremake mpd
653 ipfiremake libmpdclient
654 ipfiremake mpc
655 ipfiremake git
656 ipfiremake squidclamav
657 ipfiremake bc
658 ipfiremake vnstat
659 ipfiremake vnstati
660 ipfiremake iw
661 ipfiremake wpa_supplicant
662 ipfiremake hostapd
663 ipfiremake urlgrabber
664 ipfiremake syslinux
665 ipfiremake tftpd
666 ipfiremake cpufrequtils
667 ipfiremake dbus
668 ipfiremake bluetooth
669 ipfiremake gutenprint
670 ipfiremake apcupsd
671 ipfiremake iperf
672 ipfiremake netcat
673 ipfiremake 7zip
674 ipfiremake lynis
675 ipfiremake splix
676 ipfiremake streamripper
677 ipfiremake sshfs
678 ipfiremake taglib
679 ipfiremake mediatomb
680 ipfiremake sslh
681 ipfiremake perl-gettext
682 ipfiremake vdradmin
683 ipfiremake miau
684 ipfiremake netsnmpd
685 ipfiremake perl-DBI
686 ipfiremake perl-DBD-mysql
687 ipfiremake cacti
688 ipfiremake icecc
689 ipfiremake openvmtools
690 ipfiremake nagiosql
691 ipfiremake iftop
692 ipfiremake motion
693 ipfiremake joe
694 ipfiremake nut
695 ipfiremake watchdog
696 ipfiremake libpri
697 ipfiremake dahdi
698 ipfiremake asterisk
699 ipfiremake lcr
700 ipfiremake usb_modeswitch
701 ipfiremake usb_modeswitch_data
702 ipfiremake zerofree
703 ipfiremake mdadm
704 ipfiremake eject
705 ipfiremake pound
706 ipfiremake minicom
707 ipfiremake ddrescue
708 ipfiremake imspector
709 ipfiremake miniupnpd
710 ipfiremake client175
711 ipfiremake powertop
712 ipfiremake parted
713 ipfiremake swig
714 ipfiremake python-m2crypto
715 ipfiremake wireless-regdb
716 ipfiremake crda
717 ipfiremake libsolv
718 ipfiremake python-distutils-extra
719 ipfiremake python-lzma
720 ipfiremake python-progressbar
721 ipfiremake python-xattr
722 ipfiremake intltool
723 ipfiremake pakfire3-deps
724 ipfiremake transmission
725 echo Build on $HOSTNAME > $BASEDIR/build/var/ipfire/firebuild
726 cat /proc/version >> $BASEDIR/build/var/ipfire/firebuild
727 echo >> $BASEDIR/build/var/ipfire/firebuild
728 git log -1 >> $BASEDIR/build/var/ipfire/firebuild
729 echo >> $BASEDIR/build/var/ipfire/firebuild
730 git status >> $BASEDIR/build/var/ipfire/firebuild
731 echo >> $BASEDIR/build/var/ipfire/firebuild
732 cat /proc/cpuinfo >> $BASEDIR/build/var/ipfire/firebuild
733 echo $PAKFIRE_CORE > $BASEDIR/build/opt/pakfire/db/core/mine
734 if [ "$GIT_BRANCH" = "next" ]; then
735 echo "$NAME $VERSION - (Development Build: $GIT_LASTCOMMIT)" > $BASEDIR/build/etc/system-release
736 else
737 echo "$NAME $VERSION - $GIT_BRANCH" > $BASEDIR/build/etc/system-release
738 fi
739 }
740
741 buildinstaller() {
742 # Run installer scripts one by one
743 LOGFILE="$BASEDIR/log/_build.installer.log"
744 export LOGFILE
745 ipfiremake as86
746 ipfiremake mbr
747 ipfiremake memtest
748 ipfiremake installer
749 cp -f $BASEDIR/doc/COPYING $BASEDIR/build/install/initrd/
750 installmake strip
751 ipfiremake initrd
752 }
753
754 buildpackages() {
755 LOGFILE="$BASEDIR/log/_build.packages.log"
756 export LOGFILE
757 echo "... see detailed log in _build.*.log files" >> $LOGFILE
758
759
760 # Generating list of packages used
761 echo -n "Generating packages list from logs" | tee -a $LOGFILE
762 rm -f $BASEDIR/doc/packages-list
763 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
764 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
765 echo "* `basename $i`" >>$BASEDIR/doc/packages-list
766 fi
767 done
768 echo "== List of softwares used to build $NAME Version: $VERSION ==" > $BASEDIR/doc/packages-list.txt
769 grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|setup$\|pakfire$\|stage2$\|smp$\|tools$\|tools1$\|tools2$\|.tgz$\|-config$\|_missing_rootfile$\|install1$\|install2$\|pass1$\|pass2$\|pass3$' \
770 $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
771 rm -f $BASEDIR/doc/packages-list
772 # packages-list.txt is ready to be displayed for wiki page
773 beautify message DONE
774
775 # Update changelog
776 cd $BASEDIR
777 [ -z $GIT_TAG ] || LAST_TAG=$GIT_TAG
778 [ -z $LAST_TAG ] || EXT="$LAST_TAG..HEAD"
779 git log -n 500 --no-merges --pretty=medium --shortstat $EXT > $BASEDIR/doc/ChangeLog
780
781 # Create images for install
782 ipfiremake cdrom
783
784 # Check if there is a loop device for building in virtual environments
785 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]); then
786 if [ "${MACHINE_TYPE}" != "arm" ]; then
787 ipfiremake usb-stick
788 fi
789 ipfiremake flash-images
790 fi
791
792 mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
793
794 ipfirepackages
795
796 # Check if there is a loop device for building in virtual environments
797 if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ]) && [ "${MACHINE_TYPE}" != "arm" ]; then
798 cp -f $BASEDIR/packages/linux-xen-*.ipfire $LFS/install/packages/
799 cp -f $BASEDIR/packages/meta-linux-xen $LFS/install/packages/
800 ipfiremake xen-image
801 rm -rf $LFS/install/packages/linux-xen-*.ipfire
802 rm -rf $LFS/install/packages/meta-linux-xen
803 fi
804 mv $LFS/install/images/*.bz2 $BASEDIR >> $LOGFILE 2>&1
805
806 cd $BASEDIR
807 for i in `ls *.bz2 *.img.gz *.iso`; do
808 md5sum $i > $i.md5
809 done
810 cd $PWD
811
812 # Cleanup
813 stdumount
814 rm -rf $BASEDIR/build/tmp/*
815
816 # Generating total list of files
817 echo -n "Generating files list from logs" | tee -a $LOGFILE
818 rm -f $BASEDIR/log/FILES
819 for i in `ls -1tr $BASEDIR/log/[^_]*`; do
820 if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
821 echo "##" >>$BASEDIR/log/FILES
822 echo "## `basename $i`" >>$BASEDIR/log/FILES
823 echo "##" >>$BASEDIR/log/FILES
824 cat $i | sed "s%^\./%#%" | sort >> $BASEDIR/log/FILES
825 fi
826 done
827 beautify message DONE
828
829 cd $PWD
830 }
831
832 ipfirepackages() {
833 ipfiremake core-updates
834
835 local i
836 for i in $(find $BASEDIR/config/rootfiles/packages{${machine},} -maxdepth 1 -type f); do
837 i=$(basename ${i})
838 if [ -e $BASEDIR/lfs/$i ]; then
839 ipfiredist $i
840 else
841 echo -n $i
842 beautify message SKIP
843 fi
844 done
845 test -d $BASEDIR/packages || mkdir $BASEDIR/packages
846 mv -f $LFS/install/packages/* $BASEDIR/packages >> $LOGFILE 2>&1
847 rm -rf $BASEDIR/build/install/packages/*
848 }
849
850 # See what we're supposed to do
851 case "$1" in
852 build)
853 clear
854 PACKAGE=`ls -v -r $BASEDIR/cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz 2> /dev/null | head -n 1`
855 #only restore on a clean disk
856 if [ ! -f log/cleanup-toolchain-2-tools ]; then
857 if [ ! -n "$PACKAGE" ]; then
858 beautify build_stage "Full toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
859 prepareenv
860 buildtoolchain
861 else
862 PACKAGENAME=${PACKAGE%.tar.gz}
863 beautify build_stage "Packaged toolchain compilation"
864 if [ `md5sum $PACKAGE | awk '{print $1}'` == `cat $PACKAGENAME.md5 | awk '{print $1}'` ]; then
865 tar zxf $PACKAGE
866 prepareenv
867 else
868 exiterror "$PACKAGENAME md5 did not match, check downloaded package"
869 fi
870 fi
871 else
872 echo -n "Using installed toolchain" | tee -a $LOGFILE
873 beautify message SKIP
874 prepareenv
875 fi
876
877 beautify build_start
878 beautify build_stage "Building LFS"
879 buildbase
880
881 beautify build_stage "Building IPFire"
882 buildipfire
883
884 beautify build_stage "Building installer"
885 buildinstaller
886
887 beautify build_stage "Building packages"
888 buildpackages
889
890 beautify build_stage "Checking Logfiles for new Files"
891
892 cd $BASEDIR
893 tools/checknewlog.pl
894 cd $PWD
895
896 beautify build_end
897 ;;
898 shell)
899 # enter a shell inside LFS chroot
900 # may be used to changed kernel settings
901 prepareenv
902 entershell
903 ;;
904 clean)
905 echo -en "${BOLD}Cleaning build directory...${NORMAL}"
906 for i in `mount | grep $BASEDIR | sed 's/^.*loop=\(.*\))/\1/'`; do
907 $LOSETUP -d $i 2>/dev/null
908 done
909 for i in `mount | grep $BASEDIR | cut -d " " -f 1`; do
910 umount $i
911 done
912 stdumount
913 for i in `seq 0 7`; do
914 if ( losetup /dev/loop${i} 2>/dev/null | grep -q "/install/images" ); then
915 umount /dev/loop${i} 2>/dev/null;
916 losetup -d /dev/loop${i} 2>/dev/null;
917 fi;
918 done
919 rm -rf $BASEDIR/build
920 rm -rf $BASEDIR/cdrom
921 rm -rf $BASEDIR/packages
922 rm -rf $BASEDIR/log
923 if [ -h /tools ]; then
924 rm -f /tools
925 fi
926 rm -f $BASEDIR/ipfire-*
927 beautify message DONE
928 ;;
929 downloadsrc)
930 if [ ! -d $BASEDIR/cache ]; then
931 mkdir $BASEDIR/cache
932 fi
933 mkdir -p $BASEDIR/log
934 echo -e "${BOLD}Preload all source files${NORMAL}" | tee -a $LOGFILE
935 FINISHED=0
936 cd $BASEDIR/lfs
937 for c in `seq $MAX_RETRIES`; do
938 if (( FINISHED==1 )); then
939 break
940 fi
941 FINISHED=1
942 cd $BASEDIR/lfs
943 for i in *; do
944 if [ -f "$i" -a "$i" != "Config" ]; then
945 lfsmakecommoncheck ${i} || continue
946
947 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
948 MESSAGE="$i\t ($c/$MAX_RETRIES)" download >> $LOGFILE 2>&1
949 if [ $? -ne 0 ]; then
950 beautify message FAIL
951 FINISHED=0
952 else
953 if [ $c -eq 1 ]; then
954 beautify message DONE
955 fi
956 fi
957 fi
958 done
959 done
960 echo -e "${BOLD}***Verifying md5sums${NORMAL}"
961 ERROR=0
962 for i in *; do
963 if [ -f "$i" -a "$i" != "Config" ]; then
964 make -s -f $i LFS_BASEDIR=$BASEDIR MACHINE=$MACHINE \
965 MESSAGE="$i\t " md5 >> $LOGFILE 2>&1
966 if [ $? -ne 0 ]; then
967 echo -ne "MD5 difference in lfs/$i"
968 beautify message FAIL
969 ERROR=1
970 fi
971 fi
972 done
973 if [ $ERROR -eq 0 ]; then
974 echo -ne "${BOLD}all files md5sum match${NORMAL}"
975 beautify message DONE
976 else
977 echo -ne "${BOLD}not all files were correctly download${NORMAL}"
978 beautify message FAIL
979 fi
980 cd - >/dev/null 2>&1
981 ;;
982 toolchain)
983 clear
984 prepareenv
985 beautify build_stage "Toolchain compilation - Native GCC: `gcc --version | grep GCC | awk {'print $3'}`"
986 buildtoolchain
987 echo "`date -u '+%b %e %T'`: Create toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
988 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
989 cd $BASEDIR && tar -zc --exclude='log/_build.*.log' -f cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
990 build/{bin,etc,usr/bin,usr/local} \
991 build/tools/{bin,etc,*-linux-gnu*,include,lib,libexec,sbin,share,var} \
992 log >> $LOGFILE
993 md5sum cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.tar.gz \
994 > cache/toolchains/$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE.md5
995 stdumount
996 ;;
997 gettoolchain)
998 # arbitrary name to be updated in case of new toolchain package upload
999 PACKAGE=$SNAME-$VERSION-toolchain-$TOOLCHAINVER-$MACHINE
1000 if [ ! -f $BASEDIR/cache/toolchains/$PACKAGE.tar.gz ]; then
1001 URL_TOOLCHAIN=`grep URL_TOOLCHAIN lfs/Config | awk '{ print $3 }'`
1002 test -d $BASEDIR/cache/toolchains || mkdir -p $BASEDIR/cache/toolchains
1003 echo "`date -u '+%b %e %T'`: Load toolchain tar.gz for $MACHINE" | tee -a $LOGFILE
1004 cd $BASEDIR/cache/toolchains
1005 wget -U "IPFireSourceGrabber/2.x" $URL_TOOLCHAIN/$PACKAGE.tar.gz $URL_TOOLCHAIN/$PACKAGE.md5 >& /dev/null
1006 if [ $? -ne 0 ]; then
1007 echo "`date -u '+%b %e %T'`: error downloading $PACKAGE toolchain for $MACHINE machine" | tee -a $LOGFILE
1008 else
1009 if [ "`md5sum $PACKAGE.tar.gz | awk '{print $1}'`" = "`cat $PACKAGE.md5 | awk '{print $1}'`" ]; then
1010 echo "`date -u '+%b %e %T'`: toolchain md5 ok" | tee -a $LOGFILE
1011 else
1012 exiterror "$PACKAGE.md5 did not match, check downloaded package"
1013 fi
1014 fi
1015 else
1016 echo "Toolchain is already downloaded. Exiting..."
1017 fi
1018 ;;
1019 othersrc)
1020 prepareenv
1021 echo -ne "`date -u '+%b %e %T'`: Build sources iso for $MACHINE" | tee -a $LOGFILE
1022 chroot $LFS /tools/bin/env -i HOME=/root \
1023 TERM=$TERM PS1='\u:\w\$ ' \
1024 PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
1025 VERSION=$VERSION NAME="$NAME" SNAME="$SNAME" MACHINE=$MACHINE \
1026 /bin/bash -x -c "cd /usr/src/lfs && make -f sources-iso LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
1027 mv $LFS/install/images/ipfire-* $BASEDIR >> $LOGFILE 2>&1
1028 if [ $? -eq "0" ]; then
1029 beautify message DONE
1030 else
1031 beautify message FAIL
1032 fi
1033 stdumount
1034 ;;
1035 uploadsrc)
1036 PWD=`pwd`
1037 if [ -z $IPFIRE_USER ]; then
1038 echo -n "You have to setup IPFIRE_USER first. See .config for details."
1039 beautify message FAIL
1040 exit 1
1041 fi
1042
1043 URL_SOURCE=$(grep URL_SOURCE lfs/Config | awk '{ print $3 }')
1044 REMOTE_FILES=$(echo "ls -1 --ignore=toolchains" | sftp -C ${IPFIRE_USER}@${URL_SOURCE})
1045
1046 cd $BASEDIR/cache/
1047 for file in $(ls -1 --ignore=toolchains); do
1048 grep -q "$file" <<<$REMOTE_FILES && continue
1049 NEW_FILES="$NEW_FILES $file"
1050 done
1051 [ -n "$NEW_FILES" ] && scp -2 $NEW_FILES ${IPFIRE_USER}@${URL_SOURCE}
1052 cd $BASEDIR
1053 cd $PWD
1054 exit 0
1055 ;;
1056 lang)
1057 update_langs
1058 ;;
1059 *)
1060 echo "Usage: $0 {build|changelog|clean|gettoolchain|downloadsrc|shell|sync|toolchain}"
1061 cat doc/make.sh-usage
1062 ;;
1063 esac