]> git.openstreetmap.org Git - chef.git/blob - cookbooks/mediawiki/definitions/mediawiki_site.rb
d565bed6453251ddd55ab8552741d9718e44a800
[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 :name => name, :database_params => database_params, :mediawiki => mediawiki
169     notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/update.php")
170   end
171
172   template "/etc/cron.d/mediawiki-#{cron_name}" do
173     cookbook "mediawiki"
174     source "mediawiki.cron.erb"
175     owner "root"
176     group "root"
177     mode 0644
178     variables :name => name, :directory => site_directory, :user => node[:mediawiki][:user]
179   end
180
181   template "/etc/cron.daily/mediawiki-#{cron_name}-backup" do
182     cookbook "mediawiki"
183     source "mediawiki-backup.cron.erb"
184     owner "root"
185     group "root"
186     mode 0700
187     variables :name => name, :directory => site_directory, :database_params => database_params
188   end
189
190   # MediaWiki Default Extension
191
192   mediawiki_extension "Cite" do
193     site name
194     template "mw-ext-Cite.inc.php.erb"
195   end
196
197   mediawiki_extension "ConfirmEdit" do
198     site name
199     template "mw-ext-ConfirmEdit.inc.php.erb"
200     variables :public_key => mediawiki[:recaptcha_public],
201               :private_key => mediawiki[:recaptcha_private]
202   end
203
204   mediawiki_extension "Gadgets" do
205     site name
206   end
207
208   mediawiki_extension "ImageMap" do
209     site name
210   end
211
212   mediawiki_extension "InputBox" do
213     site name
214   end
215
216   mediawiki_extension "Interwiki" do
217     site name
218   end
219
220   # "LocalisationUpdate" part of Language Extension Bundle, bundled per site
221
222   mediawiki_extension "Nuke" do
223     site name
224   end
225
226   mediawiki_extension "ParserFunctions" do
227     site name
228     template "mw-ext-ParserFunctions.inc.php.erb"
229   end
230
231   mediawiki_extension "PdfHandler" do
232     site name
233     template "mw-ext-PdfHandler.inc.php.erb"
234   end
235
236   mediawiki_extension "Poem" do
237     site name
238   end
239
240   mediawiki_extension "Renameuser" do
241     site name
242   end
243
244   mediawiki_extension "SimpleAntiSpam" do
245     site name
246   end
247
248   mediawiki_extension "SpamBlacklist" do
249     site name
250     template "mw-ext-SpamBlacklist.inc.php.erb"
251   end
252
253   mediawiki_extension "SyntaxHighlight_GeSHi" do
254     site name
255   end
256
257   mediawiki_extension "TitleBlacklist" do
258     site name
259     template "mw-ext-TitleBlacklist.inc.php.erb"
260   end
261
262   mediawiki_extension "WikiEditor" do
263     site name
264   end
265
266   # MediaWiki Language Extension Bundle
267   # FIXME: should automatically resolve tag
268   mw_lang_ext_bundle_tag = "2014.09"
269
270   mediawiki_extension "Babel" do
271     site name
272     template "mw-ext-Babel.inc.php.erb"
273     tag mw_lang_ext_bundle_tag
274   end
275
276   mediawiki_extension "cldr" do
277     site name
278     tag mw_lang_ext_bundle_tag
279   end
280
281   mediawiki_extension "CleanChanges" do
282     site name
283     template "mw-ext-CleanChanges.inc.php.erb"
284     tag mw_lang_ext_bundle_tag
285   end
286
287   mediawiki_extension "LocalisationUpdate" do
288     site name
289     template "mw-ext-LocalisationUpdate.inc.php.erb"
290     tag mw_lang_ext_bundle_tag
291   end
292
293   # LocalisationUpdate Update Cron
294   # template "/etc/cron.d/mediawiki-#{name}-LocalisationUpdate" do
295   #   cookbook "mediawiki"
296   #   source "mediawiki-LocalisationUpdate.cron.erb"
297   #   owner "root"
298   #   group "root"
299   #   mode 0755
300   #   variables :name => name, :directory => site_directory, :user => node[:mediawiki][:user]
301   # end
302
303   # mediawiki_extension "Translate" do
304   #   site name
305   #   template "mw-ext-Translate.inc.php.erb"
306   #   tag mw_lang_ext_bundle_tag
307   # end
308
309   mediawiki_extension "UniversalLanguageSelector" do
310     site name
311     tag mw_lang_ext_bundle_tag
312   end
313
314   # Global Extra Mediawiki Extensions
315
316   mediawiki_extension "AntiSpoof" do
317     site name
318   end
319
320   mediawiki_extension "AbuseFilter" do
321     site name
322     template "mw-ext-AbuseFilter.inc.php.erb"
323   end
324
325   mediawiki_extension "CheckUser" do
326     site name
327     template "mw-ext-CheckUser.inc.php.erb"
328   end
329
330   mediawiki_extension "DismissableSiteNotice" do
331     site name
332   end
333
334   mediawiki_extension "Elastica" do
335     site name
336   end
337
338   mediawiki_extension "CirrusSearch" do
339     site name
340     template "mw-ext-CirrusSearch.inc.php.erb"
341   end
342
343   # OSM specifc extensions
344
345   mediawiki_extension "osmtaginfo" do
346     site name
347     repository "git://github.com/Firefishy/osmtaginfo.git"
348     tag "live"
349   end
350   mediawiki_extension "SimpleMap" do
351     site name
352     repository "git://github.com/Firefishy/SimpleMap.git"
353     tag "live"
354   end
355
356   mediawiki_extension "SlippyMap" do
357     site name
358     repository "git://github.com/Firefishy/SlippyMap.git"
359     tag "live"
360   end
361
362   cookbook_file "#{site_directory}/cc-wiki.png" do
363     cookbook "mediawiki"
364     owner node[:mediawiki][:user]
365     group node[:mediawiki][:group]
366     mode 0644
367     backup false
368   end
369
370   cookbook_file "#{site_directory}/googled06a989d1ccc8364.html" do
371     cookbook "mediawiki"
372     owner node[:mediawiki][:user]
373     group node[:mediawiki][:group]
374     mode 0644
375     backup false
376   end
377
378   cookbook_file "#{site_directory}/googlefac54c35e800caab.html" do
379     cookbook "mediawiki"
380     owner node[:mediawiki][:user]
381     group node[:mediawiki][:group]
382     mode 0644
383     backup false
384   end
385
386   apache_site name do
387     cookbook "mediawiki"
388     template "apache.erb"
389     directory site_directory
390     variables :aliases => aliases, :mediawiki => mediawiki
391     notifies :reload, "service[apache2]"
392   end
393
394   # FIXME: needs to run once
395   execute "#{mediawiki[:directory]}/extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php" do
396     action :nothing
397     command "php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php"
398     cwd mediawiki[:directory]
399     user node[:mediawiki][:user]
400     group node[:mediawiki][:group]
401   end
402 end