]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/extras/Makefile.install
OpenSRF Validator Service
[OpenSRF.git] / src / extras / Makefile.install
1 # ---------------------------------------------------------------------
2 # Author: Bill Erickson <erickson@esilibrary.com>
3 # Author: Dan Scott <dscott@laurentian.ca>
4 #
5 # Makefile to install prerequisites for OpenSRF
6 #
7 # Currently supports Debian (lenny/squeeze), Ubuntu (hardy/lucid/precise)
8 # Working towards support of CentOS 5 / RHEL 5 and Fedora.
9 # Installs Perl prereqs, libjs with Perl wrapper
10 #
11 # usage:
12 #       make -f Makefile.install debian-lenny
13 #       - or -
14 #       make -f Makefile.install debian-squeeze
15 #       - or -
16 #       make -f Makefile.install ubuntu-hardy
17 #       - or -
18 #       make -f Makefile.install ubuntu-lucid
19 #       - or -
20 #       make -f Makefile.install ubuntu-precise
21 #       - or -
22 #       make -f Makefile.install centos
23 #       - or -
24 #       make -f Makefile.install rhel
25 #       - or -
26 #       make -f Makefile.install fedora14
27 #
28 # Notes:
29 #
30 #       This makefile has been tested much more with Ubuntu and Debian than
31 #   CentOS, Fedora, or RHEL.
32 #
33 # ---------------------------------------------------------------------
34
35 # Make any assumptions about the shell being used explicit
36 SHELL=/bin/bash 
37
38 # XXX
39 # Gentoo needs explicit versions on many of these packages
40 # to simulate a "blessed" set of packages
41
42 # 64 or 32 bit os?
43 LBITS=$(shell getconf LONG_BIT)
44
45 # ejabberd is not packaged on CentOS/RHEL, so we have to
46 # download the installable package from the source
47 EJABBERD_VER=2.1.2
48 EJABBERD_PKG=ejabberd-2.1.2-linux-x86-installer.bin
49 EJABBERD_PKG_x64=ejabberd-2.1.2-linux-x86_64-installer.bin
50 EJABBERD_HOST=http://www.process-one.net/downloads/ejabberd
51
52 # Centos and Redhat will require the rpmforge repository mostly for memcache and perl modules
53 RPMFORGE_PKG_x64=rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
54 RPMFORGE_PKG=rpmforge-release-0.5.1-1.el5.rf.i386.rpm
55 RPMFORGE_HOST=http://packages.sw.be/rpmforge-release
56
57 # need newer libtool, autoconf, and automake on centos
58 AUTOCONF_HOST=http://ftp.gnu.org/gnu/autoconf
59 AUTOCONF_PKG=autoconf-2.65
60 LIBTOOL_HOST=http://ftp.gnu.org/gnu/libtool
61 LIBTOOL_PKG=libtool-2.2.6b
62 AUTOMAKE_HOST=http://ftp.gnu.org/gnu/automake
63 AUTOMAKE_PKG=automake-1.11
64
65 # libmemcached is only packaged on newer distros
66 LIBMEMCACHED=libmemcached-0.40
67 LIBMEMCACHED_HOST=http://download.tangent.org
68
69 # XML::LibXSLT fails due to old libxslt
70 XSLT=libxslt-1.1.22
71 XSLT_HOST=ftp://ftp.gnome.org/pub/GNOME/sources/libxslt/1.1
72
73 # libxslt depends on a newer version of libxml2:
74 XML2=libxml2-2.6.30
75 XML2_HOST=ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6
76
77 APT_TOOL=aptitude -yq
78
79 # Debian dependencies
80 DEBS =  \
81         apache2-mpm-prefork\
82         apache2-prefork-dev\
83         autoconf\
84         automake\
85         build-essential\
86         check\
87         ejabberd\
88         less\
89         libapache2-mod-perl2\
90         libcache-memcached-perl\
91         libclass-dbi-abstractsearch-perl\
92         libclass-dbi-sqlite-perl\
93         libdatetime-format-builder-perl\
94         libdatetime-format-mail-perl\
95         libdatetime-perl\
96         libdatetime-timezone-perl\
97         liberror-perl\
98         libexpat1-dev\
99         libfile-find-rule-perl\
100         libgcrypt11-dev \
101         libgdbm-dev \
102         liblog-log4perl-perl\
103         libmodule-build-perl\
104         libnet-dns-perl\
105         libnet-jabber-perl\
106         libperl-dev\
107         libreadline5-dev\
108         librpc-xml-perl\
109         libtemplate-perl\
110         libtest-pod-perl\
111         libtie-ixhash-perl\
112         libtool\
113         libuniversal-require-perl\
114         libunix-syslog-perl\
115         libwww-perl\
116         libxml2-dev\
117         libxml-libxml-perl\
118         libxml-libxslt-perl\
119         libxml-simple-perl\
120         libxslt1-dev\
121         memcached\
122         pkg-config\
123         psmisc\
124         python-dev\
125         python-libxml2\
126         python-setuptools\
127         zlib1g-dev
128
129 CENTOS = \
130         apr-util-devel \
131         autoconf \
132         automake \
133         gcc \
134         gcc-c++ \
135         gdbm-devel \
136         httpd-devel \
137         less \
138         libmemcache-devel \
139         libtool \
140         libxml2-devel \
141         libxslt-devel \
142         make \
143         memcached \
144         mod_perl \
145         mod_ssl \
146         ncurses \
147         ncurses-devel \
148         perl-Cache-Memcached \
149         perl-Class-DBI-AbstractSearch \
150         perl-Class-DBI-SQLite \
151         perl-DateTime \
152         perl-DateTime-Format-ISO8601 \
153         perl-DateTime-Format-Mail \
154         perl-DateTime-Set \
155         perl-DateTime-TimeZone \
156         perl-DBI \
157         perl-Email-Send \
158         perl-Error \
159         perl-File-Find-Rule \
160         perl-JSON-XS \
161         perl-libwww-perl \
162         perl-Log-Log4perl \
163         perl-Memcached-libmemcached \
164         perl-Module-Build \
165         perl-Net-DNS \
166         perl-Net-Server \
167         perl-Template-Toolkit \
168         perl-Test-Pod \
169         perl-Tie-IxHash \
170         perl-UNIVERSAL-require \
171         perl-Unix-Syslog \
172         perl-XML-Parser \
173         psmisc \
174         python-devel \
175         python-setuptools\
176         readline-devel \
177         wget
178
179 CENTOS_PERL = \
180         Net::Jabber \
181         Net::XMPP \
182         RPC::XML \
183         XML::LibXML \
184         XML::LibXSLT \
185         XML::Simple
186
187 FEDORAS = \
188         autoconf \
189         automake \
190         check \
191         check-devel \
192         ejabberd \
193         expat-devel \
194         gcc \
195         gdbm-devel \
196         httpd \
197         httpd-devel \
198         less \
199         libgcrypt-devel \
200         libmemcached \
201         libmemcached-devel \
202         libtool \
203         libxml2-devel \
204         libxml2-python \
205         libxslt-devel \
206         make \
207         memcached \
208         mod_perl \
209         perl-Cache-Memcached \
210         perl-Class-DBI \
211         perl-Class-DBI-AbstractSearch \
212         perl-Class-DBI-SQLite \
213         perl-DateTime-Format-Builder \
214         perl-DateTime-Format-ISO8601 \
215         perl-DateTime-Format-Mail \
216         perl-DateTime-Set \
217         perl-devel \
218         perl-Error \
219         perl-File-Find-Rule \
220         perl-JSON-XS \
221         perl-libwww-perl \
222         perl-Log-Log4perl \
223         perl-Module-Build \
224         perl-Net-DNS \
225         perl-Net-Jabber \
226         perl-Net-Server \
227         perl-RPC-XML \
228         perl-SQL-Abstract-Limit \
229         perl-Template-Toolkit \
230         perl-Test-Deep \
231         perl-Test-Exception \
232         perl-Test-Pod \
233         perl-Tie-IxHash \
234         perl-UNIVERSAL-require \
235         perl-Unix-Syslog \
236         perl-XML-LibXML \
237         perl-XML-LibXSLT \
238         perl-XML-Simple \
239         psmisc \
240         python-devel \
241         python-dns \
242         python-memcached \
243         python-setuptools \
244         python-simplejson \
245         readline-devel
246
247 DEB_APACHE_MODS = \
248         ssl
249
250 EXTRA_DEBS = \
251         libdatetime-format-iso8601-perl \
252         libjson-xs-perl \
253         libnet-server-perl
254
255 EXTRA_DEBS_SQUEEZE = \
256         libmemcached-dev \
257         libmemcached-tools \
258         libxml-libxml-perl \
259         libxml-libxslt-perl
260
261 EXTRA_DEBS_UBUNTU_LUCID = \
262         libmemcached-dev\
263         libxml-libxml-perl \
264         libxml-libxslt-perl
265
266 EXTRA_DEBS_UBUNTU_PRECISE = \
267         libmemcached-dev\
268         libxml-libxml-perl \
269         libxml-libxslt-perl \
270         ncurses-dev \
271         libreadline-dev
272
273 # generic CPAN modules:
274 #   * DateTime::Format::ISO8601 is packaged by both Debian Lenny and Ubuntu Intrepid
275 #   * JSON::XS is packaged by both Debian Lenny and Ubuntu Intrepid
276 #   * libnet-server-perl 0.97 is packaged on Debian Lenny and Ubuntu Intrepid
277 #     - is there a specific need for 0.90?
278 CPAN_MODULES = \
279         DateTime::Format::ISO8601 \
280         RHANDOM/Net-Server-0.90.tar.gz \
281         JSON::XS
282
283 #   libxml-libxml-perl on Debian Lenny and Ubuntu Intrepid is 1.66, which
284 #   has broken namespace handling. so we still need to install these from
285 #   CPAN. *sigh*
286 CPAN_MODULES_XML = \
287         XML::LibXML \
288         XML::LibXSLT
289
290 # ----------------------------------------------------------------------------
291
292 all: 
293         @echo "please specify an OS" && exit 0
294
295
296 centos: install_rpmforge install_centos_rpms install_ejabberd install_buildutils install_libmemcached install_libxml2 install_libxslt install_centos_perl create_ld_local
297
298 debian-lenny: generic_debian install_cpan_xml lenny install_libmemcached
299 debian-squeeze: generic_debian squeeze
300 lenny: install_extra_debs
301 squeeze: install_extra_debs_squeeze
302 generic_debian: install_debs debian_sys_config
303
304 fedora14: install_fedora_rpms
305
306 rhel: centos
307
308 ubuntu-hardy: generic_ubuntu install_cpan_xml hardy
309 ubuntu-lucid: generic_ubuntu lucid
310 ubuntu-precise: generic_ubuntu precise
311 hardy: install_cpan install_libmemcached 
312 lucid: install_extra_debs install_extra_debs_lucid
313 precise: install_extra_debs install_extra_debs_precise
314 generic_ubuntu: install_debs debian_sys_config
315
316 # - COMMON TARGETS ---------------------------------------------------------
317
318 # Install the CPAN modules
319 install_cpan: 
320         for m in $(CPAN_MODULES); do perl -MCPAN -e "install \"$$m\";"; done
321
322 # Install CPAN modules that need to be forced
323 install_cpan_force: 
324         for m in $(CPAN_MODULES_FORCE); do perl -MCPAN -e "CPAN::Shell->force(qw#install $$m#);"; done
325
326 # Install the CPAN XML modules
327 install_cpan_xml: 
328         for m in $(CPAN_MODULES_XML); do perl -MCPAN -e "install \"$$m\";"; done
329
330 # Install ejabberd from official project installer binary
331 install_ejabberd:
332         if [ $(LBITS) -eq 64 ]; then \
333                 if [ ! -f $(EJABBERD_PKG_x64).gz ]; then \
334                         wget $(EJABBERD_HOST)/$(EJABBERD_VER)/$(EJABBERD_PKG_x64).gz; \
335                 fi; \
336                 gunzip $(EJABBERD_PKG_x64).gz; \
337                 chmod u+x $(EJABBERD_PKG_x64); \
338                 ./$(EJABBERD_PKG_x64) --mode unattended --prefix /opt/ejabberd --adminpw opensrf ; \
339         fi;
340         if [ $(LBITS) -eq 32 ]; then \
341                 if [ ! -f $(EJABBERD_PKG).gz ]; then \
342                         wget $(EJABBERD_HOST)/$(EJABBERD_VER)/$(EJABBERD_PKG).gz; \
343                 fi; \
344                 gunzip $(EJABBERD_PKG).gz; \
345                 chmod u+x $(EJABBERD_PKG); \
346                 ./$(EJABBERD_PKG) --mode unattended --prefix /opt/ejabberd --adminpw opensrf ; \
347         fi;
348
349 # Install rpmforge for redhat and centos
350 install_rpmforge:
351         if [ $(LBITS) -eq 64 ]; then \
352                 if [ ! -f $(RPMFORGE_PKG_x64) ]; then \
353                         wget $(RPMFORGE_HOST)/$(RPMFORGE_PKG_x64) ; \
354                         yum -y remove subversion*i386 ; \
355                 fi; \
356                 rpm -Uvh --force ./$(RPMFORGE_PKG_x64) ; \
357         fi;
358         if [ $(LBITS) -eq 32 ]; then \
359                 if [ ! -f $(RPMFORGE_PKG) ]; then \
360                         wget $(RPMFORGE_HOST)/$(RPMFORGE_PKG) ; \
361                 fi; \
362                 rpm -Uvh --force ./$(RPMFORGE_PKG) ; \
363         fi;
364         yum update -y
365
366 # Install automake, autoconf, and libtool
367 install_buildutils:
368         if [ ! -f $(LIBTOOL_PKG).tar.gz ]; then wget $(LIBTOOL_HOST)/$(LIBTOOL_PKG).tar.gz; fi;
369         tar zxf $(LIBTOOL_PKG).tar.gz
370         cd $(LIBTOOL_PKG) && ./configure --prefix=/usr && make && make install
371
372         if [ ! -f $(AUTOCONF_PKG).tar.gz ]; then wget $(AUTOCONF_HOST)/$(AUTOCONF_PKG).tar.gz; fi;
373         tar zxf $(AUTOCONF_PKG).tar.gz
374         cd $(AUTOCONF_PKG) && ./configure --prefix=/usr && make && make install
375         
376         if [ ! -f $(AUTOMAKE_PKG).tar.gz ]; then wget $(AUTOMAKE_HOST)/$(AUTOMAKE_PKG).tar.gz; fi;
377         tar zxf $(AUTOMAKE_PKG).tar.gz
378         cd $(AUTOMAKE_PKG) && ./configure --prefix=/usr && make && make install
379
380 # Install libmemcached from the official project source
381 install_libmemcached:
382         if [ ! -f $(LIBMEMCACHED).tar.gz ]; then wget $(LIBMEMCACHED_HOST)/$(LIBMEMCACHED).tar.gz; fi;
383         tar xzf $(LIBMEMCACHED).tar.gz
384         cd $(LIBMEMCACHED) && ./configure && make && make install
385
386 # Install a newer version of libxslt
387 install_libxslt:    
388         if [ ! -d $(XSLT) ]; then wget $(XSLT_HOST)/$(XSLT).tar.gz; fi;
389         tar xzf $(XSLT).tar.gz
390         cd $(XSLT) && ./configure --with-libxml-prefix=/usr/local && make && make install
391
392 # Install a newer version of libxml2
393 install_libxml2:    
394         if [ ! -d $(XML2) ]; then wget $(XML2_HOST)/$(XML2).tar.gz; fi;
395         tar xzf $(XML2).tar.gz
396         cd $(XML2) && ./configure && make && make install
397
398 clean:
399         make -C $(LIBJS_PERL) clean
400         make -C $(XML2) clean
401         make -C $(XSLT) clean
402         make -f Makefile.ref -C js/src/ clean
403
404
405 # ------------------------------------------------------------------
406 # - DEBIAN ---------------------------------------------------------
407
408 debian_sys_config: 
409         # link the apache modules in
410         for m in $(DEB_APACHE_MODS); do a2enmod $$m; done;
411
412         # adds a placeholder module so apxs will be happy
413         if [ ! "$$(grep mod_placeholder /etc/apache2/httpd.conf)" ]; then \
414                 echo -e "#\n#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so" \
415                         >> /etc/apache2/httpd.conf; \
416         fi;
417
418 # Install the debian-specific dependencies
419 install_debs:
420         $(APT_TOOL) install $(DEBS)
421
422 # Install the debian-specific dependencies for more modern distros
423 install_extra_debs:
424         $(APT_TOOL) install $(EXTRA_DEBS)
425
426 install_extra_debs_squeeze: install_extra_debs
427         $(APT_TOOL) install $(EXTRA_DEBS_SQUEEZE)
428
429 # Install even more packaged dependencies on modern distros
430 install_extra_debs_lucid:
431         $(APT_TOOL) install $(EXTRA_DEBS_UBUNTU_LUCID)
432
433 install_extra_debs_precise:
434         $(APT_TOOL) install $(EXTRA_DEBS_UBUNTU_PRECISE)
435
436 # Fedora
437 install_fedora_rpms:
438         yum -y install $(FEDORAS)
439
440 # CENTOS
441 install_centos_rpms:
442         yum -y install $(CENTOS)
443         yum -y update
444
445 install_centos_perl:
446         for m in $(CENTOS_PERL_FORCE); do perl -MCPAN -e "CPAN::Shell->force(qw#install $$m#);"; done
447         for m in $(CENTOS_PERL); do perl -MCPAN -e "install \"$$m\";"; done
448         for m in $(CENTOS_PERL_VERSION); do perl -MCPAN -e "CPAN::Shell->install \"$$m\";"; done
449         for m in $(CENTOS_PERL_NOTEST); do perl -MCPAN -e "CPAN::Shell->notest('install', \"$$m\";"; done
450         for m in $(CENTOS_PERL_LOCAL); do LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/lib perl -MCPAN -e "install \"$$m\";"; done
451
452 # We need to add /usr/local/lib to the ldconfig list of directories on CentOS,
453 # if it is not already there
454 create_ld_local:
455         if [ "$$(ldconfig -v 2> /dev/null | grep '^/usr/local/lib' | wc -l)" -eq 0 ]; then \
456                 echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf; \
457                 ldconfig; \
458         fi;
459
460 # vim:noet:sw=4:ts=4: