5b08a34921838b3ef9ab7814ab1d66ded995c129
[chef.git] / cookbooks / mediawiki / definitions / mediawiki_site.rb
1 #
2 # Cookbook Name:: web
3 # Definition:: mediawiki_site
4 #
5 # Copyright 2012, OpenStreetMap Foundation
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 #     http://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19
20 define :mediawiki_site, :action => [ :create, :enable ] do
21   name = params[:name]
22
23   #/etc/cron.d names cannot contain a dot
24   cron_name = name.tr(".", "_")
25
26   aliases = Array(params[:aliases])
27
28   site_directory = params[:directory] || "/srv/#{name}"
29
30   database_params = {
31     :host => params[:database_host] || "localhost",
32     :name => params[:database_name],
33     :username => params[:database_username],
34     :password => params[:database_password]
35   }
36
37   mediawiki_repository     = "git://github.com/wikimedia/mediawiki-core"
38   mediawiki_version        = params[:version] || "1.22"
39   mediawiki_reference      = "refs/heads/REL#{mediawiki_version}".tr(".", "_")
40
41   mediawiki = {
42     :directory         => "#{site_directory}/w",
43     :site              => name,
44     :sitename          => params[:sitename] || "OpenStreetMap Wiki",
45     :metanamespace     => params[:metanamespace] || "OpenStreetMap",
46     :logo              => params[:logo] || "$wgStylePath/common/images/wiki.png",
47     :email_contact     => params[:email_contact] || "",
48     :email_sender      => params[:email_sender] || "",
49     :email_sender_name => params[:email_sender_name] || "MediaWiki Mail",
50     :commons           => params[:commons] || TRUE,
51     :skin              => params[:skin] || "vector",
52     :site_notice       => params[:site_notice] || "",
53     :site_readonly     => params[:site_readonly] || FALSE,
54     :site_admin_user   => "Admin",
55     :site_admin_pw     => params[:admin_password],
56     :enable_ssl        => params[:enable_ssl] || FALSE,
57     :private_accounts  => params[:private_accounts] || FALSE,
58     :private           => params[:private] || FALSE,
59     :recaptcha_public  => params[:recaptcha_public_key],
60     :recaptcha_private => params[:recaptcha_private_key]
61   }
62
63 #----------------
64
65   node.set_unless[:mediawiki][:sites][name] = {}
66   node.set[:mediawiki][:sites][name][:site_directory] = site_directory
67   node.set[:mediawiki][:sites][name][:directory] = mediawiki[:directory]
68   node.set[:mediawiki][:sites][name][:version] = mediawiki_version
69   node.set_unless[:mediawiki][:sites][name][:wgSecretKey] = random_password(64)
70
71 #----------------
72
73   mysql_user "#{database_params[:username]}@localhost" do
74     password database_params[:password]
75   end
76
77   mysql_database database_params[:name] do
78     permissions "#{database_params[:username]}@localhost" => :all
79   end
80
81   ruby_block "rename-installer-localsettings" do
82     action :nothing
83     block do
84       ::File.rename("#{mediawiki[:directory]}/LocalSettings.php", "#{mediawiki[:directory]}/LocalSettings-install.php")
85     end
86   end
87
88   execute "#{mediawiki[:directory]}/maintenance/install.php" do
89     action :nothing
90     #Use metanamespace as Site Name to ensure correct set namespace
91     command "php maintenance/install.php --server '#{name}' --dbtype 'mysql' --dbname '#{database_params[:name]}' --dbuser '#{database_params[:username]}' --dbpass '#{database_params[:password]}' --dbserver '#{database_params[:host]}' --scriptpath /w --pass '#{mediawiki[:site_admin_pw]}' '#{mediawiki[:metanamespace]}' '#{mediawiki[:site_admin_user]}'"
92     cwd mediawiki[:directory]
93     user node[:mediawiki][:user]
94     group node[:mediawiki][:group]
95     not_if do
96       File.exist?("#{mediawiki[:directory]}/LocalSettings-install.php")
97     end
98     notifies :create, 'ruby_block[rename-installer-localsettings]', :immediately
99   end
100
101   execute "#{mediawiki[:directory]}/maintenance/update.php" do
102     action :nothing
103     command "php maintenance/update.php --quick"
104     cwd mediawiki[:directory]
105     user node[:mediawiki][:user]
106     group node[:mediawiki][:group]
107   end
108
109   directory "#{site_directory}" do
110     owner node[:mediawiki][:user]
111     group node[:mediawiki][:group]
112     mode 0775
113   end
114
115   directory "#{mediawiki[:directory]}" do
116     owner node[:mediawiki][:user]
117     group node[:mediawiki][:group]
118     mode 0775
119   end
120
121   git "#{mediawiki[:directory]}" do
122     action :sync
123     repository mediawiki_repository
124     reference mediawiki_reference
125     #depth 1
126     user node[:mediawiki][:user]
127     group node[:mediawiki][:group]
128     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/install.php"), :immediately
129     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/update.php")
130   end
131
132   #Safety catch if git doesn't update but install.php hasn't run
133   ruby_block "catch-installer-localsettings-run" do
134     block do
135       #
136     end
137     not_if do
138       File.exist?("#{mediawiki[:directory]}/LocalSettings-install.php")
139     end
140     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/install.php"), :immediately
141     action :create
142   end
143
144   directory "#{mediawiki[:directory]}/images" do
145     owner "www-data"
146     group "wiki"
147     mode 0775
148   end
149
150   directory "#{mediawiki[:directory]}/cache" do
151     owner "www-data"
152     group "wiki"
153     mode 0775
154   end
155
156   directory "#{mediawiki[:directory]}/LocalSettings.d" do
157     user node[:mediawiki][:user]
158     group node[:mediawiki][:group]
159     mode 0775
160   end
161
162   template "#{mediawiki[:directory]}/LocalSettings.php" do
163     cookbook "mediawiki"
164     source "LocalSettings.php.erb"
165     owner node[:mediawiki][:user]
166     group node[:mediawiki][:group]
167     mode 0664
168     variables({
169       :name => name,
170       :database_params => database_params,
171       :mediawiki => mediawiki
172     })
173     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/update.php")
174   end
175
176   template "/etc/cron.d/mediawiki-#{cron_name}" do
177     cookbook "mediawiki"
178     source "mediawiki.cron.erb"
179     owner "root"
180     group "root"
181     mode 0644
182     variables({
183       :name => name,
184       :directory => site_directory,
185       :user => node[:mediawiki][:user]
186     })
187   end
188
189   template "/etc/cron.daily/mediawiki-#{cron_name}-backup" do
190     cookbook "mediawiki"
191     source "mediawiki-backup.cron.erb"
192     owner "root"
193     group "root"
194     mode 0700
195     variables({
196       :name => name,
197       :directory => site_directory,
198       :database_params => database_params
199     })
200   end
201
202   #MediaWiki Default Extension
203
204   mediawiki_extension "Cite" do
205     site name
206     template "mw-ext-Cite.inc.php.erb"
207   end
208
209   mediawiki_extension "ConfirmEdit" do
210     site name
211     template "mw-ext-ConfirmEdit.inc.php.erb"
212     variables :public_key => mediawiki[:recaptcha_public],
213               :private_key => mediawiki[:recaptcha_private]
214   end
215
216   mediawiki_extension "Gadgets" do
217     site name
218   end
219
220   mediawiki_extension "ImageMap" do
221     site name
222   end
223
224   mediawiki_extension "InputBox" do
225     site name
226   end
227
228   mediawiki_extension "Interwiki" do
229     site name
230   end
231
232   # "LocalisationUpdate" part of Language Extension Bundle, bundled per site
233
234   mediawiki_extension "Nuke" do
235     site name
236   end
237
238   mediawiki_extension "ParserFunctions" do
239     site name
240     template "mw-ext-ParserFunctions.inc.php.erb"
241   end
242
243   mediawiki_extension "PdfHandler" do
244     site name
245     template "mw-ext-PdfHandler.inc.php.erb"
246   end
247
248   mediawiki_extension "Poem" do
249     site name
250   end
251
252   mediawiki_extension "Renameuser" do
253     site name
254   end
255
256   mediawiki_extension "SimpleAntiSpam" do
257     site name
258   end
259
260   mediawiki_extension "SpamBlacklist" do
261     site name
262     template "mw-ext-SpamBlacklist.inc.php.erb"
263   end
264
265   mediawiki_extension "SyntaxHighlight_GeSHi" do
266     site name
267   end
268
269   mediawiki_extension "TitleBlacklist" do
270     site name
271     template "mw-ext-TitleBlacklist.inc.php.erb"
272   end
273
274   mediawiki_extension "WikiEditor" do
275     site name
276   end
277
278   # MediaWiki Language Extension Bundle
279   #fixme should automatically resolve tag
280   mw_lang_ext_bundle_tag = "2014.09"
281
282   mediawiki_extension "Babel" do
283     site name
284     template "mw-ext-Babel.inc.php.erb"
285     tag mw_lang_ext_bundle_tag
286   end
287
288   mediawiki_extension "cldr" do
289     site name
290     tag mw_lang_ext_bundle_tag
291   end
292
293   mediawiki_extension "CleanChanges" do
294     site name
295     template "mw-ext-CleanChanges.inc.php.erb"
296     tag mw_lang_ext_bundle_tag
297   end
298
299   mediawiki_extension "LocalisationUpdate" do
300     site name
301     template "mw-ext-LocalisationUpdate.inc.php.erb"
302     tag mw_lang_ext_bundle_tag
303   end
304
305   #LocalisationUpdate Update Cron
306   #template "/etc/cron.d/mediawiki-#{name}-LocalisationUpdate" do
307   #  cookbook "mediawiki"
308   #  source "mediawiki-LocalisationUpdate.cron.erb"
309   #  owner "root"
310   #  group "root"
311   #  mode 0755
312   #  variables({
313   #    :name => name,
314   #    :directory => site_directory,
315   #    :user => node[:mediawiki][:user]
316   #  })
317   #end
318
319   #mediawiki_extension "Translate" do
320   #  site name
321   #  template "mw-ext-Translate.inc.php.erb"
322   #  tag mw_lang_ext_bundle_tag
323   #end
324
325   mediawiki_extension "UniversalLanguageSelector" do
326     site name
327     tag mw_lang_ext_bundle_tag
328   end
329
330   # Global Extra Mediawiki Extensions
331
332   mediawiki_extension "AntiSpoof" do
333     site name
334   end
335
336   mediawiki_extension "AbuseFilter" do
337     site name
338     template "mw-ext-AbuseFilter.inc.php.erb"
339   end
340
341   mediawiki_extension "CheckUser" do
342     site name
343     template "mw-ext-CheckUser.inc.php.erb"
344   end
345
346   mediawiki_extension "DismissableSiteNotice" do
347     site name
348   end
349
350   mediawiki_extension "Elastica" do
351     site name
352   end
353
354   mediawiki_extension "CirrusSearch" do
355     site name
356     template "mw-ext-CirrusSearch.inc.php.erb"
357   end
358
359   #OSM specifc extensions
360
361   mediawiki_extension "osmtaginfo" do
362     site name
363     repository "git://github.com/Firefishy/osmtaginfo.git"
364     tag "live"
365   end
366   mediawiki_extension "SimpleMap" do
367     site name
368     repository "git://github.com/Firefishy/SimpleMap.git"
369     tag "live"
370   end
371
372   mediawiki_extension "SlippyMap" do
373     site name
374     repository "git://github.com/Firefishy/SlippyMap.git"
375     tag "live"
376   end
377
378   cookbook_file "#{site_directory}/cc-wiki.png" do
379     cookbook "mediawiki"
380     owner node[:mediawiki][:user]
381     group node[:mediawiki][:group]
382     mode 0644
383     backup false
384   end
385
386   cookbook_file "#{site_directory}/googled06a989d1ccc8364.html" do
387     cookbook "mediawiki"
388     owner node[:mediawiki][:user]
389     group node[:mediawiki][:group]
390     mode 0644
391     backup false
392   end
393
394   cookbook_file "#{site_directory}/googlefac54c35e800caab.html" do
395     cookbook "mediawiki"
396     owner node[:mediawiki][:user]
397     group node[:mediawiki][:group]
398     mode 0644
399     backup false
400   end
401
402   apache_site name do
403     cookbook "mediawiki"
404     template "apache.erb"
405     directory site_directory
406     variables({
407       :aliases => aliases,
408       :mediawiki => mediawiki
409     })
410     notifies :reload, "service[apache2]"
411   end
412
413   #Fixme - Needs to run once
414   execute "#{mediawiki[:directory]}/extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php" do
415     action :nothing
416     command "php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php"
417     cwd mediawiki[:directory]
418     user node[:mediawiki][:user]
419     group node[:mediawiki][:group]
420   end
421
422 end