3 # Definition:: mediawiki_site
5 # Copyright 2012, OpenStreetMap Foundation
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
11 # http://www.apache.org/licenses/LICENSE-2.0
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.
20 define :mediawiki_site, :action => [:create, :enable] do
23 # /etc/cron.d names cannot contain a dot
24 cron_name = name.tr(".", "_")
26 aliases = Array(params[:aliases])
28 site_directory = params[:directory] || "/srv/#{name}"
31 :host => params[:database_host] || "localhost",
32 :name => params[:database_name],
33 :username => params[:database_username],
34 :password => params[:database_password]
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(".", "_")
42 :directory => "#{site_directory}/w",
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]
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)
73 mysql_user "#{database_params[:username]}@localhost" do
74 password database_params[:password]
77 mysql_database database_params[:name] do
78 permissions "#{database_params[:username]}@localhost" => :all
81 ruby_block "rename-installer-localsettings" do
84 ::File.rename("#{mediawiki[:directory]}/LocalSettings.php", "#{mediawiki[:directory]}/LocalSettings-install.php")
88 execute "#{mediawiki[:directory]}/maintenance/install.php" do
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]
96 File.exist?("#{mediawiki[:directory]}/LocalSettings-install.php")
98 notifies :create, 'ruby_block[rename-installer-localsettings]', :immediately
101 execute "#{mediawiki[:directory]}/maintenance/update.php" do
103 command "php maintenance/update.php --quick"
104 cwd mediawiki[:directory]
105 user node[:mediawiki][:user]
106 group node[:mediawiki][:group]
109 directory "#{site_directory}" do
110 owner node[:mediawiki][:user]
111 group node[:mediawiki][:group]
115 directory "#{mediawiki[:directory]}" do
116 owner node[:mediawiki][:user]
117 group node[:mediawiki][:group]
121 git "#{mediawiki[:directory]}" do
123 repository mediawiki_repository
124 reference mediawiki_reference
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")
132 # Safety catch if git doesn't update but install.php hasn't run
133 ruby_block "catch-installer-localsettings-run" do
138 File.exist?("#{mediawiki[:directory]}/LocalSettings-install.php")
140 notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/install.php"), :immediately
144 directory "#{mediawiki[:directory]}/images" do
150 directory "#{mediawiki[:directory]}/cache" do
156 directory "#{mediawiki[:directory]}/LocalSettings.d" do
157 user node[:mediawiki][:user]
158 group node[:mediawiki][:group]
162 template "#{mediawiki[:directory]}/LocalSettings.php" do
164 source "LocalSettings.php.erb"
165 owner node[:mediawiki][:user]
166 group node[:mediawiki][:group]
168 variables :name => name, :database_params => database_params, :mediawiki => mediawiki
169 notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/update.php")
172 template "/etc/cron.d/mediawiki-#{cron_name}" do
174 source "mediawiki.cron.erb"
178 variables :name => name, :directory => site_directory, :user => node[:mediawiki][:user]
181 template "/etc/cron.daily/mediawiki-#{cron_name}-backup" do
183 source "mediawiki-backup.cron.erb"
187 variables :name => name, :directory => site_directory, :database_params => database_params
190 # MediaWiki Default Extension
192 mediawiki_extension "Cite" do
194 template "mw-ext-Cite.inc.php.erb"
197 mediawiki_extension "ConfirmEdit" do
199 template "mw-ext-ConfirmEdit.inc.php.erb"
200 variables :public_key => mediawiki[:recaptcha_public],
201 :private_key => mediawiki[:recaptcha_private]
204 mediawiki_extension "Gadgets" do
208 mediawiki_extension "ImageMap" do
212 mediawiki_extension "InputBox" do
216 mediawiki_extension "Interwiki" do
220 # "LocalisationUpdate" part of Language Extension Bundle, bundled per site
222 mediawiki_extension "Nuke" do
226 mediawiki_extension "ParserFunctions" do
228 template "mw-ext-ParserFunctions.inc.php.erb"
231 mediawiki_extension "PdfHandler" do
233 template "mw-ext-PdfHandler.inc.php.erb"
236 mediawiki_extension "Poem" do
240 mediawiki_extension "Renameuser" do
244 mediawiki_extension "SimpleAntiSpam" do
248 mediawiki_extension "SpamBlacklist" do
250 template "mw-ext-SpamBlacklist.inc.php.erb"
253 mediawiki_extension "SyntaxHighlight_GeSHi" do
257 mediawiki_extension "TitleBlacklist" do
259 template "mw-ext-TitleBlacklist.inc.php.erb"
262 mediawiki_extension "WikiEditor" do
266 # MediaWiki Language Extension Bundle
267 # FIXME: should automatically resolve tag
268 mw_lang_ext_bundle_tag = "2014.09"
270 mediawiki_extension "Babel" do
272 template "mw-ext-Babel.inc.php.erb"
273 tag mw_lang_ext_bundle_tag
276 mediawiki_extension "cldr" do
278 tag mw_lang_ext_bundle_tag
281 mediawiki_extension "CleanChanges" do
283 template "mw-ext-CleanChanges.inc.php.erb"
284 tag mw_lang_ext_bundle_tag
287 mediawiki_extension "LocalisationUpdate" do
289 template "mw-ext-LocalisationUpdate.inc.php.erb"
290 tag mw_lang_ext_bundle_tag
293 # LocalisationUpdate Update Cron
294 # template "/etc/cron.d/mediawiki-#{name}-LocalisationUpdate" do
295 # cookbook "mediawiki"
296 # source "mediawiki-LocalisationUpdate.cron.erb"
300 # variables :name => name, :directory => site_directory, :user => node[:mediawiki][:user]
303 # mediawiki_extension "Translate" do
305 # template "mw-ext-Translate.inc.php.erb"
306 # tag mw_lang_ext_bundle_tag
309 mediawiki_extension "UniversalLanguageSelector" do
311 tag mw_lang_ext_bundle_tag
314 # Global Extra Mediawiki Extensions
316 mediawiki_extension "AntiSpoof" do
320 mediawiki_extension "AbuseFilter" do
322 template "mw-ext-AbuseFilter.inc.php.erb"
325 mediawiki_extension "CheckUser" do
327 template "mw-ext-CheckUser.inc.php.erb"
330 mediawiki_extension "DismissableSiteNotice" do
334 mediawiki_extension "Elastica" do
338 mediawiki_extension "CirrusSearch" do
340 template "mw-ext-CirrusSearch.inc.php.erb"
343 # OSM specifc extensions
345 mediawiki_extension "osmtaginfo" do
347 repository "git://github.com/Firefishy/osmtaginfo.git"
350 mediawiki_extension "SimpleMap" do
352 repository "git://github.com/Firefishy/SimpleMap.git"
356 mediawiki_extension "SlippyMap" do
358 repository "git://github.com/Firefishy/SlippyMap.git"
362 cookbook_file "#{site_directory}/cc-wiki.png" do
364 owner node[:mediawiki][:user]
365 group node[:mediawiki][:group]
370 cookbook_file "#{site_directory}/googled06a989d1ccc8364.html" do
372 owner node[:mediawiki][:user]
373 group node[:mediawiki][:group]
378 cookbook_file "#{site_directory}/googlefac54c35e800caab.html" do
380 owner node[:mediawiki][:user]
381 group node[:mediawiki][:group]
388 template "apache.erb"
389 directory site_directory
390 variables :aliases => aliases, :mediawiki => mediawiki
391 notifies :reload, "service[apache2]"
394 # FIXME: needs to run once
395 execute "#{mediawiki[:directory]}/extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php" do
397 command "php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php"
398 cwd mediawiki[:directory]
399 user node[:mediawiki][:user]
400 group node[:mediawiki][:group]