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