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