]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/extras/Makefile.install
Support installation for Ubuntu 12.04 Precise Pangolin.
[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-jabber-perl\
105         libperl-dev\
106         libreadline5-dev\
107         librpc-xml-perl\
108         libtemplate-perl\
109         libtest-pod-perl\
110         libtie-ixhash-perl\
111         libtool\
112         libuniversal-require-perl\
113         libunix-syslog-perl\
114         libwww-perl\
115         libxml2-dev\
116         libxml-libxml-perl\
117         libxml-libxslt-perl\
118         libxml-simple-perl\
119         libxslt1-dev\
120         memcached\
121         pkg-config\
122         psmisc\
123         python-dev\
124         python-libxml2\
125         python-setuptools\
126         zlib1g-dev
127
128 CENTOS = \
129         apr-util-devel \
130         autoconf \
131         automake \
132         gcc \
133         gcc-c++ \
134         gdbm-devel \
135         httpd-devel \
136         less \
137         libmemcache-devel \
138         libtool \
139         libxml2-devel \
140         libxslt-devel \
141         make \
142         memcached \
143         mod_perl \
144         mod_ssl \
145         ncurses \
146         ncurses-devel \
147         perl-Cache-Memcached \
148         perl-Class-DBI-AbstractSearch \
149         perl-Class-DBI-SQLite \
150         perl-DateTime \
151         perl-DateTime-Format-ISO8601 \
152         perl-DateTime-Format-Mail \
153         perl-DateTime-Set \
154         perl-DateTime-TimeZone \
155         perl-DBI \
156         perl-Email-Send \
157         perl-Error \
158         perl-File-Find-Rule \
159         perl-JSON-XS \
160         perl-libwww-perl \
161         perl-Log-Log4perl \
162         perl-Memcached-libmemcached \
163         perl-Module-Build \
164         perl-Net-Server \
165         perl-Template-Toolkit \
166         perl-Test-Pod \
167         perl-Tie-IxHash \
168         perl-UNIVERSAL-require \
169         perl-Unix-Syslog \
170         perl-XML-Parser \
171         psmisc \
172         python-devel \
173         python-setuptools\
174         readline-devel \
175         wget
176
177 CENTOS_PERL = \
178         Net::Jabber \
179         Net::XMPP \
180         RPC::XML \
181         XML::LibXML \
182         XML::LibXSLT \
183         XML::Simple
184
185 FEDORAS = \
186         autoconf \
187         automake \
188         check \
189         check-devel \
190         ejabberd \
191         expat-devel \
192         gcc \
193         gdbm-devel \
194         httpd \
195         httpd-devel \
196         less \
197         libgcrypt-devel \
198         libmemcached \
199         libmemcached-devel \
200         libtool \
201         libxml2-devel \
202         libxml2-python \
203         libxslt-devel \
204         make \
205         memcached \
206         mod_perl \
207         perl-Cache-Memcached \
208         perl-Class-DBI \
209         perl-Class-DBI-AbstractSearch \
210         perl-Class-DBI-SQLite \
211         perl-DateTime-Format-Builder \
212         perl-DateTime-Format-ISO8601 \
213         perl-DateTime-Format-Mail \
214         perl-DateTime-Set \
215         perl-devel \
216         perl-Error \
217         perl-File-Find-Rule \
218         perl-JSON-XS \
219         perl-libwww-perl \
220         perl-Log-Log4perl \
221         perl-Module-Build \
222         perl-Net-Jabber \
223         perl-Net-Server \
224         perl-RPC-XML \
225         perl-SQL-Abstract-Limit \
226         perl-Template-Toolkit \
227         perl-Test-Deep \
228         perl-Test-Exception \
229         perl-Test-Pod \
230         perl-Tie-IxHash \
231         perl-UNIVERSAL-require \
232         perl-Unix-Syslog \
233         perl-XML-LibXML \
234         perl-XML-LibXSLT \
235         perl-XML-Simple \
236         psmisc \
237         python-devel \
238         python-dns \
239         python-memcached \
240         python-setuptools \
241         python-simplejson \
242         readline-devel
243
244 DEB_APACHE_MODS = \
245         ssl
246
247 EXTRA_DEBS = \
248         libdatetime-format-iso8601-perl \
249         libjson-xs-perl \
250         libnet-server-perl
251
252 EXTRA_DEBS_SQUEEZE = \
253         libmemcached-dev \
254         libmemcached-tools \
255         libxml-libxml-perl \
256         libxml-libxslt-perl
257
258 EXTRA_DEBS_UBUNTU_LUCID = \
259         libmemcached-dev\
260         libxml-libxml-perl \
261         libxml-libxslt-perl
262
263 EXTRA_DEBS_UBUNTU_PRECISE = \
264         libmemcached-dev\
265         libxml-libxml-perl \
266         libxml-libxslt-perl \
267         ncurses-dev \
268         libreadline-dev
269
270 # generic CPAN modules:
271 #   * DateTime::Format::ISO8601 is packaged by both Debian Lenny and Ubuntu Intrepid
272 #   * JSON::XS is packaged by both Debian Lenny and Ubuntu Intrepid
273 #   * libnet-server-perl 0.97 is packaged on Debian Lenny and Ubuntu Intrepid
274 #     - is there a specific need for 0.90?
275 CPAN_MODULES = \
276         DateTime::Format::ISO8601 \
277         RHANDOM/Net-Server-0.90.tar.gz \
278         JSON::XS
279
280 #   libxml-libxml-perl on Debian Lenny and Ubuntu Intrepid is 1.66, which
281 #   has broken namespace handling. so we still need to install these from
282 #   CPAN. *sigh*
283 CPAN_MODULES_XML = \
284         XML::LibXML \
285         XML::LibXSLT
286
287 # ----------------------------------------------------------------------------
288
289 all: 
290         @echo "please specify an OS" && exit 0
291
292
293 centos: install_rpmforge install_centos_rpms install_ejabberd install_buildutils install_libmemcached install_libxml2 install_libxslt install_centos_perl create_ld_local
294
295 debian-lenny: generic_debian install_cpan_xml lenny install_libmemcached
296 debian-squeeze: generic_debian squeeze
297 lenny: install_extra_debs
298 squeeze: install_extra_debs_squeeze
299 generic_debian: install_debs debian_sys_config
300
301 fedora14: install_fedora_rpms
302
303 rhel: centos
304
305 ubuntu-hardy: generic_ubuntu install_cpan_xml hardy
306 ubuntu-lucid: generic_ubuntu lucid
307 ubuntu-precise: generic_ubuntu precise
308 hardy: install_cpan install_libmemcached 
309 lucid: install_extra_debs install_extra_debs_lucid
310 precise: install_extra_debs install_extra_debs_precise
311 generic_ubuntu: install_debs debian_sys_config
312
313 # - COMMON TARGETS ---------------------------------------------------------
314
315 # Install the CPAN modules
316 install_cpan: 
317         for m in $(CPAN_MODULES); do perl -MCPAN -e "install \"$$m\";"; done
318
319 # Install CPAN modules that need to be forced
320 install_cpan_force: 
321         for m in $(CPAN_MODULES_FORCE); do perl -MCPAN -e "CPAN::Shell->force(qw#install $$m#);"; done
322
323 # Install the CPAN XML modules
324 install_cpan_xml: 
325         for m in $(CPAN_MODULES_XML); do perl -MCPAN -e "install \"$$m\";"; done
326
327 # Install ejabberd from official project installer binary
328 install_ejabberd:
329         if [ $(LBITS) -eq 64 ]; then \
330                 if [ ! -f $(EJABBERD_PKG_x64).gz ]; then \
331                         wget $(EJABBERD_HOST)/$(EJABBERD_VER)/$(EJABBERD_PKG_x64).gz; \
332                 fi; \
333                 gunzip $(EJABBERD_PKG_x64).gz; \
334                 chmod u+x $(EJABBERD_PKG_x64); \
335                 ./$(EJABBERD_PKG_x64) --mode unattended --prefix /opt/ejabberd --adminpw opensrf ; \
336         fi;
337         if [ $(LBITS) -eq 32 ]; then \
338                 if [ ! -f $(EJABBERD_PKG).gz ]; then \
339                         wget $(EJABBERD_HOST)/$(EJABBERD_VER)/$(EJABBERD_PKG).gz; \
340                 fi; \
341                 gunzip $(EJABBERD_PKG).gz; \
342                 chmod u+x $(EJABBERD_PKG); \
343                 ./$(EJABBERD_PKG) --mode unattended --prefix /opt/ejabberd --adminpw opensrf ; \
344         fi;
345
346 # Install rpmforge for redhat and centos
347 install_rpmforge:
348         if [ $(LBITS) -eq 64 ]; then \
349                 if [ ! -f $(RPMFORGE_PKG_x64) ]; then \
350                         wget $(RPMFORGE_HOST)/$(RPMFORGE_PKG_x64) ; \
351                         yum -y remove subversion*i386 ; \
352                 fi; \
353                 rpm -Uvh --force ./$(RPMFORGE_PKG_x64) ; \
354         fi;
355         if [ $(LBITS) -eq 32 ]; then \
356                 if [ ! -f $(RPMFORGE_PKG) ]; then \
357                         wget $(RPMFORGE_HOST)/$(RPMFORGE_PKG) ; \
358                 fi; \
359                 rpm -Uvh --force ./$(RPMFORGE_PKG) ; \
360         fi;
361         yum update -y
362
363 # Install automake, autoconf, and libtool
364 install_buildutils:
365         if [ ! -f $(LIBTOOL_PKG).tar.gz ]; then wget $(LIBTOOL_HOST)/$(LIBTOOL_PKG).tar.gz; fi;
366         tar zxf $(LIBTOOL_PKG).tar.gz
367         cd $(LIBTOOL_PKG) && ./configure --prefix=/usr && make && make install
368
369         if [ ! -f $(AUTOCONF_PKG).tar.gz ]; then wget $(AUTOCONF_HOST)/$(AUTOCONF_PKG).tar.gz; fi;
370         tar zxf $(AUTOCONF_PKG).tar.gz
371         cd $(AUTOCONF_PKG) && ./configure --prefix=/usr && make && make install
372         
373         if [ ! -f $(AUTOMAKE_PKG).tar.gz ]; then wget $(AUTOMAKE_HOST)/$(AUTOMAKE_PKG).tar.gz; fi;
374         tar zxf $(AUTOMAKE_PKG).tar.gz
375         cd $(AUTOMAKE_PKG) && ./configure --prefix=/usr && make && make install
376
377 # Install libmemcached from the official project source
378 install_libmemcached:
379         if [ ! -f $(LIBMEMCACHED).tar.gz ]; then wget $(LIBMEMCACHED_HOST)/$(LIBMEMCACHED).tar.gz; fi;
380         tar xzf $(LIBMEMCACHED).tar.gz
381         cd $(LIBMEMCACHED) && ./configure && make && make install
382
383 # Install a newer version of libxslt
384 install_libxslt:    
385         if [ ! -d $(XSLT) ]; then wget $(XSLT_HOST)/$(XSLT).tar.gz; fi;
386         tar xzf $(XSLT).tar.gz
387         cd $(XSLT) && ./configure --with-libxml-prefix=/usr/local && make && make install
388
389 # Install a newer version of libxml2
390 install_libxml2:    
391         if [ ! -d $(XML2) ]; then wget $(XML2_HOST)/$(XML2).tar.gz; fi;
392         tar xzf $(XML2).tar.gz
393         cd $(XML2) && ./configure && make && make install
394
395 clean:
396         make -C $(LIBJS_PERL) clean
397         make -C $(XML2) clean
398         make -C $(XSLT) clean
399         make -f Makefile.ref -C js/src/ clean
400
401
402 # ------------------------------------------------------------------
403 # - DEBIAN ---------------------------------------------------------
404
405 debian_sys_config: 
406         # link the apache modules in
407         for m in $(DEB_APACHE_MODS); do a2enmod $$m; done;
408
409         # adds a placeholder module so apxs will be happy
410         if [ ! "$$(grep mod_placeholder /etc/apache2/httpd.conf)" ]; then \
411                 echo -e "#\n#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so" \
412                         >> /etc/apache2/httpd.conf; \
413         fi;
414
415 # Install the debian-specific dependencies
416 install_debs:
417         $(APT_TOOL) install $(DEBS)
418
419 # Install the debian-specific dependencies for more modern distros
420 install_extra_debs:
421         $(APT_TOOL) install $(EXTRA_DEBS)
422
423 install_extra_debs_squeeze: install_extra_debs
424         $(APT_TOOL) install $(EXTRA_DEBS_SQUEEZE)
425
426 # Install even more packaged dependencies on modern distros
427 install_extra_debs_lucid:
428         $(APT_TOOL) install $(EXTRA_DEBS_UBUNTU_LUCID)
429
430 install_extra_debs_precise:
431         $(APT_TOOL) install $(EXTRA_DEBS_UBUNTU_PRECISE)
432
433 # Fedora
434 install_fedora_rpms:
435         yum -y install $(FEDORAS)
436
437 # CENTOS
438 install_centos_rpms:
439         yum -y install $(CENTOS)
440         yum -y update
441
442 install_centos_perl:
443         for m in $(CENTOS_PERL_FORCE); do perl -MCPAN -e "CPAN::Shell->force(qw#install $$m#);"; done
444         for m in $(CENTOS_PERL); do perl -MCPAN -e "install \"$$m\";"; done
445         for m in $(CENTOS_PERL_VERSION); do perl -MCPAN -e "CPAN::Shell->install \"$$m\";"; done
446         for m in $(CENTOS_PERL_NOTEST); do perl -MCPAN -e "CPAN::Shell->notest('install', \"$$m\";"; done
447         for m in $(CENTOS_PERL_LOCAL); do LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/lib perl -MCPAN -e "install \"$$m\";"; done
448
449 # We need to add /usr/local/lib to the ldconfig list of directories on CentOS,
450 # if it is not already there
451 create_ld_local:
452         if [ "$$(ldconfig -v 2> /dev/null | grep '^/usr/local/lib' | wc -l)" -eq 0 ]; then \
453                 echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf; \
454                 ldconfig; \
455         fi;
456
457 # vim:noet:sw=4:ts=4: