Move mediawiki + wiki cookbook to public repo
[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   passwords = data_bag_item("mediawiki", "passwords")
42
43   mediawiki = {
44     :directory        => "#{site_directory}/w",
45     :site             => name,
46     :sitename         => params[:sitename] || "OpenStreetMap Wiki",
47     :metanamespace    => params[:metanamespace] || "OpenStreetMap",
48     :logo             => params[:logo] || "$wgStylePath/common/images/wiki.png",
49     :email_contact    => params[:email_contact] || "",
50     :email_sender     => params[:email_sender] || "",
51     :email_sender_name => params[:email_sender_name] || "MediaWiki Mail", 
52     :commons          => params[:commons] || TRUE,
53     :skin             => params[:skin] || "vector",
54     :site_notice      => params[:site_notice] || "",
55     :site_readonly    => params[:site_readonly] || FALSE,
56     :site_admin_user  => "Admin",
57     :site_admin_pw    => passwords["mediawiki-admin-user"],
58     :enable_ssl       => params[:enable_ssl] || FALSE
59   }
60
61 #----------------
62
63   node.set_unless[:mediawiki][:sites][name] = {}
64   node.set[:mediawiki][:sites][name][:site_directory] = site_directory
65   node.set[:mediawiki][:sites][name][:directory] = mediawiki[:directory]
66   node.set[:mediawiki][:sites][name][:version] = mediawiki_version
67   node.set_unless[:mediawiki][:sites][name][:wgSecretKey] = random_password(64)
68
69 #----------------
70
71   mysql_user "#{database_params[:username]}@localhost" do
72     password database_params[:password]
73   end
74
75   mysql_database database_params[:name] do
76     permissions "#{database_params[:username]}@localhost" => :all
77   end
78
79   ruby_block "rename-installer-localsettings" do
80     action :nothing
81     block do
82       ::File.rename("#{mediawiki[:directory]}/LocalSettings.php","#{mediawiki[:directory]}/LocalSettings-install.php")
83     end
84   end
85
86   execute "#{mediawiki[:directory]}/maintenance/install.php" do
87     action :nothing
88     #Use metanamespace as Site Name to ensure correct set namespace
89     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]}'"
90     cwd mediawiki[:directory]
91     user node[:mediawiki][:user]
92     group node[:mediawiki][:group]
93     not_if do
94       File.exists?("#{mediawiki[:directory]}/LocalSettings-install.php")
95     end
96     notifies :create, 'ruby_block[rename-installer-localsettings]', :immediately
97   end
98
99   execute "#{mediawiki[:directory]}/maintenance/update.php" do
100     action :nothing
101     command "php maintenance/update.php --quick"
102     cwd mediawiki[:directory]
103     user node[:mediawiki][:user]
104     group node[:mediawiki][:group]
105   end
106
107   directory "#{site_directory}" do
108     owner node[:mediawiki][:user]
109     group node[:mediawiki][:group]
110     mode 0775
111   end
112
113   directory "#{mediawiki[:directory]}" do
114     owner node[:mediawiki][:user]
115     group node[:mediawiki][:group]
116     mode 0775
117   end
118
119   git "#{mediawiki[:directory]}" do
120     action :sync
121     repository mediawiki_repository
122     reference mediawiki_reference
123     depth 1
124     user node[:mediawiki][:user]
125     group node[:mediawiki][:group]
126     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/install.php"), :immediately
127     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/update.php")
128   end
129
130   #Safety catch if git doesn't update but install.php hasn't run
131   ruby_block "catch-installer-localsettings-run" do
132     block do
133       #
134     end
135     not_if do
136       File.exists?("#{mediawiki[:directory]}/LocalSettings-install.php")
137     end
138     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/install.php"), :immediately
139     action :create
140   end
141
142   directory "#{mediawiki[:directory]}/images" do
143     owner "www-data"
144     group "wiki"
145     mode 0775
146   end
147
148   directory "#{mediawiki[:directory]}/cache" do
149     owner "www-data"
150     group "wiki"
151     mode 0775
152   end
153
154   directory "#{mediawiki[:directory]}/LocalSettings.d" do
155     user node[:mediawiki][:user]
156     group node[:mediawiki][:group]
157     mode 0775
158   end
159
160   template "#{mediawiki[:directory]}/LocalSettings.php" do
161     cookbook "mediawiki"
162     source "LocalSettings.php.erb"
163     owner node[:mediawiki][:user]
164     group node[:mediawiki][:group]
165     mode 0664
166     variables({
167       :name => name,
168       :database_params => database_params,
169       :mediawiki => mediawiki
170     })
171     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/update.php")
172   end
173
174   template "/etc/cron.d/mediawiki-#{cron_name}" do
175     cookbook "mediawiki"
176     source "mediawiki.cron.erb"
177     owner "root"
178     group "root"
179     mode 0644
180     variables({
181       :name => name,
182       :directory => site_directory,
183       :user => node[:mediawiki][:user]
184     })
185   end
186
187   template "/etc/cron.daily/mediawiki-#{cron_name}-backup" do
188     cookbook "mediawiki"
189     source "mediawiki-backup.cron.erb"
190     owner "root"
191     group "root"
192     mode 0700
193     variables({
194       :name => name,
195       :directory => site_directory,
196       :database_params => database_params
197     })
198   end
199
200   #MediaWiki Default Extension
201
202   mediawiki_extension "Cite" do
203     site name
204     template "mw-ext-Cite.inc.php.erb"    
205   end
206
207   mediawiki_extension "ConfirmEdit" do
208     site name
209     template "mw-ext-ConfirmEdit.inc.php.erb"
210   end
211
212   mediawiki_extension "Gadgets" do
213     site name
214   end
215
216   mediawiki_extension "ImageMap" do
217     site name
218   end
219
220   mediawiki_extension "InputBox" do
221     site name
222   end
223
224   mediawiki_extension "Interwiki" do
225     site name
226   end
227
228   # "LocalisationUpdate" part of Language Extension Bundle, bundled per site
229
230   mediawiki_extension "Nuke" do
231     site name
232   end
233
234   mediawiki_extension "ParserFunctions" do
235     site name
236     template "mw-ext-ParserFunctions.inc.php.erb"
237   end
238
239   mediawiki_extension "PdfHandler" do
240     site name
241     template "mw-ext-PdfHandler.inc.php.erb"
242   end
243
244   mediawiki_extension "Poem" do
245     site name
246   end
247
248   mediawiki_extension "Renameuser" do
249     site name
250   end
251
252   mediawiki_extension "SimpleAntiSpam" do
253     site name
254   end
255
256   mediawiki_extension "SpamBlacklist" do
257     site name
258     template "mw-ext-SpamBlacklist.inc.php.erb"
259   end
260
261   mediawiki_extension "SyntaxHighlight_GeSHi" do
262     site name
263   end
264
265   mediawiki_extension "TitleBlacklist" do
266     site name
267     template "mw-ext-TitleBlacklist.inc.php.erb"
268   end
269
270   mediawiki_extension "WikiEditor" do
271     site name
272   end
273
274   # MediaWiki Language Extension Bundle
275   #fixme should automatically resolve tag
276   mw_lang_ext_bundle_tag = "2014.09"
277
278   mediawiki_extension "Babel" do
279     site name
280     template "mw-ext-Babel.inc.php.erb"
281     tag mw_lang_ext_bundle_tag
282   end
283
284   mediawiki_extension "cldr" do
285     site name
286     tag mw_lang_ext_bundle_tag
287   end
288
289   mediawiki_extension "CleanChanges" do
290     site name
291     template "mw-ext-CleanChanges.inc.php.erb"
292     tag mw_lang_ext_bundle_tag
293   end
294
295   mediawiki_extension "LocalisationUpdate" do
296     site name
297     template "mw-ext-LocalisationUpdate.inc.php.erb"
298     tag mw_lang_ext_bundle_tag
299   end
300
301   #LocalisationUpdate Update Cron
302   #template "/etc/cron.d/mediawiki-#{name}-LocalisationUpdate" do
303   #  cookbook "mediawiki"
304   #  source "mediawiki-LocalisationUpdate.cron.erb"
305   #  owner "root"
306   #  group "root"
307   #  mode 0755
308   #  variables({
309   #    :name => name,
310   #    :directory => site_directory,
311   #    :user => node[:mediawiki][:user]
312   #  })
313   #end
314
315   #mediawiki_extension "Translate" do
316   #  site name
317   #  template "mw-ext-Translate.inc.php.erb"
318   #  tag mw_lang_ext_bundle_tag
319   #end
320
321   mediawiki_extension "UniversalLanguageSelector" do
322     site name
323     tag mw_lang_ext_bundle_tag
324   end
325
326   # Global Extra Mediawiki Extensions
327
328   mediawiki_extension "AntiSpoof" do
329     site name
330   end
331
332   mediawiki_extension "AbuseFilter" do
333     site name
334     template "mw-ext-AbuseFilter.inc.php.erb"
335   end
336
337   mediawiki_extension "CheckUser" do
338     site name
339     template "mw-ext-CheckUser.inc.php.erb"
340   end
341
342   mediawiki_extension "DismissableSiteNotice" do
343     site name
344   end
345
346   mediawiki_extension "Elastica" do
347     site name
348   end
349
350   mediawiki_extension "CirrusSearch" do
351     site name
352     template "mw-ext-CirrusSearch.inc.php.erb"
353   end
354
355   #OSM specifc extensions
356
357   mediawiki_extension "osmtaginfo" do
358     site name
359     repository "git://github.com/Firefishy/osmtaginfo.git"
360     tag "live"
361   end
362   mediawiki_extension "SimpleMap" do
363     site name
364     repository "git://github.com/Firefishy/SimpleMap.git"
365     tag "live"
366   end
367
368   mediawiki_extension "SlippyMap" do
369     site name
370     repository "git://github.com/Firefishy/SlippyMap.git"
371     tag "live"
372   end
373
374   cookbook_file "#{site_directory}/cc-wiki.png" do
375     cookbook "mediawiki"
376     owner node[:mediawiki][:user]
377     group node[:mediawiki][:group]
378     mode 0644
379     backup false
380   end
381
382   cookbook_file "#{site_directory}/googled06a989d1ccc8364.html" do
383     cookbook "mediawiki"
384     owner node[:mediawiki][:user]
385     group node[:mediawiki][:group]
386     mode 0644
387     backup false
388   end
389
390   cookbook_file "#{site_directory}/googlefac54c35e800caab.html" do
391     cookbook "mediawiki"
392     owner node[:mediawiki][:user]
393     group node[:mediawiki][:group]
394     mode 0644
395     backup false
396   end
397
398   apache_site name do
399     cookbook "mediawiki"
400     template "apache.erb"
401     directory site_directory
402     variables({
403       :aliases => aliases,
404       :mediawiki => mediawiki
405     })
406     notifies :reload, "service[apache2]"
407   end
408
409   #Fixme - Needs to run once
410   execute "#{mediawiki[:directory]}/extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php" do
411     action :nothing
412     command "php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php"
413     cwd mediawiki[:directory]
414     user node[:mediawiki][:user]
415     group node[:mediawiki][:group]
416   end
417
418 end