--- /dev/null
+#
+# Cookbook Name:: web
+# Definition:: mediawiki_site
+#
+# Copyright 2012, OpenStreetMap Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+define :mediawiki_site, :action => [ :create, :enable ] do
+ name = params[:name]
+
+ #/etc/cron.d names cannot contain a dot
+ cron_name = name.tr(".", "_")
+
+ aliases = Array(params[:aliases])
+
+ site_directory = params[:directory] || "/srv/#{name}"
+
+ database_params = {
+ :host => params[:database_host] || "localhost",
+ :name => params[:database_name],
+ :username => params[:database_username],
+ :password => params[:database_password]
+ }
+
+ mediawiki_repository = "git://github.com/wikimedia/mediawiki-core"
+ mediawiki_version = params[:version] || "1.22"
+ mediawiki_reference = "refs/heads/REL#{mediawiki_version}".tr(".", "_")
+
+ passwords = data_bag_item("mediawiki", "passwords")
+
+ mediawiki = {
+ :directory => "#{site_directory}/w",
+ :site => name,
+ :sitename => params[:sitename] || "OpenStreetMap Wiki",
+ :metanamespace => params[:metanamespace] || "OpenStreetMap",
+ :logo => params[:logo] || "$wgStylePath/common/images/wiki.png",
+ :email_contact => params[:email_contact] || "",
+ :email_sender => params[:email_sender] || "",
+ :email_sender_name => params[:email_sender_name] || "MediaWiki Mail",
+ :commons => params[:commons] || TRUE,
+ :skin => params[:skin] || "vector",
+ :site_notice => params[:site_notice] || "",
+ :site_readonly => params[:site_readonly] || FALSE,
+ :site_admin_user => "Admin",
+ :site_admin_pw => passwords["mediawiki-admin-user"],
+ :enable_ssl => params[:enable_ssl] || FALSE
+ }
+
+#----------------
+
+ node.set_unless[:mediawiki][:sites][name] = {}
+ node.set[:mediawiki][:sites][name][:site_directory] = site_directory
+ node.set[:mediawiki][:sites][name][:directory] = mediawiki[:directory]
+ node.set[:mediawiki][:sites][name][:version] = mediawiki_version
+ node.set_unless[:mediawiki][:sites][name][:wgSecretKey] = random_password(64)
+
+#----------------
+
+ mysql_user "#{database_params[:username]}@localhost" do
+ password database_params[:password]
+ end
+
+ mysql_database database_params[:name] do
+ permissions "#{database_params[:username]}@localhost" => :all
+ end
+
+ ruby_block "rename-installer-localsettings" do
+ action :nothing
+ block do
+ ::File.rename("#{mediawiki[:directory]}/LocalSettings.php","#{mediawiki[:directory]}/LocalSettings-install.php")
+ end
+ end
+
+ execute "#{mediawiki[:directory]}/maintenance/install.php" do
+ action :nothing
+ #Use metanamespace as Site Name to ensure correct set namespace
+ 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]}'"
+ cwd mediawiki[:directory]
+ user node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ not_if do
+ File.exists?("#{mediawiki[:directory]}/LocalSettings-install.php")
+ end
+ notifies :create, 'ruby_block[rename-installer-localsettings]', :immediately
+ end
+
+ execute "#{mediawiki[:directory]}/maintenance/update.php" do
+ action :nothing
+ command "php maintenance/update.php --quick"
+ cwd mediawiki[:directory]
+ user node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ end
+
+ directory "#{site_directory}" do
+ owner node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0775
+ end
+
+ directory "#{mediawiki[:directory]}" do
+ owner node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0775
+ end
+
+ git "#{mediawiki[:directory]}" do
+ action :sync
+ repository mediawiki_repository
+ reference mediawiki_reference
+ depth 1
+ user node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/install.php"), :immediately
+ notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/update.php")
+ end
+
+ #Safety catch if git doesn't update but install.php hasn't run
+ ruby_block "catch-installer-localsettings-run" do
+ block do
+ #
+ end
+ not_if do
+ File.exists?("#{mediawiki[:directory]}/LocalSettings-install.php")
+ end
+ notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/install.php"), :immediately
+ action :create
+ end
+
+ directory "#{mediawiki[:directory]}/images" do
+ owner "www-data"
+ group "wiki"
+ mode 0775
+ end
+
+ directory "#{mediawiki[:directory]}/cache" do
+ owner "www-data"
+ group "wiki"
+ mode 0775
+ end
+
+ directory "#{mediawiki[:directory]}/LocalSettings.d" do
+ user node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0775
+ end
+
+ template "#{mediawiki[:directory]}/LocalSettings.php" do
+ cookbook "mediawiki"
+ source "LocalSettings.php.erb"
+ owner node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0664
+ variables({
+ :name => name,
+ :database_params => database_params,
+ :mediawiki => mediawiki
+ })
+ notifies :run, resources(:execute => "#{mediawiki[:directory]}/maintenance/update.php")
+ end
+
+ template "/etc/cron.d/mediawiki-#{cron_name}" do
+ cookbook "mediawiki"
+ source "mediawiki.cron.erb"
+ owner "root"
+ group "root"
+ mode 0644
+ variables({
+ :name => name,
+ :directory => site_directory,
+ :user => node[:mediawiki][:user]
+ })
+ end
+
+ template "/etc/cron.daily/mediawiki-#{cron_name}-backup" do
+ cookbook "mediawiki"
+ source "mediawiki-backup.cron.erb"
+ owner "root"
+ group "root"
+ mode 0700
+ variables({
+ :name => name,
+ :directory => site_directory,
+ :database_params => database_params
+ })
+ end
+
+ #MediaWiki Default Extension
+
+ mediawiki_extension "Cite" do
+ site name
+ template "mw-ext-Cite.inc.php.erb"
+ end
+
+ mediawiki_extension "ConfirmEdit" do
+ site name
+ template "mw-ext-ConfirmEdit.inc.php.erb"
+ end
+
+ mediawiki_extension "Gadgets" do
+ site name
+ end
+
+ mediawiki_extension "ImageMap" do
+ site name
+ end
+
+ mediawiki_extension "InputBox" do
+ site name
+ end
+
+ mediawiki_extension "Interwiki" do
+ site name
+ end
+
+ # "LocalisationUpdate" part of Language Extension Bundle, bundled per site
+
+ mediawiki_extension "Nuke" do
+ site name
+ end
+
+ mediawiki_extension "ParserFunctions" do
+ site name
+ template "mw-ext-ParserFunctions.inc.php.erb"
+ end
+
+ mediawiki_extension "PdfHandler" do
+ site name
+ template "mw-ext-PdfHandler.inc.php.erb"
+ end
+
+ mediawiki_extension "Poem" do
+ site name
+ end
+
+ mediawiki_extension "Renameuser" do
+ site name
+ end
+
+ mediawiki_extension "SimpleAntiSpam" do
+ site name
+ end
+
+ mediawiki_extension "SpamBlacklist" do
+ site name
+ template "mw-ext-SpamBlacklist.inc.php.erb"
+ end
+
+ mediawiki_extension "SyntaxHighlight_GeSHi" do
+ site name
+ end
+
+ mediawiki_extension "TitleBlacklist" do
+ site name
+ template "mw-ext-TitleBlacklist.inc.php.erb"
+ end
+
+ mediawiki_extension "WikiEditor" do
+ site name
+ end
+
+ # MediaWiki Language Extension Bundle
+ #fixme should automatically resolve tag
+ mw_lang_ext_bundle_tag = "2014.09"
+
+ mediawiki_extension "Babel" do
+ site name
+ template "mw-ext-Babel.inc.php.erb"
+ tag mw_lang_ext_bundle_tag
+ end
+
+ mediawiki_extension "cldr" do
+ site name
+ tag mw_lang_ext_bundle_tag
+ end
+
+ mediawiki_extension "CleanChanges" do
+ site name
+ template "mw-ext-CleanChanges.inc.php.erb"
+ tag mw_lang_ext_bundle_tag
+ end
+
+ mediawiki_extension "LocalisationUpdate" do
+ site name
+ template "mw-ext-LocalisationUpdate.inc.php.erb"
+ tag mw_lang_ext_bundle_tag
+ end
+
+ #LocalisationUpdate Update Cron
+ #template "/etc/cron.d/mediawiki-#{name}-LocalisationUpdate" do
+ # cookbook "mediawiki"
+ # source "mediawiki-LocalisationUpdate.cron.erb"
+ # owner "root"
+ # group "root"
+ # mode 0755
+ # variables({
+ # :name => name,
+ # :directory => site_directory,
+ # :user => node[:mediawiki][:user]
+ # })
+ #end
+
+ #mediawiki_extension "Translate" do
+ # site name
+ # template "mw-ext-Translate.inc.php.erb"
+ # tag mw_lang_ext_bundle_tag
+ #end
+
+ mediawiki_extension "UniversalLanguageSelector" do
+ site name
+ tag mw_lang_ext_bundle_tag
+ end
+
+ # Global Extra Mediawiki Extensions
+
+ mediawiki_extension "AntiSpoof" do
+ site name
+ end
+
+ mediawiki_extension "AbuseFilter" do
+ site name
+ template "mw-ext-AbuseFilter.inc.php.erb"
+ end
+
+ mediawiki_extension "CheckUser" do
+ site name
+ template "mw-ext-CheckUser.inc.php.erb"
+ end
+
+ mediawiki_extension "DismissableSiteNotice" do
+ site name
+ end
+
+ mediawiki_extension "Elastica" do
+ site name
+ end
+
+ mediawiki_extension "CirrusSearch" do
+ site name
+ template "mw-ext-CirrusSearch.inc.php.erb"
+ end
+
+ #OSM specifc extensions
+
+ mediawiki_extension "osmtaginfo" do
+ site name
+ repository "git://github.com/Firefishy/osmtaginfo.git"
+ tag "live"
+ end
+ mediawiki_extension "SimpleMap" do
+ site name
+ repository "git://github.com/Firefishy/SimpleMap.git"
+ tag "live"
+ end
+
+ mediawiki_extension "SlippyMap" do
+ site name
+ repository "git://github.com/Firefishy/SlippyMap.git"
+ tag "live"
+ end
+
+ cookbook_file "#{site_directory}/cc-wiki.png" do
+ cookbook "mediawiki"
+ owner node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0644
+ backup false
+ end
+
+ cookbook_file "#{site_directory}/googled06a989d1ccc8364.html" do
+ cookbook "mediawiki"
+ owner node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0644
+ backup false
+ end
+
+ cookbook_file "#{site_directory}/googlefac54c35e800caab.html" do
+ cookbook "mediawiki"
+ owner node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ mode 0644
+ backup false
+ end
+
+ apache_site name do
+ cookbook "mediawiki"
+ template "apache.erb"
+ directory site_directory
+ variables({
+ :aliases => aliases,
+ :mediawiki => mediawiki
+ })
+ notifies :reload, "service[apache2]"
+ end
+
+ #Fixme - Needs to run once
+ execute "#{mediawiki[:directory]}/extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php" do
+ action :nothing
+ command "php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php"
+ cwd mediawiki[:directory]
+ user node[:mediawiki][:user]
+ group node[:mediawiki][:group]
+ end
+
+end