]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/extras/Makefile.install
Let's give OpenSRF a spin on Ubuntu Karmic
[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 # libmemcache is not packaged on CentOS/RHEL
55 LIBMEMCACHE=libmemcache-1.4.0.rc2
56 LIBMEMCACHE_HOST=http://people.freebsd.org/~seanc/libmemcache/
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         libmemcache-dev\
89         libmodule-build-perl\
90         libnet-jabber-perl\
91         libperl-dev\
92         libreadline5-dev\
93         librpc-xml-perl\
94         libtemplate-perl\
95         libtest-pod-perl\
96         libtie-ixhash-perl\
97         libtool\
98         libuniversal-require-perl\
99         libunix-syslog-perl\
100         libwww-perl\
101         libxml2-dev\
102         libxml-libxml-perl\
103         libxml-libxslt-perl\
104         libxml-simple-perl\
105         libxslt1-dev\
106         memcached\
107         ntpdate\
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         libmemcache\
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         libxml-libxml-perl \
209         libxml-libxslt-perl
210
211 # generic CPAN modules:
212 #   * DateTime::Format::ISO8601 is packaged by both Debian Lenny and Ubuntu Intrepid
213 #   * JSON::XS is packaged by both Debian Lenny and Ubuntu Intrepid
214 #   * libnet-server-perl 0.97 is packaged on Debian Lenny and Ubuntu Intrepid
215 #     - is there a specific need for 0.90?
216 CPAN_MODULES = \
217         DateTime::Format::ISO8601 \
218         RHANDOM/Net-Server-0.90.tar.gz \
219         JSON::XS
220
221 #   libxml-libxml-perl on Debian Lenny and Ubuntu Intrepid is 1.66, which
222 #   has broken namespace handling. so we still need to install these from
223 #   CPAN. *sigh*
224 CPAN_MODULES_XML = \
225         XML::LibXML \
226         XML::LibXSLT
227
228 # generic CPAN modules to force
229 CPAN_MODULES_FORCE = \
230         TMTM/Class-DBI-0.96.tar.gz
231
232 # ----------------------------------------------------------------------------
233
234 all: 
235         @echo "please specify an OS" && exit 0
236
237
238 centos: install_centos_rpms install_ejabberd install_libmemcache install_libxml2 install_libxslt install_centos_perl create_ld_local
239
240 debian-etch: generic_debian etch
241 debian-lenny: generic_debian lenny
242 etch: install_cpan
243 lenny: install_extra_debs
244 generic_debian: install_debs install_cpan_force install_cpan_xml debian_sys_config
245
246 gentoo: install_gentoos install_gentoo_rc install_gentoo_perl install
247
248 rhel: centos
249
250 ubuntu-gutsy: generic_ubuntu install_cpan_xml hardy 
251 ubuntu-hardy: generic_ubuntu install_cpan_xml hardy
252 ubuntu-intrepid: generic_ubuntu install_cpan_xml intrepid
253 ubuntu-karmic: generic_ubuntu karmic
254 hardy: install_cpan
255 intrepid: install_extra_debs
256 karmic: install_extra_debs install_extra_debs_karmic
257 generic_ubuntu: install_debs install_cpan_force debian_sys_config
258
259 # - COMMON TARGETS ---------------------------------------------------------
260
261 # Install the CPAN modules
262 install_cpan: 
263         for m in $(CPAN_MODULES); do perl -MCPAN -e "install \"$$m\";"; done
264
265 # Install CPAN modules that need to be forced
266 install_cpan_force: 
267         for m in $(CPAN_MODULES_FORCE); do perl -MCPAN -e "CPAN::Shell->force(qw#install $$m#);"; done
268
269 # Install the CPAN XML modules
270 install_cpan_xml: 
271         for m in $(CPAN_MODULES_XML); do perl -MCPAN -e "install \"$$m\";"; done
272
273 # Install ejabberd from official project installer binary
274 install_ejabberd:    
275         if [ ! -f $(EJABBERD_PKG).gz ]; then wget $(EJABBERD_HOST)/$(EJABBERD_VER)/$(EJABBERD_PKG).gz; fi;
276         gunzip $(EJABBERD_PKG).gz
277         chmod u+x $(EJABBERD_PKG)
278         ./$(EJABBERD_PKG) --mode unattended --prefix /opt/ejabberd --adminpw opensrf
279
280 # Install libmemcache from the official project source
281 install_libmemcache:
282         if [ ! -d $(LIBMEMCACHE) ]; then wget $(LIBMEMCACHE_HOST)/$(LIBMEMCACHE).tar.bz2; fi;
283         tar xjf $(LIBMEMCACHE).tar.bz2
284         cd $(LIBMEMCACHE) && ./configure && make && make install
285
286 # Install a newer version of libxslt
287 install_libxslt:    
288         if [ ! -d $(XSLT) ]; then wget $(XSLT_HOST)/$(XSLT).tar.gz; fi;
289         tar xzf $(XSLT).tar.gz
290         cd $(XSLT) && ./configure --with-libxml-prefix=/usr/local && make && make install
291
292 # Install a newer version of libxml2
293 install_libxml2:    
294         if [ ! -d $(XML2) ]; then wget $(XML2_HOST)/$(XML2).tar.gz; fi;
295         tar xzf $(XML2).tar.gz
296         cd $(XML2) && ./configure && make && make install
297
298 clean:
299         make -C $(LIBJS_PERL) clean
300         make -C $(XML2) clean
301         make -C $(XSLT) clean
302         make -f Makefile.ref -C js/src/ clean
303
304
305 # ------------------------------------------------------------------
306 # - DEBIAN ---------------------------------------------------------
307
308 debian_sys_config: 
309         # link the apache modules in
310         for m in $(DEB_APACHE_MODS); do a2enmod $$m; done;
311
312         # adds a placeholder module so apxs will be happy
313         if [ ! "$$(grep mod_placeholder /etc/apache2/httpd.conf)" ]; then \
314                 echo -e "#\n#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so" \
315                         >> /etc/apache2/httpd.conf; \
316         fi;
317
318 # Install the debian-specific dependencies
319 install_debs:
320         $(APT_TOOL) install $(DEBS)
321
322 # Install the debian-specific dependencies for more modern distros
323 install_extra_debs:
324         $(APT_TOOL) install $(EXTRA_DEBS)
325
326 # Install even more packaged dependencies on modern distros
327 install_extra_debs_karmic:
328         $(APT_TOOL) install $(EXTRA_DEBS_UBUNTU_KARMIC)
329
330 # ------------------------------------------------------------------
331 # - GENTOO ---------------------------------------------------------
332
333 install_gentoos:
334         emerge -n $(GENTOOS)
335
336 install_gentoo_rc:
337         for m in $(GENTOO_RC); do rc-update add $$m default; done;
338
339 install_gentoo_perl:
340         for m in $(GENTOO_PERL); do perl -MCPAN -e "install \"$$m\";"; done
341
342 # ------------------------------------------------------------------
343
344 # CENTOS
345 install_centos_rpms:
346         yum -y install $(CENTOS)
347
348 install_centos_perl:
349         for m in $(CENTOS_PERL_FORCE); do perl -MCPAN -e "CPAN::Shell->force(qw#install $$m#);"; done
350         for m in $(CENTOS_PERL); do perl -MCPAN -e "install \"$$m\";"; done
351         for m in $(CENTOS_PERL_VERSION); do perl -MCPAN -e "CPAN::Shell->install \"$$m\";"; done
352         for m in $(CENTOS_PERL_NOTEST); do perl -MCPAN -e "CPAN::Shell->notest('install', \"$$m\";"; done
353         for m in $(CENTOS_PERL_LOCAL); do LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/lib perl -MCPAN -e "install \"$$m\";"; done
354
355 # We need to add /usr/local/lib to the ldconfig list of directories on CentOS,
356 # if it is not already there
357 create_ld_local:
358         if [ "$$(ldconfig -v 2> /dev/null | grep '^/usr/local/lib' | wc -l)" -eq 0 ]; then \
359                 echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf; \
360                 ldconfig; \
361         fi;
362
363 # vim:noet:sw=4:ts=4: