So. libmemcached has only been packaged on really fresh distros. Install from source...
[OpenSRF.git] / src / extras / Makefile.install
1 # ---------------------------------------------------------------------
2 # Author: Bill Erickson <erickson@esilibrary.com>
3 #
4 # Makefile to install prerequisites for OpenSRF
5 #
6 # Currently supports Debian (etch/lenny), Ubuntu (gutsy/hardy/intrepid/karmic), and Gentoo.
7 # Working towards support of CentOS 5 / RHEL 5.
8 # Installs Perl prereqs, libjs with Perl wrapper
9 #
10 # usage:
11 #       make -f Makefile.install debian-etch
12 #       - or -
13 #       make -f Makefile.install debian-lenny
14 #       - or -
15 #       make -f Makefile.install ubuntu-gutsy
16 #       - or -
17 #       make -f Makefile.install ubuntu-hardy
18 #       - or -
19 #       make -f Makefile.install ubuntu-intrepid
20 #       - or -
21 #       make -f Makefile.install ubuntu-karmic
22 #       - or -
23 #       make -f Makefile.install centos
24 #       - or -
25 #       make -f Makefile.install rhel
26 #       - or -
27 #       make -f Makefile.install gentoo
28 #
29 # Notes:
30 #
31 #       This makefile has been tested much more with Ubuntu and Debian than
32 #   CentOS, Gentoo, or RHEL.
33 #
34 #       Gentoo (especially amd64) requires a good bit of masked package
35 #       mangling for some packages.  These are not documented here because
36 #       they will continue to evolve
37 #
38 # ---------------------------------------------------------------------
39
40 # Make any assumptions about the shell being used explicit
41 SHELL=/bin/bash 
42
43 # XXX
44 # Gentoo needs explicit versions on many of these packages
45 # to simulate a "blessed" set of packages
46
47 # ejabberd is not packaged on CentOS/RHEL, so we have to
48 # download the installable package from the source
49 EJABBERD_VER=2.0.2
50 EJABBERD_PKG=ejabberd-2.0.2_2-linux-x86-installer.bin
51 EJABBERD_PKG_x64=ejabberd-2.0.2_2-linux-x86_64-installer.bin
52 EJABBERD_HOST=http://www.process-one.net/downloads/ejabberd
53
54 # libmemcached is only packaged on newer distros
55 LIBMEMCACHED=libmemcached-0.35
56 LIBMEMCACHED_HOST=http://download.tangent.org
57
58 # XML::LibXSLT fails due to old libxslt
59 XSLT=libxslt-1.1.22
60 XSLT_HOST=ftp://ftp.gnome.org/pub/GNOME/sources/libxslt/1.1
61
62 # libxslt depends on a newer version of libxml2:
63 XML2=libxml2-2.6.30
64 XML2_HOST=ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6
65
66 APT_TOOL=aptitude -yq
67
68 # Debian dependencies
69 DEBS =  \
70         apache2-mpm-prefork\
71         apache2-prefork-dev\
72         autoconf\
73         automake\
74         build-essential\
75         ejabberd\
76         less\
77         libapache2-mod-perl2\
78         libcache-memcached-perl\
79         libclass-dbi-abstractsearch-perl\
80         libclass-dbi-sqlite-perl\
81         liberror-perl\
82         libexpat1-dev\
83         libfile-find-rule-perl\
84         libfreezethaw-perl\
85         libgcrypt11-dev \
86         libgdbm-dev \
87         liblog-log4perl-perl\
88         libmodule-build-perl\
89         libnet-jabber-perl\
90         libperl-dev\
91         libreadline5-dev\
92         librpc-xml-perl\
93         libtemplate-perl\
94         libtest-pod-perl\
95         libtie-ixhash-perl\
96         libtool\
97         libuniversal-require-perl\
98         libunix-syslog-perl\
99         libwww-perl\
100         libxml2-dev\
101         libxml-libxml-perl\
102         libxml-libxslt-perl\
103         libxml-simple-perl\
104         libxslt1-dev\
105         memcached\
106         ntpdate\
107         pkg-config\
108         psmisc\
109         python-dev\
110         python-libxml2\
111         python-setuptools
112
113 CENTOS = \
114         apr-util-devel \
115         autoconf \
116         automake \
117         gcc \
118         gdbm-devel \
119         httpd-devel \
120         less \
121         libtool \
122         libxml2-devel \
123         libxslt-devel \
124         make \
125         mod_perl \
126         mod_ssl \
127         ncurses \
128         ncurses-devel \
129         ntp \
130         perl-DBI \
131         perl-XML-LibXML \
132         perl-XML-Simple \
133         perl-libwww-perl \
134         psmisc \
135         python-devel \
136         python-setuptools\
137         readline-devel \
138         wget
139
140 # Some of these packages have stupid bugs in their test suites
141 # that are simply too painful to workaround
142 CENTOS_PERL_NOTEST = \
143         RPC::XML
144
145 CENTOS_PERL_LOCAL = \
146         XML-LibXSLT
147
148 CENTOS_PERL = \
149         Cache::Memcached \
150         Class::DBI::AbstractSearch \
151         Class::DBI::SQLite \
152         Error \
153         File::Find::Rule \
154         FreezeThaw \
155         Log::Log4perl \
156         Net::Jabber \
157         Template \
158         Test::Pod \
159         Tie::IxHash \
160         Unix::Syslog \
161         UNIVERSAL::require \
162         XML::LibXSLT
163
164 GENTOOS = \
165         vim\
166         ntp\
167         memcached\
168         libmemcached\
169         net-misc/telnet-bsd\
170         app-portage/gentoolkit\
171         gsasl\
172         ejabberd\
173         mod_perl\
174         net-fs/nfs-utils\
175         dev-libs/apr\
176         dev-perl/Cache-Memcached\
177         dev-perl/DBI\
178         dev-perl/Log-Log4perl\
179         dev-perl/Unix-Syslog\
180         dev-perl/XML-LibXML\
181         dev-perl/XML-LibXSLT\
182         dev-perl/XML-Simple\
183         dev-perl/Net-Jabber\
184         dev-perl/libwww-perl\
185         dev-perl/Template-Toolkit\
186         dev-perl/Error\
187         dev-perl/Tie-IxHash\
188         dev-perl/FreezeThaw
189
190 GENTOO_RC = \
191         ejabberd\
192         memcached\
193         portmap
194
195 GENTOO_PERL = \
196         Class::DBI::AbstractSearch\
197         UNIVERSAL::require
198
199 DEB_APACHE_MODS = \
200         ssl
201
202 EXTRA_DEBS = \
203         libdatetime-format-iso8601-perl \
204         libjson-xs-perl \
205         libnet-server-perl
206
207 EXTRA_DEBS_UBUNTU_KARMIC = \
208         libmemcached-dev\
209         libxml-libxml-perl \
210         libxml-libxslt-perl
211
212 # generic CPAN modules:
213 #   * DateTime::Format::ISO8601 is packaged by both Debian Lenny and Ubuntu Intrepid
214 #   * JSON::XS is packaged by both Debian Lenny and Ubuntu Intrepid
215 #   * libnet-server-perl 0.97 is packaged on Debian Lenny and Ubuntu Intrepid
216 #     - is there a specific need for 0.90?
217 CPAN_MODULES = \
218         DateTime::Format::ISO8601 \
219         RHANDOM/Net-Server-0.90.tar.gz \
220         JSON::XS
221
222 #   libxml-libxml-perl on Debian Lenny and Ubuntu Intrepid is 1.66, which
223 #   has broken namespace handling. so we still need to install these from
224 #   CPAN. *sigh*
225 CPAN_MODULES_XML = \
226         XML::LibXML \
227         XML::LibXSLT
228
229 # generic CPAN modules to force
230 CPAN_MODULES_FORCE = \
231         TMTM/Class-DBI-0.96.tar.gz
232
233 # ----------------------------------------------------------------------------
234
235 all: 
236         @echo "please specify an OS" && exit 0
237
238
239 centos: install_centos_rpms install_ejabberd install_libmemcached install_libxml2 install_libxslt install_centos_perl create_ld_local
240
241 debian-etch: generic_debian etch install_libmemcached
242 debian-lenny: generic_debian lenny install_libmemcached
243 etch: install_cpan
244 lenny: install_extra_debs
245 generic_debian: install_debs install_cpan_force install_cpan_xml debian_sys_config
246
247 gentoo: install_gentoos install_gentoo_rc install_gentoo_perl install
248
249 rhel: centos
250
251 ubuntu-gutsy: generic_ubuntu install_cpan_xml hardy 
252 ubuntu-hardy: generic_ubuntu install_cpan_xml hardy
253 ubuntu-intrepid: generic_ubuntu install_cpan_xml intrepid
254 ubuntu-karmic: generic_ubuntu karmic
255 hardy: install_cpan install_libmemcached 
256 intrepid: install_extra_debs install_libmemcached 
257 karmic: install_extra_debs install_extra_debs_karmic
258 generic_ubuntu: install_debs install_cpan_force debian_sys_config
259
260 # - COMMON TARGETS ---------------------------------------------------------
261
262 # Install the CPAN modules
263 install_cpan: 
264         for m in $(CPAN_MODULES); do perl -MCPAN -e "install \"$$m\";"; done
265
266 # Install CPAN modules that need to be forced
267 install_cpan_force: 
268         for m in $(CPAN_MODULES_FORCE); do perl -MCPAN -e "CPAN::Shell->force(qw#install $$m#);"; done
269
270 # Install the CPAN XML modules
271 install_cpan_xml: 
272         for m in $(CPAN_MODULES_XML); do perl -MCPAN -e "install \"$$m\";"; done
273
274 # Install ejabberd from official project installer binary
275 install_ejabberd:    
276         if [ ! -f $(EJABBERD_PKG).gz ]; then wget $(EJABBERD_HOST)/$(EJABBERD_VER)/$(EJABBERD_PKG).gz; fi;
277         gunzip $(EJABBERD_PKG).gz
278         chmod u+x $(EJABBERD_PKG)
279         ./$(EJABBERD_PKG) --mode unattended --prefix /opt/ejabberd --adminpw opensrf
280
281 # Install libmemcached from the official project source
282 install_libmemcached:
283         @echo "TODO: work out how to build or grab libmemcached packages for CentOS/RHEL"
284         if [ ! -d $(LIBMEMCACHED).tar.gz ]; then wget $(LIBMEMCACHED_HOST)/$(LIBMEMCACHED).tar.gz; fi;
285         tar xzf $(LIBMEMCACHED).tar.gz
286         cd $(LIBMEMCACHED) && ./configure && make && make install
287         
288
289 # Install a newer version of libxslt
290 install_libxslt:    
291         if [ ! -d $(XSLT) ]; then wget $(XSLT_HOST)/$(XSLT).tar.gz; fi;
292         tar xzf $(XSLT).tar.gz
293         cd $(XSLT) && ./configure --with-libxml-prefix=/usr/local && make && make install
294
295 # Install a newer version of libxml2
296 install_libxml2:    
297         if [ ! -d $(XML2) ]; then wget $(XML2_HOST)/$(XML2).tar.gz; fi;
298         tar xzf $(XML2).tar.gz
299         cd $(XML2) && ./configure && make && make install
300
301 clean:
302         make -C $(LIBJS_PERL) clean
303         make -C $(XML2) clean
304         make -C $(XSLT) clean
305         make -f Makefile.ref -C js/src/ clean
306
307
308 # ------------------------------------------------------------------
309 # - DEBIAN ---------------------------------------------------------
310
311 debian_sys_config: 
312         # link the apache modules in
313         for m in $(DEB_APACHE_MODS); do a2enmod $$m; done;
314
315         # adds a placeholder module so apxs will be happy
316         if [ ! "$$(grep mod_placeholder /etc/apache2/httpd.conf)" ]; then \
317                 echo -e "#\n#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so" \
318                         >> /etc/apache2/httpd.conf; \
319         fi;
320
321 # Install the debian-specific dependencies
322 install_debs:
323         $(APT_TOOL) install $(DEBS)
324
325 # Install the debian-specific dependencies for more modern distros
326 install_extra_debs:
327         $(APT_TOOL) install $(EXTRA_DEBS)
328
329 # Install even more packaged dependencies on modern distros
330 install_extra_debs_karmic:
331         $(APT_TOOL) install $(EXTRA_DEBS_UBUNTU_KARMIC)
332
333 # ------------------------------------------------------------------
334 # - GENTOO ---------------------------------------------------------
335
336 install_gentoos:
337         emerge -n $(GENTOOS)
338
339 install_gentoo_rc:
340         for m in $(GENTOO_RC); do rc-update add $$m default; done;
341
342 install_gentoo_perl:
343         for m in $(GENTOO_PERL); do perl -MCPAN -e "install \"$$m\";"; done
344
345 # ------------------------------------------------------------------
346
347 # CENTOS
348 install_centos_rpms:
349         yum -y install $(CENTOS)
350
351 install_centos_perl:
352         for m in $(CENTOS_PERL_FORCE); do perl -MCPAN -e "CPAN::Shell->force(qw#install $$m#);"; done
353         for m in $(CENTOS_PERL); do perl -MCPAN -e "install \"$$m\";"; done
354         for m in $(CENTOS_PERL_VERSION); do perl -MCPAN -e "CPAN::Shell->install \"$$m\";"; done
355         for m in $(CENTOS_PERL_NOTEST); do perl -MCPAN -e "CPAN::Shell->notest('install', \"$$m\";"; done
356         for m in $(CENTOS_PERL_LOCAL); do LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/lib perl -MCPAN -e "install \"$$m\";"; done
357
358 # We need to add /usr/local/lib to the ldconfig list of directories on CentOS,
359 # if it is not already there
360 create_ld_local:
361         if [ "$$(ldconfig -v 2> /dev/null | grep '^/usr/local/lib' | wc -l)" -eq 0 ]; then \
362                 echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf; \
363                 ldconfig; \
364         fi;
365
366 # vim:noet:sw=4:ts=4: