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