Benutzer:Andreas Plank/Wiki-Skripte: Unterschied zwischen den Versionen
(+Arrays) |
|||
(15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | == | + | __INHALTSVERZEICHNIS__ |
+ | |||
+ | == Extensionen herunterladen und extrahieren == | ||
+ | |||
+ | {{Anker|download_and_extract_wiki_extensions.sh}}<!-- | ||
+ | -->BASH Skript <code>download_and_extract_wiki_extensions.sh</code> zum Herunterladen von Extensionen in das Benutzerverzeichnis <code>~/tmp</code> und extrahieren in den Wiki-Ordner <code>$wikiExtPath</code> | ||
+ | |||
+ | Hinweise: | ||
+ | * [[mediawikiwiki:Extension:Translate|Extension:Translate]] & Co manuelle Installation über https://www.mediawiki.org/wiki/MediaWiki_Language_Extension_Bundle, siehe [[#download_and_extract_MLEB_extensions.sh|<code>download_and_extract_MLEB_extensions.sh</code>]] | ||
+ | * [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi|Extension:SyntaxHighlight_GeSHi]] benötigt zusätzlich interne Installationen | ||
+ | * [[mediawikiwiki:Extension:SemanticMediaWiki|Extension:SemanticMediaWiki]] & Co über composer.local.json | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
− | # What does it do? dowload and extract a standard Wiki extension | + | # description: What does it do? dowload and extract a standard Wiki extension |
− | # requires: ~/tmp | + | # EXTURL stores the extension name and the download URL you can find the tar.gz URL e.g. at |
+ | # https://www.mediawiki.org/wiki/Special:ExtensionDistributor/MassEditRegex | ||
+ | # https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdistname=MassEditRegex&extdistversion=REL1_31 | ||
+ | # requires: ~/tmp | ||
+ | ### Variables Start | ||
wikiExtPath=/apps/mediawiki/www/extensions/ | wikiExtPath=/apps/mediawiki/www/extensions/ | ||
declare -A EXTURL # associative array | declare -A EXTURL # associative array | ||
− | |||
# find the tar.gz URL e.g. at https://www.mediawiki.org/wiki/Special:ExtensionDistributor/MassEditRegex | # find the tar.gz URL e.g. at https://www.mediawiki.org/wiki/Special:ExtensionDistributor/MassEditRegex | ||
− | EXTURL[MassEditRegex]=https://extdist.wmflabs.org/dist/extensions/MassEditRegex-REL1_31-fcc91e5.tar.gz | + | # EXTURL[CategoryTree]=https://extdist.wmflabs.org/dist/extensions/CategoryTree-REL1_31-c24e5ed.tar.gz |
− | EXTURL[MsUpload]=https://extdist.wmflabs.org/dist/extensions/MsUpload-REL1_31-2e2efd5.tar.gz | + | EXTURL[Arrays]=https://extdist.wmflabs.org/dist/extensions/Arrays-REL1_31-4a04cd6.tar.gz |
+ | # EXTURL[Cite]=https://extdist.wmflabs.org/dist/extensions/Cite-REL1_31-20e26df.tar.gz | ||
+ | # EXTURL[CodeMirror]=https://extdist.wmflabs.org/dist/extensions/CodeMirror-REL1_31-a435d54.tar.gz | ||
+ | # EXTURL[ConfirmEdit]=https://extdist.wmflabs.org/dist/extensions/ConfirmEdit-REL1_31-b52469c.tar.gz | ||
+ | # EXTURL[DismissableSiteNotice]=https://extdist.wmflabs.org/dist/extensions/DismissableSiteNotice-REL1_31-73a6b72.tar.gz | ||
+ | # EXTURL[Echo]=https://extdist.wmflabs.org/dist/extensions/Echo-REL1_31-ed7f8f4.tar.gz | ||
+ | EXTURL[EventLogging]=https://extdist.wmflabs.org/dist/extensions/EventLogging-REL1_31-3fddc40.tar.gz | ||
+ | # EXTURL[Gadgets]=https://extdist.wmflabs.org/dist/extensions/Gadgets-REL1_31-bac29ae.tar.gz | ||
+ | # EXTURL[InputBox]=https://extdist.wmflabs.org/dist/extensions/InputBox-REL1_31-dfec261.tar.gz | ||
+ | # EXTURL[WikimediaMessages]=https://extdist.wmflabs.org/dist/extensions/WikimediaMessages-REL1_31-a600cfd.tar.gz | ||
+ | # EXTURL[MassEditRegex]=https://extdist.wmflabs.org/dist/extensions/MassEditRegex-REL1_31-fcc91e5.tar.gz | ||
+ | # EXTURL[MsCalendar]=https://extdist.wmflabs.org/dist/extensions/MsCalendar-REL1_31-4cb0d01.tar.gz | ||
+ | # EXTURL[MsUpload]=https://extdist.wmflabs.org/dist/extensions/MsUpload-REL1_31-2e2efd5.tar.gz | ||
+ | # EXTURL[Nuke]=https://extdist.wmflabs.org/dist/extensions/Nuke-REL1_31-c6ec842.tar.gz | ||
+ | # EXTURL[SemanticInternalObjects]=https://extdist.wmflabs.org/dist/extensions/SemanticInternalObjects-REL1_31-2b195cf.tar.gz | ||
+ | # EXTURL[Thanks]=https://extdist.wmflabs.org/dist/extensions/Thanks-REL1_31-a845a46.tar.gz | ||
+ | # EXTURL[UserMerge]=https://extdist.wmflabs.org/dist/extensions/UserMerge-REL1_31-a641f0c.tar.gz | ||
+ | EXTURL[UploadWizard]=https://extdist.wmflabs.org/dist/extensions/UploadWizard-REL1_31-1ba0e4e.tar.gz | ||
+ | # EXTURL[Variables]=https://extdist.wmflabs.org/dist/extensions/Variables-REL1_31-872663b.tar.gz | ||
+ | |||
+ | ### Variables End | ||
+ | |||
+ | # get extensionList | ||
+ | extensionList="" | ||
+ | for thisExt in "${!EXTURL[@]}"; | ||
+ | do | ||
+ | [[ -z ${extensionList// /} ]] && extensionList="$thisExt" || extensionList="$extensionList $thisExt" | ||
+ | # test if extension matches in URL | ||
+ | if [[ ${EXTURL[$thisExt]} != *${thisExt}* ]];then | ||
+ | echo -e "\033[0;31m# WARNING ${thisExt} does not match in ${EXTURL[$thisExt]}\033[0m" | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | # prompt before starting | ||
+ | echo -e "\033[0;32m##########################\033[0m" | ||
+ | echo -e "\033[0;32m# Extract ${#EXTURL[@]} Extensions ...\033[0m" | ||
+ | echo -e "\033[0;32m# $extensionList\033[0m" | ||
+ | echo -e "\033[0;32m# ... to $wikiExtPath ?\033[0m" | ||
+ | echo -en "\033[0;32m# yes or no (default: no)\033[0m " | ||
+ | |||
+ | read yesno | ||
+ | if [[ -z ${yesno// /} ]];then yesno="no"; fi | ||
+ | case $yesno in | ||
+ | [yY]|[yY][eE][sS]) | ||
+ | echo "# continue ..." | ||
+ | ;; | ||
+ | [nN]|[nN][oO]) | ||
+ | echo "### Stop"; | ||
+ | exit 1 | ||
+ | ;; | ||
+ | *) | ||
+ | if [[ -z ${yesno// /} ]];then | ||
+ | echo -e "\033[0;32m### Stop\033[0m" | ||
+ | else | ||
+ | echo "### Wrong input „${yesno}“ (Stop)" | ||
+ | fi | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
i_ext=1 | i_ext=1 | ||
Zeile 24: | Zeile 94: | ||
wget --no-verbose "${EXTURL[$thisExt]}" | wget --no-verbose "${EXTURL[$thisExt]}" | ||
if [[ -d "${wikiExtPath}${thisExt}" ]];then | if [[ -d "${wikiExtPath}${thisExt}" ]];then | ||
− | # timed backup e.g. | + | # last modification timed as backup date e.g. MassEditRegex_2017-09-22 |
− | + | modDate=$(stat -c %y "${wikiExtPath}${thisExt}") | |
+ | modDate=${modDate%% *} # remove from 1st space to the end in date time: 2017-09-22 00:12:10.000000000 +0200 | ||
+ | thisBackupPath="${wikiExtPath}${thisExt}_${modDate}" | ||
echo "# Back up $thisExt to ${thisBackupPath} …" | echo "# Back up $thisExt to ${thisBackupPath} …" | ||
mv "${wikiExtPath}${thisExt}" "${thisBackupPath}"; | mv "${wikiExtPath}${thisExt}" "${thisBackupPath}"; | ||
Zeile 33: | Zeile 105: | ||
i_ext=$(( i_ext + 1 )) | i_ext=$(( i_ext + 1 )) | ||
done | done | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == '''M'''ediaWiki '''L'''anguage '''E'''xtension '''B'''undle herunterladen und extrahieren == | ||
+ | |||
+ | {{Anker|download_and_extract_MLEB_extensions.sh}}<!-- | ||
+ | -->BASH Skript <code>download_and_extract_MLEB_extensions.sh</code> zum Herunterladen von [https://www.mediawiki.org/wiki/MediaWiki_Language_Extension_Bundle https://www.mediawiki.org/wiki/'''M'''ediaWiki_'''L'''anguage_'''E'''xtension_'''B'''undle] in das Benutzerverzeichnis <code>~/tmp</code> und extrahieren in den Wiki-Ordner <code>$wikiExtPath</code> | ||
+ | |||
+ | Hinweise: | ||
+ | * MLEB enthält einen Ordner <code>./extensions</code> deshalb kann nicht das Skript [[#download_and_extract_wiki_extensions.sh|<code>download_and_extract_wiki_extensions.sh</code>]] verwendet werden | ||
+ | * BUG https://phabricator.wikimedia.org/T178895 muss eventuell nachgepflegt werden, damit Yandex funktioniert | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/bash | ||
+ | # download_and_extract_MLEB_extensions.sh | ||
+ | # Documentation: https://www.mediawiki.org/wiki/MediaWiki_Language_Extension_Bundle | ||
+ | # MLEB extracts to ./extensions/Babel ./extensions/Translate etc. | ||
+ | # the dowload package is extracted to tempPath (home user directory ~/tmp) | ||
+ | |||
+ | ### variables start | ||
+ | # modify according to your needs | ||
+ | mwLangExtBundlebUrl=https://translatewiki.net/mleb/MediaWikiLanguageExtensionBundle-2018.07.tar.bz2 | ||
+ | labelOldMLEB="MLEB-2018.04" | ||
+ | wikiExtPath=/apps/mediawiki/www/extensions/ | ||
+ | tempPath=~/tmp/ | ||
+ | ### variables end | ||
+ | |||
+ | # prompt before starting | ||
+ | echo -e "\033[0;32m##########################\033[0m" | ||
+ | echo -e "\033[0;32m# Download $mwLangExtBundlebUrl to ${tempPath} ...\033[0m" | ||
+ | echo -e "\033[0;32m# * back up old extensions Babel_$labelOldMLEB cldr_$labelOldMLEB Translate_$labelOldMLEB etc.\033[0m" | ||
+ | if [[ -d ${tempPath}extensions ]]; then | ||
+ | echo -e "\033[0;32m# * \033[0;31mremove ${tempPath}extensions\033[0;32m and extract MLEB to ${tempPath} \033[0m" | ||
+ | else | ||
+ | echo -e "\033[0;32m# * extract MLEB into $tempPath copy to $wikiExtPath ?\033[0m" | ||
+ | fi | ||
+ | echo -en "\033[0;32m# yes or no (default: no)\033[0m " | ||
+ | |||
+ | read yesno | ||
+ | if [[ -z ${yesno// /} ]];then yesno="no"; fi | ||
+ | case $yesno in | ||
+ | [yY]|[yY][eE][sS]) | ||
+ | echo "# continue ..." | ||
+ | ;; | ||
+ | [nN]|[nN][oO]) | ||
+ | echo "### Stop"; | ||
+ | exit 1 | ||
+ | ;; | ||
+ | *) | ||
+ | if [[ -z ${yesno// /} ]];then | ||
+ | echo -e "\033[0;32m### Stop\033[0m" | ||
+ | else | ||
+ | echo "### Wrong input „${yesno}“ (Stop)" | ||
+ | fi | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | |||
+ | cd "${tempPath}" | ||
+ | if [[ -d extensions ]]; then | ||
+ | echo "# remove extensions folder ..."; | ||
+ | rm -R extensions; | ||
+ | fi | ||
+ | echo "# Download ${mwLangExtBundlebUrl} to ${tempPath} …" | ||
+ | wget --no-verbose "${mwLangExtBundlebUrl}" | ||
+ | echo "# Extract ${mwLangExtBundlebUrl##*/} …" | ||
+ | tar -xjf ${mwLangExtBundlebUrl##*/} -C "${tempPath}" | ||
+ | |||
+ | for thisMLEBextension in "${tempPath}/extensions/"*;do | ||
+ | if [[ -d "$wikiExtPath${thisMLEBextension##*/}" ]];then | ||
+ | echo "# Back up in $wikiExtPath: ${thisMLEBextension##*/} -> ${thisMLEBextension##*/}_${labelOldMLEB} ..." | ||
+ | mv "$wikiExtPath${thisMLEBextension##*/}" "$wikiExtPath${thisMLEBextension##*/}_${labelOldMLEB}" | ||
+ | fi | ||
+ | echo "# Copy ${thisMLEBextension##*/} to $wikiExtPath${thisMLEBextension##*/} ..." | ||
+ | cp --preserve --recursive "$thisMLEBextension" "$wikiExtPath${thisMLEBextension##*/}" | ||
+ | done | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Some extensions of MediWiki are managed by composer, a snmall PHP script. This tool is intended to manage dependencies and needed versions of software components, such as MediaWiki extensions. It needs a basic configuration file (<code>composer.json</code> in the wiki root folder) and installation or removal of extensions is ''done on the command line''. | ||
+ | |||
+ | Documentation: | ||
+ | * [https://www.mediawiki.org/wiki/Composer Composer (MediaWiki)] | ||
+ | * [http://www.mediawiki.org/wiki/Category:Extensions_supporting_Composer Extensions supporting Composer (MediaWiki)] | ||
+ | * https://packagist.org/search/ search any composer managed extension | ||
+ | * Composer itself: https://getcomposer.org/doc/ the very composer documentation | ||
+ | |||
+ | |||
+ | == Extensions via Composer (PHP) == | ||
+ | |||
+ | |||
+ | Step 0: First install of PHP composer tool itself to a local shared <code>bin</code>-directory: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | if ! [[ -d ~/bin ]];then mkdir ~/bin; fi; # create user home bin directory | ||
+ | cd ~/bin # go to personal home bin directory | ||
+ | wget https://getcomposer.org/composer.phar | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Step 1: Manage your required extensions in file <code>composer.local.json</code> in the root wiki folder and '''not in''' <code>composer.json</code> wich is the basic setup shipped by the Mediawiki installation. | ||
+ | |||
+ | Step 2: [[#add extension|add extension]] | ||
+ | |||
+ | === Add an extension{{anchor|add extension}} === | ||
+ | |||
+ | Read the documentation of the extension what kind of version you need and so forth, the extension’s documentation should describe it sufficiently. | ||
+ | |||
+ | It is recommended to manage additional extensions in a separate file, read <code>composer.local.json-sample</code>, so use <code>composer.local.json</code> to add your extensions there: | ||
+ | <syntaxhighlight lang="javascript"> | ||
+ | { | ||
+ | "extra": { | ||
+ | "merge-plugin": { | ||
+ | "include": [ | ||
+ | "extensions/SyntaxHighlight_GeSHi/composer.json" | ||
+ | ] | ||
+ | } | ||
+ | }, | ||
+ | "require": { | ||
+ | "mediawiki/image-map": "dev-REL1_30", | ||
+ | "mediawiki/graph-viz": "~3.1", | ||
+ | "mediawiki/semantic-media-wiki": "~2.5", | ||
+ | "mediawiki/open-layers": "dev-master", | ||
+ | "mediawiki/semantic-result-formats": "~2.5", | ||
+ | "mediawiki/semantic-compound-queries": "~1.1", | ||
+ | "mediawiki/page-forms": "4.*", | ||
+ | "mediawiki/maps": "4.*" | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Step 3: [[#update of extensions|update extensions]]. | ||
+ | |||
+ | It’s rather recommended to use the extra <code>composer.local.json</code> than the “<code>require</code>”-command that will update your <code>composer.json</code> shipped by wiki software that may get overwritten the next wiki code update. | ||
+ | |||
+ | === Update extensions{{anchor|update of extensions}} === | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | # update only a single extension and their dependencies | ||
+ | cd /apps/mediawiki/www/extensions/ | ||
+ | php ~/bin/composer.phar update --no-dev mediawiki/graph-viz | ||
+ | |||
+ | # update all extensions and their dependencies | ||
+ | cd /apps/mediawiki/www/extensions/ | ||
+ | php ~/bin/composer.phar update --no-dev | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Remove an extension === | ||
+ | |||
+ | Note AP: not sure if remove command works also for <code>composer.local.json</code> | ||
+ | |||
+ | See https://getcomposer.org/doc/03-cli.md#remove | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd /apps/mediawiki/www/extensions/ | ||
+ | php ~/bin/composer.phar remove 'mediawiki/semantic-maps' | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Self Update of composer === | ||
+ | |||
+ | php ~/bin/composer.phar self-update | ||
+ | |||
+ | == SemanticMediaWiki installierern oder aktualisieren == | ||
+ | |||
+ | [[mediawikiwiki:Extension:SemanticMediaWiki|Extension:SemanticMediaWiki]] installieren via composer, d.h. in <code>composer.local.json</code> eintragen: | ||
+ | ... | ||
+ | require: { | ||
+ | "mediawiki/semantic-media-wiki": "~2.5", | ||
+ | "mediawiki/open-layers": "dev-master", | ||
+ | "mediawiki/semantic-result-formats": "~2.5", | ||
+ | "mediawiki/semantic-compound-queries": "~1.1", | ||
+ | "mediawiki/page-forms": "4.*", | ||
+ | "mediawiki/maps": "4.*" | ||
+ | } | ||
+ | ... | ||
+ | |||
+ | [[mediawikiwiki:Extension:SemanticInternalObjects|Extension:SemanticInternalObjects]] via [[#download_and_extract_wiki_extensions.sh|download_and_extract_wiki_extensions.sh]] | ||
+ | |||
+ | Einstellungen in <code>LocalSettings.php</code> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | // Define constants for my additional namespaces. | ||
+ | define("NS_CALENDAR", 3000); // This MUST be even. | ||
+ | define("NS_CALENDAR_TALK", 3001); // This MUST be the following odd integer. | ||
+ | $wgContentNamespaces[] = NS_CALENDAR; | ||
+ | |||
+ | switch($wgLanguageCode) {// depending on Wikis default language | ||
+ | case "de": | ||
+ | case "de-formal": | ||
+ | case "de-at": | ||
+ | case "de-ch": | ||
+ | $wgExtraNamespaces[NS_CALENDAR] = "Kalender";# becomes ns:kalender as Wiki-Code | ||
+ | $wgExtraNamespaces[NS_CALENDAR_TALK] = "Kalender_Diskussion"; // Note underscores in the namespace name. | ||
+ | break; | ||
+ | default: | ||
+ | $wgExtraNamespaces[NS_CALENDAR] = "Calendar"; # becomes ns:calendar as Wiki-Code | ||
+ | $wgExtraNamespaces[NS_CALENDAR_TALK] = "Calendar_talk"; // Note underscores in the namespace name. | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | # somewhere near the bottom | ||
+ | ############################################ | ||
+ | # Extension:SemanticMediaWiki & Co | ||
+ | ############################################ | ||
+ | |||
+ | enableSemantics( parse_url( $wgServer, PHP_URL_HOST ) ); | ||
+ | $smwgEnabledEditPageHelp=false; # suppress SMW help text in WikiEditor | ||
+ | wfLoadExtension( 'PageForms' ); | ||
+ | # $wgPageFormsLinkAllRedLinksToForms = true; | ||
+ | wfLoadExtension( 'OpenLayers' ); # @require SMW | ||
+ | # Extension:Maps | ||
+ | $GLOBALS['egMapsDefaultService'] = 'openlayers'; | ||
+ | $GLOBALS['egMapsAvailableServices'] = [ | ||
+ | 'openlayers', | ||
+ | 'leaflet', | ||
+ | ]; | ||
+ | $smwgEnabledFulltextSearch=true; // default: false | ||
+ | $smwgNamespacesWithSemanticLinks[NS_CALENDAR] = true; | ||
+ | $smwgNamespacesWithSemanticLinks[NS_CALENDAR_TALK] = false; | ||
+ | $smwgNamespacesWithSemanticLinks[NS_PROFILE] = true; | ||
+ | $smwgNamespacesWithSemanticLinks[NS_TASK] = true; | ||
+ | $srfgFirstDayOfWeek = 'Monday'; | ||
+ | /** | ||
+ | * Extension SemanticInternalObjects | ||
+ | * for n-ary subobject relations | ||
+ | */ | ||
+ | include_once("$IP/extensions/SemanticInternalObjects/SemanticInternalObjects.php"); | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | Datenbank aktualisieren: | ||
+ | cd /apps/mediawiki/www/ | ||
+ | php maintenance/update.php --conf ./LocalSettings.php | ||
+ | |||
+ | == Useful One liner commands == | ||
+ | |||
+ | === Move Patterns of Directories to Anther Directory === | ||
+ | It does not remove the folder when there is already an identical target folder | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | # one liner to move all *_2017*/ of extensions to /apps/mediawiki-bak/www/extensions/ | ||
+ | cd /apps/mediawiki/www/extensions/ && \ | ||
+ | for thisDir in *_2017*/; do \ | ||
+ | if ! [[ -d /apps/mediawiki-bak/www/extensions/"$thisDir" ]]; \ | ||
+ | then echo "Move $thisDir ..."; \ | ||
+ | mv "$thisDir" /apps/mediawiki-bak/www/extensions/; \ | ||
+ | fi; \ | ||
+ | done; | ||
</syntaxhighlight> | </syntaxhighlight> |
Aktuelle Version vom 14. Juli 2019, 12:40 Uhr
Extensionen herunterladen und extrahieren
BASH Skript download_and_extract_wiki_extensions.sh
zum Herunterladen von Extensionen in das Benutzerverzeichnis ~/tmp
und extrahieren in den Wiki-Ordner $wikiExtPath
Hinweise:
- Extension:Translate & Co manuelle Installation über https://www.mediawiki.org/wiki/MediaWiki_Language_Extension_Bundle, siehe
download_and_extract_MLEB_extensions.sh
- Extension:SyntaxHighlight_GeSHi benötigt zusätzlich interne Installationen
- Extension:SemanticMediaWiki & Co über composer.local.json
#!/bin/bash
# description: What does it do? dowload and extract a standard Wiki extension
# EXTURL stores the extension name and the download URL you can find the tar.gz URL e.g. at
# https://www.mediawiki.org/wiki/Special:ExtensionDistributor/MassEditRegex
# https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdistname=MassEditRegex&extdistversion=REL1_31
# requires: ~/tmp
### Variables Start
wikiExtPath=/apps/mediawiki/www/extensions/
declare -A EXTURL # associative array
# find the tar.gz URL e.g. at https://www.mediawiki.org/wiki/Special:ExtensionDistributor/MassEditRegex
# EXTURL[CategoryTree]=https://extdist.wmflabs.org/dist/extensions/CategoryTree-REL1_31-c24e5ed.tar.gz
EXTURL[Arrays]=https://extdist.wmflabs.org/dist/extensions/Arrays-REL1_31-4a04cd6.tar.gz
# EXTURL[Cite]=https://extdist.wmflabs.org/dist/extensions/Cite-REL1_31-20e26df.tar.gz
# EXTURL[CodeMirror]=https://extdist.wmflabs.org/dist/extensions/CodeMirror-REL1_31-a435d54.tar.gz
# EXTURL[ConfirmEdit]=https://extdist.wmflabs.org/dist/extensions/ConfirmEdit-REL1_31-b52469c.tar.gz
# EXTURL[DismissableSiteNotice]=https://extdist.wmflabs.org/dist/extensions/DismissableSiteNotice-REL1_31-73a6b72.tar.gz
# EXTURL[Echo]=https://extdist.wmflabs.org/dist/extensions/Echo-REL1_31-ed7f8f4.tar.gz
EXTURL[EventLogging]=https://extdist.wmflabs.org/dist/extensions/EventLogging-REL1_31-3fddc40.tar.gz
# EXTURL[Gadgets]=https://extdist.wmflabs.org/dist/extensions/Gadgets-REL1_31-bac29ae.tar.gz
# EXTURL[InputBox]=https://extdist.wmflabs.org/dist/extensions/InputBox-REL1_31-dfec261.tar.gz
# EXTURL[WikimediaMessages]=https://extdist.wmflabs.org/dist/extensions/WikimediaMessages-REL1_31-a600cfd.tar.gz
# EXTURL[MassEditRegex]=https://extdist.wmflabs.org/dist/extensions/MassEditRegex-REL1_31-fcc91e5.tar.gz
# EXTURL[MsCalendar]=https://extdist.wmflabs.org/dist/extensions/MsCalendar-REL1_31-4cb0d01.tar.gz
# EXTURL[MsUpload]=https://extdist.wmflabs.org/dist/extensions/MsUpload-REL1_31-2e2efd5.tar.gz
# EXTURL[Nuke]=https://extdist.wmflabs.org/dist/extensions/Nuke-REL1_31-c6ec842.tar.gz
# EXTURL[SemanticInternalObjects]=https://extdist.wmflabs.org/dist/extensions/SemanticInternalObjects-REL1_31-2b195cf.tar.gz
# EXTURL[Thanks]=https://extdist.wmflabs.org/dist/extensions/Thanks-REL1_31-a845a46.tar.gz
# EXTURL[UserMerge]=https://extdist.wmflabs.org/dist/extensions/UserMerge-REL1_31-a641f0c.tar.gz
EXTURL[UploadWizard]=https://extdist.wmflabs.org/dist/extensions/UploadWizard-REL1_31-1ba0e4e.tar.gz
# EXTURL[Variables]=https://extdist.wmflabs.org/dist/extensions/Variables-REL1_31-872663b.tar.gz
### Variables End
# get extensionList
extensionList=""
for thisExt in "${!EXTURL[@]}";
do
[[ -z ${extensionList// /} ]] && extensionList="$thisExt" || extensionList="$extensionList $thisExt"
# test if extension matches in URL
if [[ ${EXTURL[$thisExt]} != *${thisExt}* ]];then
echo -e "\033[0;31m# WARNING ${thisExt} does not match in ${EXTURL[$thisExt]}\033[0m"
fi
done
# prompt before starting
echo -e "\033[0;32m##########################\033[0m"
echo -e "\033[0;32m# Extract ${#EXTURL[@]} Extensions ...\033[0m"
echo -e "\033[0;32m# $extensionList\033[0m"
echo -e "\033[0;32m# ... to $wikiExtPath ?\033[0m"
echo -en "\033[0;32m# yes or no (default: no)\033[0m "
read yesno
if [[ -z ${yesno// /} ]];then yesno="no"; fi
case $yesno in
[yY]|[yY][eE][sS])
echo "# continue ..."
;;
[nN]|[nN][oO])
echo "### Stop";
exit 1
;;
*)
if [[ -z ${yesno// /} ]];then
echo -e "\033[0;32m### Stop\033[0m"
else
echo "### Wrong input „${yesno}“ (Stop)"
fi
exit 1
;;
esac
i_ext=1
for thisExt in "${!EXTURL[@]}";
do
# go to local tmp user directory
if ! [[ -d ~/tmp ]];then mkdir ~/tmp; echo "# Created user directory ~/tmp";fi
cd ~/tmp
echo "### Step $i_ext of ${#EXTURL[@]}"
echo "# Download $thisExt to `pwd`…"
wget --no-verbose "${EXTURL[$thisExt]}"
if [[ -d "${wikiExtPath}${thisExt}" ]];then
# last modification timed as backup date e.g. MassEditRegex_2017-09-22
modDate=$(stat -c %y "${wikiExtPath}${thisExt}")
modDate=${modDate%% *} # remove from 1st space to the end in date time: 2017-09-22 00:12:10.000000000 +0200
thisBackupPath="${wikiExtPath}${thisExt}_${modDate}"
echo "# Back up $thisExt to ${thisBackupPath} …"
mv "${wikiExtPath}${thisExt}" "${thisBackupPath}";
fi
echo "# Extract tar archive ${EXTURL[$thisExt]##*/} to ${wikiExtPath} …"
tar -xzf "${EXTURL[$thisExt]##*/}" -C "${wikiExtPath}"
i_ext=$(( i_ext + 1 ))
done
MediaWiki Language Extension Bundle herunterladen und extrahieren
BASH Skript download_and_extract_MLEB_extensions.sh
zum Herunterladen von https://www.mediawiki.org/wiki/MediaWiki_Language_Extension_Bundle in das Benutzerverzeichnis ~/tmp
und extrahieren in den Wiki-Ordner $wikiExtPath
Hinweise:
- MLEB enthält einen Ordner
./extensions
deshalb kann nicht das Skriptdownload_and_extract_wiki_extensions.sh
verwendet werden - BUG https://phabricator.wikimedia.org/T178895 muss eventuell nachgepflegt werden, damit Yandex funktioniert
#!/bin/bash
# download_and_extract_MLEB_extensions.sh
# Documentation: https://www.mediawiki.org/wiki/MediaWiki_Language_Extension_Bundle
# MLEB extracts to ./extensions/Babel ./extensions/Translate etc.
# the dowload package is extracted to tempPath (home user directory ~/tmp)
### variables start
# modify according to your needs
mwLangExtBundlebUrl=https://translatewiki.net/mleb/MediaWikiLanguageExtensionBundle-2018.07.tar.bz2
labelOldMLEB="MLEB-2018.04"
wikiExtPath=/apps/mediawiki/www/extensions/
tempPath=~/tmp/
### variables end
# prompt before starting
echo -e "\033[0;32m##########################\033[0m"
echo -e "\033[0;32m# Download $mwLangExtBundlebUrl to ${tempPath} ...\033[0m"
echo -e "\033[0;32m# * back up old extensions Babel_$labelOldMLEB cldr_$labelOldMLEB Translate_$labelOldMLEB etc.\033[0m"
if [[ -d ${tempPath}extensions ]]; then
echo -e "\033[0;32m# * \033[0;31mremove ${tempPath}extensions\033[0;32m and extract MLEB to ${tempPath} \033[0m"
else
echo -e "\033[0;32m# * extract MLEB into $tempPath copy to $wikiExtPath ?\033[0m"
fi
echo -en "\033[0;32m# yes or no (default: no)\033[0m "
read yesno
if [[ -z ${yesno// /} ]];then yesno="no"; fi
case $yesno in
[yY]|[yY][eE][sS])
echo "# continue ..."
;;
[nN]|[nN][oO])
echo "### Stop";
exit 1
;;
*)
if [[ -z ${yesno// /} ]];then
echo -e "\033[0;32m### Stop\033[0m"
else
echo "### Wrong input „${yesno}“ (Stop)"
fi
exit 1
;;
esac
cd "${tempPath}"
if [[ -d extensions ]]; then
echo "# remove extensions folder ...";
rm -R extensions;
fi
echo "# Download ${mwLangExtBundlebUrl} to ${tempPath} …"
wget --no-verbose "${mwLangExtBundlebUrl}"
echo "# Extract ${mwLangExtBundlebUrl##*/} …"
tar -xjf ${mwLangExtBundlebUrl##*/} -C "${tempPath}"
for thisMLEBextension in "${tempPath}/extensions/"*;do
if [[ -d "$wikiExtPath${thisMLEBextension##*/}" ]];then
echo "# Back up in $wikiExtPath: ${thisMLEBextension##*/} -> ${thisMLEBextension##*/}_${labelOldMLEB} ..."
mv "$wikiExtPath${thisMLEBextension##*/}" "$wikiExtPath${thisMLEBextension##*/}_${labelOldMLEB}"
fi
echo "# Copy ${thisMLEBextension##*/} to $wikiExtPath${thisMLEBextension##*/} ..."
cp --preserve --recursive "$thisMLEBextension" "$wikiExtPath${thisMLEBextension##*/}"
done
Some extensions of MediWiki are managed by composer, a snmall PHP script. This tool is intended to manage dependencies and needed versions of software components, such as MediaWiki extensions. It needs a basic configuration file (composer.json
in the wiki root folder) and installation or removal of extensions is done on the command line.
Documentation:
- Composer (MediaWiki)
- Extensions supporting Composer (MediaWiki)
- https://packagist.org/search/ search any composer managed extension
- Composer itself: https://getcomposer.org/doc/ the very composer documentation
Extensions via Composer (PHP)
Step 0: First install of PHP composer tool itself to a local shared bin
-directory:
if ! [[ -d ~/bin ]];then mkdir ~/bin; fi; # create user home bin directory
cd ~/bin # go to personal home bin directory
wget https://getcomposer.org/composer.phar
Step 1: Manage your required extensions in file composer.local.json
in the root wiki folder and not in composer.json
wich is the basic setup shipped by the Mediawiki installation.
Step 2: add extension
Add an extension
Read the documentation of the extension what kind of version you need and so forth, the extension’s documentation should describe it sufficiently.
It is recommended to manage additional extensions in a separate file, read composer.local.json-sample
, so use composer.local.json
to add your extensions there:
{
"extra": {
"merge-plugin": {
"include": [
"extensions/SyntaxHighlight_GeSHi/composer.json"
]
}
},
"require": {
"mediawiki/image-map": "dev-REL1_30",
"mediawiki/graph-viz": "~3.1",
"mediawiki/semantic-media-wiki": "~2.5",
"mediawiki/open-layers": "dev-master",
"mediawiki/semantic-result-formats": "~2.5",
"mediawiki/semantic-compound-queries": "~1.1",
"mediawiki/page-forms": "4.*",
"mediawiki/maps": "4.*"
}
}
Step 3: update extensions.
It’s rather recommended to use the extra composer.local.json
than the “require
”-command that will update your composer.json
shipped by wiki software that may get overwritten the next wiki code update.
Update extensions
# update only a single extension and their dependencies
cd /apps/mediawiki/www/extensions/
php ~/bin/composer.phar update --no-dev mediawiki/graph-viz
# update all extensions and their dependencies
cd /apps/mediawiki/www/extensions/
php ~/bin/composer.phar update --no-dev
Remove an extension
Note AP: not sure if remove command works also for composer.local.json
See https://getcomposer.org/doc/03-cli.md#remove
cd /apps/mediawiki/www/extensions/
php ~/bin/composer.phar remove 'mediawiki/semantic-maps'
Self Update of composer
php ~/bin/composer.phar self-update
SemanticMediaWiki installierern oder aktualisieren
Extension:SemanticMediaWiki installieren via composer, d.h. in composer.local.json
eintragen:
...
require: { "mediawiki/semantic-media-wiki": "~2.5", "mediawiki/open-layers": "dev-master", "mediawiki/semantic-result-formats": "~2.5", "mediawiki/semantic-compound-queries": "~1.1", "mediawiki/page-forms": "4.*", "mediawiki/maps": "4.*" } ...
Extension:SemanticInternalObjects via download_and_extract_wiki_extensions.sh
Einstellungen in LocalSettings.php
// Define constants for my additional namespaces.
define("NS_CALENDAR", 3000); // This MUST be even.
define("NS_CALENDAR_TALK", 3001); // This MUST be the following odd integer.
$wgContentNamespaces[] = NS_CALENDAR;
switch($wgLanguageCode) {// depending on Wikis default language
case "de":
case "de-formal":
case "de-at":
case "de-ch":
$wgExtraNamespaces[NS_CALENDAR] = "Kalender";# becomes ns:kalender as Wiki-Code
$wgExtraNamespaces[NS_CALENDAR_TALK] = "Kalender_Diskussion"; // Note underscores in the namespace name.
break;
default:
$wgExtraNamespaces[NS_CALENDAR] = "Calendar"; # becomes ns:calendar as Wiki-Code
$wgExtraNamespaces[NS_CALENDAR_TALK] = "Calendar_talk"; // Note underscores in the namespace name.
break;
}
# somewhere near the bottom
############################################
# Extension:SemanticMediaWiki & Co
############################################
enableSemantics( parse_url( $wgServer, PHP_URL_HOST ) );
$smwgEnabledEditPageHelp=false; # suppress SMW help text in WikiEditor
wfLoadExtension( 'PageForms' );
# $wgPageFormsLinkAllRedLinksToForms = true;
wfLoadExtension( 'OpenLayers' ); # @require SMW
# Extension:Maps
$GLOBALS['egMapsDefaultService'] = 'openlayers';
$GLOBALS['egMapsAvailableServices'] = [
'openlayers',
'leaflet',
];
$smwgEnabledFulltextSearch=true; // default: false
$smwgNamespacesWithSemanticLinks[NS_CALENDAR] = true;
$smwgNamespacesWithSemanticLinks[NS_CALENDAR_TALK] = false;
$smwgNamespacesWithSemanticLinks[NS_PROFILE] = true;
$smwgNamespacesWithSemanticLinks[NS_TASK] = true;
$srfgFirstDayOfWeek = 'Monday';
/**
* Extension SemanticInternalObjects
* for n-ary subobject relations
*/
include_once("$IP/extensions/SemanticInternalObjects/SemanticInternalObjects.php");
Datenbank aktualisieren:
cd /apps/mediawiki/www/ php maintenance/update.php --conf ./LocalSettings.php
Useful One liner commands
Move Patterns of Directories to Anther Directory
It does not remove the folder when there is already an identical target folder
# one liner to move all *_2017*/ of extensions to /apps/mediawiki-bak/www/extensions/
cd /apps/mediawiki/www/extensions/ && \
for thisDir in *_2017*/; do \
if ! [[ -d /apps/mediawiki-bak/www/extensions/"$thisDir" ]]; \
then echo "Move $thisDir ..."; \
mv "$thisDir" /apps/mediawiki-bak/www/extensions/; \
fi; \
done;