From 4f10eb951399adea7cd598b2d763969c735bc888 Mon Sep 17 00:00:00 2001 From: Grant Slater Date: Sat, 11 Oct 2014 17:04:11 +0100 Subject: [PATCH 1/1] Move mediawiki + wiki cookbook to public repo --- cookbooks/mediawiki/README.rdoc | 8 + cookbooks/mediawiki/attributes/default.rb | 11 + .../definitions/mediawiki_extension.rb | 83 ++++ .../mediawiki/definitions/mediawiki_site.rb | 418 ++++++++++++++++++ cookbooks/mediawiki/files/default/cc-wiki.png | Bin 0 -> 5083 bytes .../files/default/googled06a989d1ccc8364.html | 0 .../files/default/googlefac54c35e800caab.html | 1 + cookbooks/mediawiki/metadata.rb | 9 + cookbooks/mediawiki/recipes/default.rb | 49 ++ .../templates/default/LocalSettings.php.erb | 277 ++++++++++++ .../mediawiki/templates/default/apache.erb | 230 ++++++++++ .../default/mediawiki-backup.cron.erb | 15 + .../templates/default/mediawiki.cron.erb | 5 + .../default/mw-ext-AbuseFilter.inc.php.erb | 10 + .../default/mw-ext-Babel.inc.php.erb | 13 + .../default/mw-ext-CheckUser.inc.php.erb | 7 + .../default/mw-ext-CirrusSearch.inc.php.erb | 5 + .../templates/default/mw-ext-Cite.inc.php.erb | 4 + .../default/mw-ext-CleanChanges.inc.php.erb | 4 + .../default/mw-ext-ConfirmEdit.inc.php.erb | 7 + .../mw-ext-LocalisationUpdate.inc.php.erb | 4 + .../mw-ext-ParserFunctions.inc.php.erb | 4 + .../default/mw-ext-PdfHandler.inc.php.erb | 5 + .../default/mw-ext-SpamBlacklist.inc.php.erb | 7 + .../default/mw-ext-TitleBlacklist.inc.php.erb | 13 + cookbooks/wiki/README.rdoc | 8 + cookbooks/wiki/attributes/default.rb | 3 + cookbooks/wiki/files/default/favicon.ico | Bin 0 -> 15086 bytes .../wiki/files/default/osm_logo_wiki.png | Bin 0 -> 27307 bytes cookbooks/wiki/metadata.rb | 8 + cookbooks/wiki/recipes/default.rb | 91 ++++ .../templates/default/apache_wiki_dump.erb | 20 + .../wiki/templates/default/cron_wiki_dump.erb | 3 + .../wiki/templates/default/robots.txt.erb | 25 ++ .../wiki/templates/default/squid.conf.erb | 11 + 35 files changed, 1358 insertions(+) create mode 100644 cookbooks/mediawiki/README.rdoc create mode 100644 cookbooks/mediawiki/attributes/default.rb create mode 100644 cookbooks/mediawiki/definitions/mediawiki_extension.rb create mode 100644 cookbooks/mediawiki/definitions/mediawiki_site.rb create mode 100644 cookbooks/mediawiki/files/default/cc-wiki.png create mode 100644 cookbooks/mediawiki/files/default/googled06a989d1ccc8364.html create mode 100644 cookbooks/mediawiki/files/default/googlefac54c35e800caab.html create mode 100644 cookbooks/mediawiki/metadata.rb create mode 100644 cookbooks/mediawiki/recipes/default.rb create mode 100644 cookbooks/mediawiki/templates/default/LocalSettings.php.erb create mode 100644 cookbooks/mediawiki/templates/default/apache.erb create mode 100755 cookbooks/mediawiki/templates/default/mediawiki-backup.cron.erb create mode 100644 cookbooks/mediawiki/templates/default/mediawiki.cron.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-AbuseFilter.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-Babel.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-CheckUser.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-CirrusSearch.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-Cite.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-CleanChanges.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-ConfirmEdit.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-LocalisationUpdate.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-ParserFunctions.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-PdfHandler.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-SpamBlacklist.inc.php.erb create mode 100644 cookbooks/mediawiki/templates/default/mw-ext-TitleBlacklist.inc.php.erb create mode 100644 cookbooks/wiki/README.rdoc create mode 100644 cookbooks/wiki/attributes/default.rb create mode 100644 cookbooks/wiki/files/default/favicon.ico create mode 100644 cookbooks/wiki/files/default/osm_logo_wiki.png create mode 100644 cookbooks/wiki/metadata.rb create mode 100644 cookbooks/wiki/recipes/default.rb create mode 100644 cookbooks/wiki/templates/default/apache_wiki_dump.erb create mode 100644 cookbooks/wiki/templates/default/cron_wiki_dump.erb create mode 100644 cookbooks/wiki/templates/default/robots.txt.erb create mode 100644 cookbooks/wiki/templates/default/squid.conf.erb diff --git a/cookbooks/mediawiki/README.rdoc b/cookbooks/mediawiki/README.rdoc new file mode 100644 index 000000000..3de2ec7a3 --- /dev/null +++ b/cookbooks/mediawiki/README.rdoc @@ -0,0 +1,8 @@ += DESCRIPTION: + += REQUIREMENTS: + += ATTRIBUTES: + += USAGE: + diff --git a/cookbooks/mediawiki/attributes/default.rb b/cookbooks/mediawiki/attributes/default.rb new file mode 100644 index 000000000..59f020120 --- /dev/null +++ b/cookbooks/mediawiki/attributes/default.rb @@ -0,0 +1,11 @@ +# Default to enabling the "wiki" role +default[:accounts][:users][:wiki][:status] = :role + +# Use prefork as PHP is to dumb for anything else +default[:apache][:mpm] = "prefork" + +# Set mediawiki defaults +default[:mediawiki][:user] = "wiki" +default[:mediawiki][:group] = "wiki" +default[:mediawiki][:sites] = {} + diff --git a/cookbooks/mediawiki/definitions/mediawiki_extension.rb b/cookbooks/mediawiki/definitions/mediawiki_extension.rb new file mode 100644 index 000000000..9b7e665c1 --- /dev/null +++ b/cookbooks/mediawiki/definitions/mediawiki_extension.rb @@ -0,0 +1,83 @@ +# +# Cookbook Name:: mediawiki +# Definition:: mediawiki_extension +# +# Copyright 2013, 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_extension, :action => [ :enable ] do + name = params[:name] + site = params[:site] + site_directory = node[:mediawiki][:sites][site][:site_directory] + mediawiki_directory = node[:mediawiki][:sites][site][:directory] + extension_directory = "#{mediawiki_directory}/extensions/#{name}" + source = params[:source] + template = params[:template] + + if source + remote_directory extension_directory do + cookbook "mediawiki" + source source + owner node[:mediawiki][:user] + group node[:mediawiki][:group] + mode 0755 + files_owner node[:mediawiki][:user] + files_group node[:mediawiki][:group] + files_mode 0755 + end + else + repository = params[:repository] || "git://github.com/wikimedia/mediawiki-extensions-#{name}.git" + version = params[:version] || node[:mediawiki][:sites][site][:version] + tag = params[:tag] + if tag + reference = "refs/tags/#{tag}" + else + reference = "refs/heads/REL#{version}".tr(".", "_") + end + + git extension_directory do + action :sync + repository repository + reference reference + depth 1 + enable_submodules true + user node[:mediawiki][:user] + group node[:mediawiki][:group] + ignore_failure repository.start_with?("git://github.com/wikimedia/mediawiki-extensions") + notifies :run, resources(:execute => "#{mediawiki_directory}/maintenance/update.php") + end + end + + if template + template "#{mediawiki_directory}/LocalSettings.d/Ext-#{name}.inc.php" do + cookbook "mediawiki" + source template + user node[:mediawiki][:user] + group node[:mediawiki][:group] + mode 0664 + notifies :create, resources(:template => "#{mediawiki_directory}/LocalSettings.php") + end + end + + file "#{mediawiki_directory}/LocalSettings.d/Ext-#{name}.inc.php" do + action :create_if_missing + user node[:mediawiki][:user] + group node[:mediawiki][:group] + mode 0664 + content " "#{mediawiki_directory}/LocalSettings.php") + end +end diff --git a/cookbooks/mediawiki/definitions/mediawiki_site.rb b/cookbooks/mediawiki/definitions/mediawiki_site.rb new file mode 100644 index 000000000..1cfd2a40c --- /dev/null +++ b/cookbooks/mediawiki/definitions/mediawiki_site.rb @@ -0,0 +1,418 @@ +# +# 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 diff --git a/cookbooks/mediawiki/files/default/cc-wiki.png b/cookbooks/mediawiki/files/default/cc-wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a944e0b89642ae282047846e55393007b04686 GIT binary patch literal 5083 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 literal 0 HcmV?d00001 diff --git a/cookbooks/mediawiki/files/default/googled06a989d1ccc8364.html b/cookbooks/mediawiki/files/default/googled06a989d1ccc8364.html new file mode 100644 index 000000000..e69de29bb diff --git a/cookbooks/mediawiki/files/default/googlefac54c35e800caab.html b/cookbooks/mediawiki/files/default/googlefac54c35e800caab.html new file mode 100644 index 000000000..550556d3d --- /dev/null +++ b/cookbooks/mediawiki/files/default/googlefac54c35e800caab.html @@ -0,0 +1 @@ +google-site-verification: googlefac54c35e800caab.html diff --git a/cookbooks/mediawiki/metadata.rb b/cookbooks/mediawiki/metadata.rb new file mode 100644 index 000000000..53b069d01 --- /dev/null +++ b/cookbooks/mediawiki/metadata.rb @@ -0,0 +1,9 @@ +maintainer "OpenStreetMap Administrators" +maintainer_email "admins@openstreetmap.org" +license "Apache 2.0" +description "Installs and configures mediawiki" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc')) +version "1.0.0" +depends "git" +depends "memcached" +depends "mysql" diff --git a/cookbooks/mediawiki/recipes/default.rb b/cookbooks/mediawiki/recipes/default.rb new file mode 100644 index 000000000..d6d90caa1 --- /dev/null +++ b/cookbooks/mediawiki/recipes/default.rb @@ -0,0 +1,49 @@ +# +# Cookbook Name:: mediawiki +# Recipe:: default +# +# Copyright 2013, 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. +# + +include_recipe "memcached" +include_recipe "apache::ssl" +include_recipe "mysql" +include_recipe "git" + +#Mediawiki Base Requirements +package "php5" +package "php5-cli" +package "php5-curl" +package "php5-mysql" +package "php5-gd" +package "php-apc" +package "php5-intl" +package "libapache2-mod-php5" + +package "php-wikidiff2" + +#Mediawiki Image + SVG support +package "imagemagick" +package "librsvg2-bin" + +#Mediawiki PDF support via Extension:PdfHandler +package "ghostscript" +package "poppler-utils" + +#Mediawiki backup +package "xz-utils" + +apache_module "php5" +apache_module "rewrite" diff --git a/cookbooks/mediawiki/templates/default/LocalSettings.php.erb b/cookbooks/mediawiki/templates/default/LocalSettings.php.erb new file mode 100644 index 000000000..d4c8e3050 --- /dev/null +++ b/cookbooks/mediawiki/templates/default/LocalSettings.php.erb @@ -0,0 +1,277 @@ +'; +$wgMetaNamespace = '<%= @mediawiki[:metanamespace] %>'; + + +## The URL base path to the directory containing the wiki; +## defaults for all runtime URL paths are based off of this. +## For more information on customizing the URLs +## (like /w/index.php/Page_title to /wiki/Page_title) please see: +## http://www.mediawiki.org/wiki/Manual:Short_URL +$wgScriptPath = "/w"; +$wgArticlePath = '/wiki/$1'; +$wgUsePathInfo = true; +$wgScriptExtension = ".php"; + +## The protocol and server name to use in fully-qualified URLs +$wgServer = "//<%= @mediawiki[:site] %>"; +$wgInternalServer = 'http://<%= @mediawiki[:site] %>'; + +<% if @mediawiki[:enable_ssl] -%> +$wgSecureLogin = true; +$wgDefaultUserOptions['prefershttps'] = 0; +<% end -%> +$wgCookieSecure = false; + +## The relative URL path to the skins directory +$wgStylePath = "$wgScriptPath/skins"; + +## The relative URL path to the logo. Make sure you change this from the default, +## or else you'll overwrite your logo when you upgrade! +$wgLogo = "<%= @mediawiki[:logo] %>"; + +## UPO means: this is also a user preference option + +$wgEnableEmail = true; +$wgEnableUserEmail = true; # UPO + +$wgEmergencyContact = "<%= @mediawiki[:email_contact] %>"; +$wgPasswordSender = "<%= @mediawiki[:email_sender] %>"; +$wgPasswordSenderName = "<%= @mediawiki[:email_sender_name] %>"; //Replaced by MediaWiki:Emailsender in v1.23.0 + +$wgEnotifUserTalk = true; # UPO +$wgEnotifWatchlist = true; # UPO +$wgEmailAuthentication = true; + +$wgEnotifUseJobQ = true; + +## Database settings +$wgDBtype = "mysql"; +$wgDBserver = "<%= @database_params[:host] %>"; +$wgDBname = "<%= @database_params[:name] %>"; +$wgDBuser = "<%= @database_params[:username] %>"; +$wgDBpassword = "<%= @database_params[:password] %>"; + +# MySQL specific settings +$wgDBprefix = ""; + +# MySQL table options to use during installation or update +$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary"; + +# Experimental charset support for MySQL 5.0. +$wgDBmysql5 = false; + +## Shared memory settings +$wgMainCacheType = CACHE_MEMCACHED; +$wgMemCachedServers = array('127.0.0.1:11211'); +$wgSessionsInObjectCache = TRUE; + +## To enable image uploads, make sure the 'images' directory +## is writable, then set this to true: +$wgEnableUploads = true; +$wgUseImageMagick = true; +$wgImageMagickConvertCommand = "/usr/bin/convert"; + +$wgGenerateThumbnailOnParse = false; +$wgMaxImageArea = 125000000; +$wgMaxShellMemory = 5524000; +$wgMaxShellFileSize = 819200; +$wgMaxShellTime = 360; +$wgMaxShellWallClockTime = 360; + +# Allow some more upload extensions +$wgFileExtensions[] = 'doc'; +$wgFileExtensions[] = 'pdf'; +$wgFileExtensions[] = 'odt'; +$wgFileExtensions[] = 'odp'; +$wgFileExtensions[] = 'svg'; + +$wgSVGConverters = array( 'rsvg' => '/usr/bin/rsvg-convert -w $width -h $height -o $output $input'); +$wgSVGConverter = 'rsvg'; +$wgSVGMaxSize = 2000; + +# InstantCommons allows wiki to use images from http://commons.wikimedia.org +<% if @mediawiki[:commons] -%> +$wgUseInstantCommons = true; +<% else -%> +$wgUseInstantCommons = false; +<% end -%> + +## If you use ImageMagick (or any other shell command) on a +## Linux server, this will need to be set to the name of an +## available UTF-8 locale +$wgShellLocale = "en_US.utf8"; + +## If you want to use image uploads under safe mode, +## create the directories images/archive, images/thumb and +## images/temp, and make them all writable. Then uncomment +## this, if it's not already uncommented: +#$wgHashedUploadDirectory = false; + +## Set $wgCacheDirectory to a writable directory on the web server +## to make your wiki go slightly faster. The directory should not +## be publically accessible from the web. +#$wgCacheDirectory = "$IP/cache"; + +# Site language code, should be one of the list in ./languages/Names.php +$wgLanguageCode = "en"; + +$wgSecretKey = "<%= @node[:mediawiki][:sites][@name][:wgSecretKey] %>"; + +# Site upgrade key. Must be set to a string (default provided) to turn on the +# web installer while LocalSettings.php is in place +#$wgUpgradeKey = "6ad907e74fc65836"; + +## Default skin: you can change the default skin. Use the internal symbolic +## names, ie 'standard', 'nostalgia', 'cologneblue', 'monobook', 'vector': +$wgDefaultSkin = "<%= @mediawiki[:skin] %>"; + +## For attaching licensing metadata to pages, and displaying an +## appropriate copyright notice / icon. GNU Free Documentation +## License and Creative Commons licenses are supported so far. +$wgRightsPage = "OpenStreetMap_License"; # Set to the title of a wiki page that describes your license/copyright +$wgRightsUrl = "http://creativecommons.org/licenses/by-sa/2.0/"; +$wgRightsText = "Creative Commons Attribution-ShareAlike 2.0 license"; +$wgRightsIcon = "/cc-wiki.png"; + +# Path to the GNU diff3 utility. Used for conflict resolution. +$wgDiff3 = "/usr/bin/diff3"; + +$wgExternalDiffEngine = 'wikidiff2'; + +# Query string length limit for ResourceLoader. You should only set this if +# your web server has a query string length limit (then set it to that limit), +# or if you have suhosin.get.max_value_length set in php.ini (then set it to +# that value) +$wgResourceLoaderMaxQueryLength = -1; + +# End of automatically generated settings. +# Add more configuration options below. + +#Only Allow Signed-in users to edit +$wgGroupPermissions['*']['edit'] = false; + +#Allow bureaucrat group access to oversight options +$wgGroupPermissions['bureaucrat']['hideuser'] = true; +$wgGroupPermissions['bureaucrat']['deletelogentry'] = true; +$wgGroupPermissions['bureaucrat']['deleterevision'] = true; +$wgGroupPermissions['bureaucrat']['suppressrevision'] = true; +$wgGroupPermissions['bureaucrat']['suppressionlog'] = true; + +#Allow Subpages on Main Namespace +$wgNamespacesWithSubpages[NS_MAIN] = true; + +#DNS Blacklists to use +$wgEnableDnsBlacklist = true; +$wgDnsBlacklistUrls = array( 'proxies.dnsbl.sorbs.net.', 'opm.tornevall.org.', 'xbl.spamhaus.org.' ); + +#Disable Hit Counter for Performance +$wgDisableCounters = TRUE; +#Disable IP in Header to avoid cache issue +$wgShowIPinHeader = FALSE; + +#Job Runs by cron +$wgJobRunRate = 0; + +# Allow external images from a few sites +$wgAllowExternalImagesFrom = array( 'http://tile.openstreetmap.org/', 'http://svenanders.openstreetmap.de/', 'http://josm.openstreetmap.de/', 'http://trac.openstreetmap.org/', 'http://rweait.dev.openstreetmap.org/' ); + +$wgNoFollowDomainExceptions = array( 'www.openstreetmap.org', 'josm.openstreetmap.de', 'taginfo.openstreetmap.org', 'blog.openstreetmap.org', 'wiki.osmfoundation.org' ); + +#FIXME - move to specific +$wgForceUIMsgAsContentMsg = array( 'mainpage-url', 'portal-url', 'mapfeatures-url', 'helppage' ); + +#FIXME - move to specific +$wgAllowUserJs = TRUE; +$wgAllowUserCss = TRUE; + +#FIXME - move to specific +#DE +define('NS_LANG_DE', 200); +$wgExtraNamespaces[NS_LANG_DE] = 'DE'; +$wgNamespacesWithSubpages[NS_LANG_DE] = TRUE; +$wgContentNamespaces[] = NS_LANG_DE; +define('NS_LANG_DE_TALK', 201); +$wgExtraNamespaces[NS_LANG_DE_TALK] = 'DE_talk'; +$wgNamespacesWithSubpages[NS_LANG_DE_TALK] = TRUE; + +#FR +define('NS_LANG_FR', 202); +$wgExtraNamespaces[NS_LANG_FR] = 'FR'; +$wgNamespacesWithSubpages[NS_LANG_FR] = TRUE; +$wgContentNamespaces[] = NS_LANG_FR; +define('NS_LANG_FR_TALK', 203); +$wgExtraNamespaces[NS_LANG_FR_TALK] = 'FR_talk'; +$wgNamespacesWithSubpages[NS_LANG_FR_TALK] = TRUE; + +#ES +define('NS_LANG_ES', 204); +$wgExtraNamespaces[NS_LANG_ES] = 'ES'; +$wgNamespacesWithSubpages[NS_LANG_ES] = TRUE; +$wgContentNamespaces[] = NS_LANG_ES; +define('NS_LANG_ES_TALK', 205); +$wgExtraNamespaces[NS_LANG_ES_TALK] = 'ES_talk'; +$wgNamespacesWithSubpages[NS_LANG_ES_TALK] = TRUE; + +#IT +define('NS_LANG_IT', 206); +$wgExtraNamespaces[NS_LANG_IT] = 'IT'; +$wgNamespacesWithSubpages[NS_LANG_IT] = TRUE; +$wgContentNamespaces[] = NS_LANG_IT; +define('NS_LANG_IT_TALK', 207); +$wgExtraNamespaces[NS_LANG_IT_TALK] = 'IT_talk'; +$wgNamespacesWithSubpages[NS_LANG_IT_TALK] = TRUE; + +#NL +define('NS_LANG_NL', 208); +$wgExtraNamespaces[NS_LANG_NL] = 'NL'; +$wgNamespacesWithSubpages[NS_LANG_NL] = TRUE; +$wgContentNamespaces[] = NS_LANG_NL; +define('NS_LANG_NL_TALK', 209); +$wgExtraNamespaces[NS_LANG_NL_TALK] = 'NL_talk'; +$wgNamespacesWithSubpages[NS_LANG_NL_TALK] = TRUE; + +#RU +define('NS_LANG_RU', 210); +$wgExtraNamespaces[NS_LANG_RU] = 'RU'; +$wgNamespacesWithSubpages[NS_LANG_RU] = TRUE; +$wgContentNamespaces[] = NS_LANG_RU; +define('NS_LANG_RU_TALK', 211); +$wgExtraNamespaces[NS_LANG_RU_TALK] = 'RU_talk'; +$wgNamespacesWithSubpages[NS_LANG_RU_TALK] = TRUE; + +#JA +define('NS_LANG_JA', 212); +$wgExtraNamespaces[NS_LANG_JA] = 'JA'; +$wgNamespacesWithSubpages[NS_LANG_JA] = TRUE; +$wgContentNamespaces[] = NS_LANG_JA; +define('NS_LANG_JA_TALK', 213); +$wgExtraNamespaces[NS_LANG_JA_TALK] = 'JA_talk'; +$wgNamespacesWithSubpages[NS_LANG_JA_TALK] = TRUE; + +$wgNamespacesToBeSearchedDefault[NS_LANG_DE] = TRUE; +$wgNamespacesToBeSearchedDefault[NS_LANG_FR] = TRUE; +$wgNamespacesToBeSearchedDefault[NS_LANG_ES] = TRUE; +$wgNamespacesToBeSearchedDefault[NS_LANG_IT] = TRUE; +$wgNamespacesToBeSearchedDefault[NS_LANG_NL] = TRUE; +$wgNamespacesToBeSearchedDefault[NS_LANG_RU] = TRUE; +$wgNamespacesToBeSearchedDefault[NS_LANG_JA] = TRUE; + +<% if @mediawiki[:site_readonly] -%> +$wgReadOnly = "<%= @mediawiki[:site_readonly] %>"; +<% end -%> + +<% Dir.glob("#{@mediawiki[:directory]}/LocalSettings.d/*.php") do |file| -%> +<%= "require_once('#{file}');" %> +<% end -%> + diff --git a/cookbooks/mediawiki/templates/default/apache.erb b/cookbooks/mediawiki/templates/default/apache.erb new file mode 100644 index 000000000..40e206d1b --- /dev/null +++ b/cookbooks/mediawiki/templates/default/apache.erb @@ -0,0 +1,230 @@ +# DO NOT EDIT - This file is being maintained by Chef + + + ServerName <%= @name %> +<% @aliases.each do |alias_name| -%> + ServerAlias <%= alias_name %> +<% end -%> + + ServerAdmin webmaster@openstreetmap.org + + CustomLog /var/log/apache2/<%= @name %>-access.log combined + ErrorLog /var/log/apache2/<%= @name %>-error.log + + DocumentRoot <%= @directory %> + + php_admin_value open_basedir <%= @directory %>/:/usr/share/php/:/tmp/ + #php_admin_value disable_functions "exec,shell_exec,system,passthru,popen,proc_open" + php_value memory_limit 128M + php_value max_execution_time 240 + php_value upload_max_filesize 70M + php_value post_max_size 100M + + RedirectMatch 301 ^/$ /wiki/Main_Page + + #Historical Compatibility Links + RedirectMatch 301 ^/index\.php$ /w/index.php + RedirectMatch 301 ^/index\.php/(.*)$ /wiki/$1 + RedirectMatch 301 ^/skins/(.*)$ /w/skins/$1 + RedirectMatch 301 ^/images/(.*)$ /w/images/$1 + RedirectMatch 301 ^/api\.php$ /w/api.php + RedirectMatch 301 ^/opensearch_desc\.php$ /w/opensearch_desc.php + + Alias /wiki <%= @mediawiki[:directory] %>/index.php + + #Support /pagename -> /wiki/pagename + RewriteEngine on + RewriteCond %{REQUEST_URI} !^/w/ + RewriteCond %{REQUEST_URI} !^/wiki/ + RewriteCond %{REQUEST_URI} !^/index\.php + RewriteCond %{REQUEST_URI} !^/skins/ + RewriteCond %{REQUEST_URI} !^/images/ + RewriteCond %{REQUEST_URI} !^/api\.php$ + RewriteCond %{REQUEST_URI} !^/opensearch_desc\.php$ + RewriteCond %{REQUEST_URI} !^/server-status + RewriteCond %{LA-U:REQUEST_FILENAME} !-f + RewriteCond %{LA-U:REQUEST_FILENAME} !-d + RewriteRule ^/(.*) /wiki/$1 [R,L] + + > + Options -Indexes + + + /images/> + # No php execution in the upload area + php_admin_flag engine off + Options -ExecCGI -Includes -Indexes + AllowOverride None + + + /images/thumb/> + RewriteEngine on + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/page([0-9]+)-([0-9]+)px-.*$ /w/thumb.php?f=$1&page=$2&width=$3 [L,QSA,B] + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/page([0-9]+)-([0-9]+)px-.*$ /w/thumb.php?f=$1&page=$2&width=$3&archived=1 [L,QSA,B] + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ /w/thumb.php?f=$1&width=$2 [L,QSA,B] + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ /w/thumb.php?f=$1&width=$2&archived=1 [L,QSA,B] + + + /maintenance/> + Order allow,deny + Deny from all + + + /LocalSettings.php> + Order allow,deny + Deny from all + + + /images/> + Options -ExecCGI -Includes -Indexes + AllowOverride None + AddType text/plain .html .htm .shtml + php_admin_flag engine off + + + /cache/> + Options -ExecCGI -Includes -Indexes + AllowOverride None + AddType text/plain .html .htm .shtml + php_admin_flag engine off + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + +<% if @mediawiki[:enable_ssl] -%> + + ServerName <%= @name %> +<% @aliases.each do |alias_name| -%> + ServerAlias <%= alias_name %> +<% end -%> + + ServerAdmin webmaster@openstreetmap.org + + SSLEngine on + + CustomLog /var/log/apache2/<%= @name %>-secure-access.log combined + ErrorLog /var/log/apache2/<%= @name %>-secure-error.log + + DocumentRoot <%= @directory %> + + php_admin_value open_basedir <%= @directory %>/:/usr/share/php/:/tmp/ + #php_admin_value disable_functions "exec,shell_exec,system,passthru,popen,proc_open" + php_value memory_limit 128M + php_value max_execution_time 240 + php_value upload_max_filesize 70M + php_value post_max_size 100M + + RedirectMatch 301 ^/$ /wiki/Main_Page + + #Historical Compatibility Links + RedirectMatch 301 ^/index\.php$ /w/index.php + RedirectMatch 301 ^/index\.php/(.*)$ /wiki/$1 + RedirectMatch 301 ^/skins/(.*)$ /w/skins/$1 + RedirectMatch 301 ^/images/(.*)$ /w/images/$1 + RedirectMatch 301 ^/api\.php$ /w/api.php + RedirectMatch 301 ^/opensearch_desc\.php$ /w/opensearch_desc.php + + Alias /wiki <%= @mediawiki[:directory] %>/index.php + + #Support /pagename -> /wiki/pagename + RewriteEngine on + RewriteCond %{REQUEST_URI} !^/w/ + RewriteCond %{REQUEST_URI} !^/wiki/ + RewriteCond %{REQUEST_URI} !^/index\.php + RewriteCond %{REQUEST_URI} !^/skins/ + RewriteCond %{REQUEST_URI} !^/images/ + RewriteCond %{REQUEST_URI} !^/api\.php$ + RewriteCond %{REQUEST_URI} !^/opensearch_desc\.php$ + RewriteCond %{REQUEST_URI} !^/server-status + RewriteCond %{LA-U:REQUEST_FILENAME} !-f + RewriteCond %{LA-U:REQUEST_FILENAME} !-d + RewriteRule ^/(.*) /wiki/$1 [R,L] + + > + Options -Indexes + + + /images/> + # No php execution in the upload area + php_admin_flag engine off + Options -ExecCGI -Includes -Indexes + AllowOverride None + + + /images/thumb/> + RewriteEngine on + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ /w/thumb.php?f=$1&width=$2 [L,QSA,B] + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ /w/thumb.php?f=$1&width=$2&archived=1 [L,QSA,B] + + + /maintenance/> + Order allow,deny + Deny from all + + + /LocalSettings.php> + Order allow,deny + Deny from all + + + /images/> + Options -ExecCGI -Includes -Indexes + AllowOverride None + AddType text/plain .html .htm .shtml + php_admin_flag engine off + + + /cache/> + Options -ExecCGI -Includes -Indexes + AllowOverride None + AddType text/plain .html .htm .shtml + php_admin_flag engine off + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + + + Order allow,deny + Deny from all + + +<% end -%> diff --git a/cookbooks/mediawiki/templates/default/mediawiki-backup.cron.erb b/cookbooks/mediawiki/templates/default/mediawiki-backup.cron.erb new file mode 100755 index 000000000..d4d473c7e --- /dev/null +++ b/cookbooks/mediawiki/templates/default/mediawiki-backup.cron.erb @@ -0,0 +1,15 @@ +#!/bin/bash +T=`mktemp -d -t -p /var/tmp mediawiki-<%= @name %>.XXXXXXXXXX` +D=`date +%Y-%m-%d` +B=wiki-<%= @name %>-$D.tar.gz + +mkdir $T/wiki-<%= @name %>-$D +mysqldump --user="<%= @database_params[:username] %>" --password="<%= @database_params[:password] %>" --opt --skip-lock-tables --single-transaction "<%= @database_params[:name] %>" | xz -9c > $T/wiki-<%= @name %>-$D/wiki.sql.xz +ln -s <%= @directory %> $T/wiki-<%= @name %>-$D/www +#make backup rsyncable +GZIP="--rsyncable -9" +export GZIP +nice tar --create --gzip --dereference --directory=$T --file=$T/$B wiki-<%= @name %>-$D +nice rsync $T/$B backup::backup --fuzzy + +rm -rf $T diff --git a/cookbooks/mediawiki/templates/default/mediawiki.cron.erb b/cookbooks/mediawiki/templates/default/mediawiki.cron.erb new file mode 100644 index 000000000..5e4bf532d --- /dev/null +++ b/cookbooks/mediawiki/templates/default/mediawiki.cron.erb @@ -0,0 +1,5 @@ +10 1 * * * <%= @user %> nice php -d memory_limit=1024M -d error_reporting=22517 <%= @directory %>/w/maintenance/generateSitemap.php --server="http://<%= @name %>" --urlpath="http://<%= @name %>/" --fspath="<%= @directory %>" --quiet +0,10,20,40 * * * * www-data nice php -d memory_limit=1024M -d error_reporting=22517 <%= @directory %>/w/maintenance/runJobs.php --server="http://<%= @name %>" --maxtime=300 --memory-limit=1024M --quiet +35,55 * * * * www-data nice php -d memory_limit=1024M -d error_reporting=22517 <%= @directory %>/w/maintenance/runJobs.php --server="http://<%= @name %>" --maxtime=60 --type=enotifNotify --memory-limit=1024M --quiet +10 2 * * * www-data find /tmp/ -maxdepth 1 -type f -user www-data -mmin +90 -name 'gs_*' -delete +10 2 * * * www-data find /tmp/ -maxdepth 1 -type f -user www-data -mmin +90 -name 'magick-*' -delete diff --git a/cookbooks/mediawiki/templates/default/mw-ext-AbuseFilter.inc.php.erb b/cookbooks/mediawiki/templates/default/mw-ext-AbuseFilter.inc.php.erb new file mode 100644 index 000000000..4528b2230 --- /dev/null +++ b/cookbooks/mediawiki/templates/default/mw-ext-AbuseFilter.inc.php.erb @@ -0,0 +1,10 @@ + false, + '1' => 'User %code%-1', + '2' => 'User %code%-2', + '3' => 'User %code%-3', + '4' => 'User %code%-4', + '5' => 'User %code%-5', + 'N' => 'User %code%-N', +); diff --git a/cookbooks/mediawiki/templates/default/mw-ext-CheckUser.inc.php.erb b/cookbooks/mediawiki/templates/default/mw-ext-CheckUser.inc.php.erb new file mode 100644 index 000000000..0f738689c --- /dev/null +++ b/cookbooks/mediawiki/templates/default/mw-ext-CheckUser.inc.php.erb @@ -0,0 +1,7 @@ + TBLSRC_LOCALPAGE, + 'src' => 'MediaWiki:Titleblacklist', + ), + array( + 'type' => TBLSRC_URL, + 'src' => 'http://meta.wikimedia.org/w/index.php?title=Title_blacklist&action=raw', + ), +); diff --git a/cookbooks/wiki/README.rdoc b/cookbooks/wiki/README.rdoc new file mode 100644 index 000000000..3de2ec7a3 --- /dev/null +++ b/cookbooks/wiki/README.rdoc @@ -0,0 +1,8 @@ += DESCRIPTION: + += REQUIREMENTS: + += ATTRIBUTES: + += USAGE: + diff --git a/cookbooks/wiki/attributes/default.rb b/cookbooks/wiki/attributes/default.rb new file mode 100644 index 000000000..2d4ae9474 --- /dev/null +++ b/cookbooks/wiki/attributes/default.rb @@ -0,0 +1,3 @@ + +#Force apache to listen only on localhost +#default[:apache][:listen_address] = "127.0.0.1" diff --git a/cookbooks/wiki/files/default/favicon.ico b/cookbooks/wiki/files/default/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..975e1cb0d9a56a11d5843a5bc851bd8ed2f6b0ca GIT binary patch literal 15086 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�#j=ksUfAVnr!e>MY6m%(|o7p5d4cgLN_zk-I;Rmhcx5BUd+NB z7?lYdE2nH+XL16+F*Ep=@V`@z20rGj;CIw#`S6K%cm(?{|BR1C4iLW-<*^wz&s>>i z_q3CzF2#9jHq4i2qkLsH#&fW%OVeSV#M*Wv|Is6UrhSg^Kd^glcGPq2U>U0o&D;e2 z>h(jL1iylo^Dl5j@65yt-Lp=XDCHzEw&A^EF zh5oSb6}Gs#*_Uura5ez`W8mLI68}jDPhUwQH*oX(`*WOHm?2jJKIw9TgR|qvpTq2d zj~xj2Nj^u|jndsr4TfrN8K`E1qnl11+Z_>k+sgSDxv1D1CsNa&2i|Z+4UutP`;y|&T4w3oVqj$Tyx4GVzfj>z&6ixmr-8+5pssiWS_K=BW5RGa*RT= zK^jYXD0z8`ywfh4T}V;lavbOV6uUSnk&wZibkYd&sy=+L&)-KK);8q-71V8PA%j^( z#YOq=F6TWx|00JI{7=p%ZWp16*EY7*v4SkHK#@GeB@=Uu#-pQ8u z2=X2q@**>KcsDEx%~*8h@8SbJMk3uFN?e{$suGY z#$GJbpypEzT9!xpsS3DIZ31yRVI~o`MVu2cLXI5juqKc99DJRElTIFsxp)F=cmg>X zbimPz6XZ#Nckl~7$(FFPb;`mPV2OhF5%@TB*g!+x0j}#S6TH))3z%$uF4rpS52fdO zxek`gGng97MqWmW=%BO*6S~M$>*zw4j`9qHguIRlkyBSr3{e&KP1W#2b%@OZAIfqy zQnt4qw$(_xYmU=}tV0xvxyT>$kU!xgPuwl-v0Mo!#V^IB92skboXC${Aj^cAjQ%0g zy9a2<0oyS(kj~RV>fTD)b#^}`-k;mCobUAUhx`-W(2y{Dq<#BRekp9|LKpV(OSU9* zQ575JrfI~oX)9u#6?ruBQ}~I3K(mxf%L1*O?`h&U%J%cAvwL|wVr3t6;hAu-Ytqi6 z_&qk|W$%=mUGO`O$x*fhOl(99Gk6BsjB&)TVmli0V+z?Xs=ru3*mD8YXd>M^Y(54Ld; z{2uUAI^vY`5p@Z_weK}DnmgDZb+9L5CokmiBK~?JE^>wJZ1bDhGHxJiz{su%D|@3> zvimfA{`>(xTyl=OrXAcjkRQpyy;Lx!rkBp_qNAsF(XhUqq6shd z=zfZT!pU(8;CsYt{!x1Ey;rFWb+)b%ypx=jc?5QLfcKx?%lisXaJH$EF%PW7epm$@ zrF+K7lMAUQ({sOkOwWI0Vdmj-!TZ!ONuwl#qzhq7RI0bSofjv6Klj0vuSegX{l4dN z?4WTz*sV!Cs}rb>=-3-XlKsF{V`bc+}|+KV@4d~f;p(>%<7aOKOs`Phrbxj=_{#<`$Qxmb{C zKB!uGe_94{{?fJgKQlBxo~@tvpG6M6+j}|oY~ua-wczb0asBTl!PoTrbGK`gwydU5 zf0kx)wiT!*pM3Hs>htGLzoSwqzk~Y0SN>Mdh~Qn+5JhhZ`ZE5-@ArRhsb}S*;#!)o z>&>6IChkRV$k$rC)lVPnu}rVsvV(8?%9rVZ2ex=#-}_eI*{Z_&;+nEI+uPe85cfr+ z(SH{FVEmNbZof_RgH$!vJ+0_!$g0sc_ZRdvwv=`?9II(-cvf6XKO^+Jk_Yj9liT`e zaZh#4p^_}!{SSW&{UK|3)g7zQ7jhf_^o6JRJZeg!CnV3=nJOG;=_#$P+gVXj@jZD> z`Adaeb!El2&an#gQYf*%YexTv=>0fh7rh?^e85mJeOz78EAOb<8w>|;72jLVgZOO^ zc^**&+BtK$od4~`rx>+sUcYvo)T1K$I==ghAM**+=wzZN1$95UTEiuN&1F$bLobBX zOVEh@g5K6HdN+_$^-FyNOLfx4-V<8^cY3w2Uhn&pQ_)*X{HTQo)LdchLSMiy(c7>V zJq`DQkM)>~Z}Q_$|A3FE6nwt7k1q@W=Xau)z~3i*TLrld_;zDdFZD0TLu#qcyvva8 zTUhLWsT^&~5o>C>{Nh;buWLg+A<>`Eh`g{GILmXdy}$4abiZll~?k3g^s{gpM)-3ozed|kYG0Q?v#K66QL2eIfxe|QH zu>XG%`_3KPwxX8&uvFW>@7@i3;KUwQkD!ksXkgU7r8R;+3*L{p*{#UuJr#NUO65L& zt>z%Vt2)K!tqt4^EVIecUlotXJ_Wz{mU+Q#*xy)3i# z^Y0J50Uqv`YT7?IlE*)J{Y^etlf^qL&+@C;`*~;eIX;1!@PU#XK2V&+hjHyd+j%}? zsNgf2O3YV2muYL!AEAq)PWSocbw=SAgpZJUdLpt=KNn&B2p%#~KbEz3aXo5Wg@Z%< z+R@$oR-TN1_VSzPb=bm>{p2xz8oe9OzVad$R%WuYtDMbPpHAS4o=NPRMtZp#wTtZH zQ(V_3=Tq$p^l7N9;`^djE9OARE_|m>KeQ3DlMMKvAUSL?TRX%#sIzyVHl;#6qyacU zOGM8_S%>*s4?f7-&};G7cfQS~vQumYmYl9%iaLl9`{mGVh@;6EPXcqQs?Fn^sw`HU zdW%u#xMitUAo*rdqwF$if3sNITdeVA4Prl!+KC)BJ?w?q3JhG-^BkxZ_t)g|uYdj{ z)K9mw5i;9=O{}cL2p+7!mjcNkPb5&Yo1WxuO+B~uw!baDA3@J-I=+gy(c;z>rt5P; z_6vOjEQc>GgB{kQm#8NMTf}~_!K>oN{1g1pwvF7^EaQl+1K&m+2;W;tCd|PoaJj&& zpC{)gcq$d+=BCoP)jG09)M}x3sa7s(%vGVGF;SlqwM^0XhZ+y|r#krZel7`AI}$Y}J!;#7u$_MRm65nb!XI0d<(GvH(taqqklG>DRTgm@ zf!(mejXnUIL8`|cgD*YiD&;!t`_Jm@xIliIr+{fE-CCXqnWg%PsG)cxM*jD@NjK^y zU6>y=qvrD=cB#R!)ze4)eZ7yS>1Csp5)5vERF#apG7S|)B)xv zoQt?W>Hq@&pN}}D`V8tYQr%@3_LTm9D|~Pt@V5?C^PiS~-*sv70I&lI-){r9-vrD{ zkihv%EJoC}y6}A&ztew)i{vLb;T-}tKPuH7mau$*)q@|qMDvp#sTLHpcXE$^5wjP# zYm>E>b?DdX>`*?J{=Tq-*u|Mm0^1h*e}M8-O{g(KlhUS=TK8zVLzl zDUV0s4!}>aXE#gzWhEv93tJHDK;%232D`iD6dO^~0&dIbZIG~YKQKMqti3 z4m0puc3}N?p=Q_NQ*pDYp1br-Twb0%mbQJtgII?mCbq||sx%fQ^1Wijft+FBvN#t0 zK;&8#=+i6@4Dk7aW9$WH=3c^Gy-7EFfxm|5f)e)X0S+6S3oK%oh|TSm7Ow9vW9>*Q zceJ-YpO$^;`!`%!Shxuo(zN)#AUSH+7qoqxHH^L}_`^EXHwBg|dM%4!3;UYSaHqPK z1HkLTsUU~p>wVCHzT=}TnTJO!UVA<<>7WN9B<(gV1aUf z8=v)5^3g6i=PJ&kW^Uy1s2g~uN5TLdAq(5XBRm$hvAVyO&&bbkYZ$flxyjutzb$Zu zmZWubIX0GWMz1D(aU*=8ut%{rS`w)FM|$9!J6I7=@o|@evoQ*r++TfxbKsY%8syxf ztl;`4#QJ&}pRdZ~(;69SEvOYGMj7+`@XGH`zMtAI@S)}SmNGs%;F_9x^5O>z{}OwD z_J0D`I%J#=^a8h8C=YgWDe~047Ub2oLe9cmRK*N2{ha@JVqyOF2zV%XgH*m6M-JCB6e&~0zz`s`Bll~1~{qgaO6HhmV`#UQA zU6tynagRF{d>H5dgH4HN#P`7e4=nScYUicN%=CMfjW}HVH;W;)HNfhdGHz7^Edkw} zCO?irH?1IX{U*?j*CX6};}YG3@k3JMT|Meg+qGPjo+fLcpcxn>0b1EW^t~rkE{HeYc=q1-RK9cME)c7YGd!3 zYp?4SIjWFHjH-w>SQYH$-|l`D`?5{EdFv*AyYMWRVLzsJskwR#K4N@?kJ~DxcN{Pk zq-Ihx0%4P6v`mfVw=xRac6fWKmO>$tSCOihNV2xikJ~WEx$w4 z$Rke64~0%de5efSe8q@^`8MRG=sl?mYq-9>nB|!Vc@#ZwBL5Wmp9%XgTO98|J$FFc zRgeC(o9C}y{=A4C)$rfN_F*mz^>8up+?<9Sjw6?Hqb_Gf9v4QxTnxFJ0sVC7kKtjL z<{Gf5Tdtu7)Rr8bZbF|z4f3o)XFs2`m$0lkhZCsFOe0RG(1UaH=R^=C-= z4~y7_o+8LQ_k9csygEvz*n-yB9CEB1PInAgq6Gv7jA z&gbBlzHgrOWfl2aTs5KIdhey!Qy+mr~m)} literal 0 HcmV?d00001 diff --git a/cookbooks/wiki/files/default/osm_logo_wiki.png b/cookbooks/wiki/files/default/osm_logo_wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..f4a4536c212e1aa0a20a99d7bd6d5f329d5449ae GIT binary patch literal 27307 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 W^R(2T$Kj9w0000 "dump.wiki.osm.org" + }) +end + +template "/etc/cron.d/wiki-osm-org-dump" do + owner "root" + group "root" + mode 0644 + source "cron_wiki_dump.erb" +end + diff --git a/cookbooks/wiki/templates/default/apache_wiki_dump.erb b/cookbooks/wiki/templates/default/apache_wiki_dump.erb new file mode 100644 index 000000000..529404f4c --- /dev/null +++ b/cookbooks/wiki/templates/default/apache_wiki_dump.erb @@ -0,0 +1,20 @@ +# DO NOT EDIT - This file is being maintained by Chef + + + ServerName <%= @name %> + ServerAlias <%= @aliases %> + ServerAdmin webmaster@openstreetmap.org + + CustomLog /var/log/apache2/<%= @name %>-access.log combined + ErrorLog /var/log/apache2/<%= @name %>-error.log + + DocumentRoot <%= @directory %> + + > + Options Indexes FollowSymLinks MultiViews + AllowOverride All + IndexIgnore .ht* . robots.txt HEADER.html HEADER.cgi logo.png style.css + IndexOptions FancyIndexing FoldersFirst NameWidth=* TrackModified + IndexOrderDefault Descending Date + + diff --git a/cookbooks/wiki/templates/default/cron_wiki_dump.erb b/cookbooks/wiki/templates/default/cron_wiki_dump.erb new file mode 100644 index 000000000..a84d2c58d --- /dev/null +++ b/cookbooks/wiki/templates/default/cron_wiki_dump.erb @@ -0,0 +1,3 @@ +#!/bin/bash +# DO NOT EDIT - This file is being maintained by Chef + diff --git a/cookbooks/wiki/templates/default/robots.txt.erb b/cookbooks/wiki/templates/default/robots.txt.erb new file mode 100644 index 000000000..325a1f9ec --- /dev/null +++ b/cookbooks/wiki/templates/default/robots.txt.erb @@ -0,0 +1,25 @@ +User-agent: ia_archiver +Allow: / + +User-agent: 008 +Disallow: / + +User-agent: * +Disallow: /index.php/ +Disallow: /wiki/Lacking_proper_attribution +Disallow: /wiki/Spam +Allow: /w/load.php +Allow: /w/images/ +Allow: /w/skins/ +Disallow: /w/ +Disallow: /wiki/Special:Collection +Disallow: /wiki/Special:Random +Disallow: /wiki/Special%3ARandom +Disallow: /wiki/Special:Search + +User-agent: Exabot +Crawl-delay: 60 + +Sitemap: http://wiki.openstreetmap.org/sitemap-index-wiki.xml + +Host: wiki.openstreetmap.org diff --git a/cookbooks/wiki/templates/default/squid.conf.erb b/cookbooks/wiki/templates/default/squid.conf.erb new file mode 100644 index 000000000..55588a0a5 --- /dev/null +++ b/cookbooks/wiki/templates/default/squid.conf.erb @@ -0,0 +1,11 @@ +acl osmwiki_sites dstdomain wiki.openstreetmap.org wiki.osm.org + +http_access allow osmwiki_sites + +cache_peer localhost parent 80 0 no-query originserver name=osmwikiAccel login=PASS connect-timeout=60 no-digest weight=1000 + +cache_peer_access osmwikiAccel allow osmtile_sites +cache_peer_access osmwikiAccel deny all + +#---------------------------------- + -- 2.43.2