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