X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=Mediawiki_Setup_Guide;h=81f4d62dba3c76fa4b9d577331ebd4355f3ee661;hb=fb8c514f359f6fcb443d774c3c305f804a853857;hp=b410697bc76cfb83b43480228e918de4af9f7037;hpb=90876e4723500bf439f2d6a0009c8c9b654cbff2;p=mediawiki-setup diff --git a/Mediawiki_Setup_Guide b/Mediawiki_Setup_Guide index b410697..81f4d62 100644 --- a/Mediawiki_Setup_Guide +++ b/Mediawiki_Setup_Guide @@ -1,74 +1,55 @@ == Introduction == -'''Currently undergoing revisions to upgrade from mediawiki version 1.23 to 1.27. -Should be done on 5/30/2016''' - -'''tldr''': Automated setup on gnu/linux after you set options in [[#Dependent Variables and Functions]], except email. Any code which is not ready to be run has bold text saying so immediately before it. +'''tldr''': For GNU/Linux (with a bit of Debian bias), a more concise, holistic and automated install than the official Mediawiki docs. Do some initial configuration then download this page and run it, or execute it as you read. ''' Goals / Why use this guide? ''' * Good recommendations. Official docs mostly avoid recommendations among a myriad of possibilities * Closely references & supplements official documentation +* Automatic security updates * Explicit automation support wherever practical -* Used to setup this site (style optional) -* Contributions welcome. This site will be updated/tested with changes to this document! -* Support for multiple linux distros -* Holistic scope (backups, server setup), but sections stand on their own -* Explicit support for production & local testing instance. Additions for production like https and web analytics. -* Edits to this page are closely monitored by the original author. +* Used to setup this site (style is optional) +* Support for multiple gnu/linux distros +* Holistic scope (backups, server setup), but sections are independent +* Code blocks are [https://en.wikipedia.org/wiki/Idempotent idempotent] +* Edits to this page are tested on this site and reviewed by the main author. '''Assumptions''' -* Self hosting, single Linux system with Bash shell -* Root shell is assumed throughout -* Code blocks are [https://en.wikipedia.org/wiki/Idempotent idempotent] unless stated otherwise +* Self hosting, single GNU/Linux system with root Bash shell + '''Version Support''' Very minor adjustments needed for other distros. Help expand this list. -* Mediawiki 1.23 -* Fedora 20 (tested) -* Ubuntu 14.04 (tested) -* Debian 7 +* Mediawiki 1.28, updated as new versions are released +* Debian 8 + backports +* Debian 8 +* Debian testing (last tested Aug 7, 2016) -== Production Server Prerequisites == +Pre 5/2016 revisions ran Mediawiki 1.23, tested on Fedora 20 and Ubuntu 14.04. + +== Prerequisites == '''Getting a Server & a Domain''' The most common route and the one taken by this site is buying a domain name from a site like namecheap, and a cheap vps from companies like linode or digital ocean. They have good getting started guides which mostly apply beyond their own sites. -'''Email Setup''' - -Setting up email can be an involved process. Mediawiki is perfectly happy to disable email with 1 setting (no password reminders or notifications), but it is a nice feature to have. You could run your own mail server (on the mediawiki server, or elsewhere), or use one of many services which sends mail for very cheap, or free within limits (popular examples [http://www.mailgun.com/ mailgun], [https://mandrillapp.com/ mandrill], [http://www.mailjet.com/pricing mailjet], [https://aws.amazon.com/ses/ aws]), or connect to a full featured send/receive mail provider like [https://fastmail.com fastmail] (this server is setup that way). How we did that is for a future wiki page. - -If you are not setting up your server to send mail with a program that uses the default sendmail interface, see these pages when you are configuring mediawiki: [[mediawikiwiki:Manual:$wgEnableEmail|Manual:$wgEnableEmail]], [https://www.mediawiki.org/wiki/Configuration_settings#Email_settings Manual:Email_settings], [[mediawikiwiki:Manual:$wgSMTP|Manual:$wgSMTP]] +'''Install Certbot''' -== Stopping Spam == - -There is a balance between effective anti-spam measures and blocking/annoying contributors. Mediawiki documentation on how to combat spam, is not very good, but it has improved over time: [https://www.mediawiki.org/wiki/Manual:Combating_spam manual: Combating Spam]. It's possible for a spammer to quickly make thousands of edits, and there is no good documentation on purging lots of spam, so you should have a good strategy up front. My current strategy is 3 fold, and is limited to small/medium wiki's: +For debian jessie with backports: + +apt-get install --install-suggests jessie-backports certbot + +For other distros, follow instructions at [https://certbot.eff.org/ certbot.eff.org]. -* Find new spam quickly, revert it & ban the user. -** Watch, and get notified of changes on all primary content pages: Special:Preferences, Bottom of the page, set an email address, then turn on "Email me also for minor edits of pages and files." -** Use a rss/atom feed reader, and subscribe to recent changes across the wiki. Newer browsers have an rss feed subscribe button, you can click after going to Special:RecentChanges. If that is not available, you can construct the proper url based on [https://meta.wikimedia.org/wiki/Help:Recent_changes#Web_feed these instructions]. -* Require registration to edit, and a custom captcha question on registration. -* Install all non-user inhibiting anti-spam extensions / settings that take a reasonable amount of time to figure out. +'''Email Setup''' -== Download all ready to use source code blocks into a single script == +Setting up email can be an involved process, and this guide assumes that a some program (usually postfix or exim) is implementing a functional sendmail interface. Mediawiki uses email with to send password reminders or notifications, and this guide includes cronjobs for updating mediawiki and doing backups which will send mail in the case of an error. Email is also the recommended way to get notifications of package updates which require manual steps such as restarting of services. -Source block that are not ready to use have a bold warning just before them (and a tag on the block) and are skipped. -''' Requires customization: outputs to stdout''' - -start=' * *' -end=' *<\/source> *' -ruby <<'EOF' | sed -rn "/^$start$/,/^$end$/{s/^$start|$end$/# \0/;p}" -require 'json' -puts JSON.parse(`curl 'https://ofswiki.org/w/api.php?\ -action=query&titles=Mediawiki_Setup_Guide&prop=revisions&rvprop=content&\ -format=json'`.chomp)['query']['pages'].values[0]['revisions'][0]['*'] -EOF - +If you are not setting up your server to send mail with a program that uses the default sendmail interface, see these pages when you are configuring mediawiki: [[mediawikiwiki:Manual:$wgEnableEmail|Manual:$wgEnableEmail]], [https://www.mediawiki.org/wiki/Configuration_settings#Email_settings Manual:Email_settings], [[mediawikiwiki:Manual:$wgSMTP|Manual:$wgSMTP]] -== Dependent Variables and Functions == +== Setup Guide Configuration == # Set variables below # Save the code in this section to a file (~/mw_vars is suggested) @@ -77,122 +58,148 @@ EOF '''Requires customization:''' -# Replease REPLACE_ME as appropriate +# Replace REPLACE_ME as appropriate -export mwdescription="Opinionated Free Software Wiki" +export mwdescription="REPLACE_ME" # eg. Opinionated Free Software Wiki # username/pass of the first wiki admin user -export wikiuser="Ian Kelling" +export wikiuser="REPLACE_ME" export wikipass=REPLACE_ME -# root password for the mysql database +# root & user password for the mysql database export dbpass=REPLACE_ME -# password for piwik web analytics admin -export piwik_pass=REPLACE_ME +export mwdomain=REPLACE_ME # domain name. for this site, it's ofswiki.org -# git branch for mediawiki + extensions -# branch names: https://git.wikimedia.org/branches/mediawiki%2Fcore.git -export mw_branch=REL1_27 - -# customize these questions to something your contributors would know, -# is not super common / scriptable, and doesn't have the answer in the question +# customize these questions. Try not to have the answer be a word in the question. captchaArray() { - if ! grep -Fx '$localSettingsQuestyQuestions = array (' $mwc - tee -a $mwc <<'EOF' + if ! grep -Fx '$localSettingsQuestyQuestions = array (' $mwc; then + tee -a $mwc <<'EOF' $localSettingsQuestyQuestions = array ( "What is the name of the wiki software this site (and wikipedia) uses?" => "Mediawiki", - "What does f in ofswiki.org stand for?" => "Free" + "REPLACE_ME with a question" => "REPLACE_ME with an answer" ); EOF + fi } -# As set by gui installer when choosing cc by sa. -export mw_RightsUrl="https://creativecommons.org/licenses/by-sa/4.0/"; -export mw_RightsText="Creative Commons Attribution-ShareAlike"; -export mw_RightsIcon="$wgResourceBasePath/resources/assets/licenses/cc-by-sa.png"; +# The rest of this section will work fine with no changes. +# git branch for mediawiki + extensions. See intro for supported versions. +# branch names: https://git.wikimedia.org/branches/mediawiki%2Fcore.git +export mw_branch=REL1_28 -# domain name and install paths. These are examples, change as needed. -export mwfamily=ofswiki # short alphanumeric name for pywikibot -export mwdomain=ofswiki.org +# As set by gui installer when choosing cc by sa. +export mw_RightsUrl='https://creativecommons.org/licenses/by-sa/4.0/' +export mw_RightsText='Creative Commons Attribution-ShareAlike' +export mw_RightsIcon='$wgScriptPath/resources/assets/licenses/cc-by-sa.png' + +# Alphanumeric site name for pywikibot. +# Here we use the domain minus the dots, which should work fine without changing. +export mwfamily=${mwdomain//./} +# install path for mediawiki. This should work fine. export mw=/var/www/$mwdomain/html/w # wiki sender address / wiki & wiki server contact email. # see email section for more info on email export mw_email="admin@$mwdomain" + +# Leave as is: +mwc="$mw/LocalSettings.php" -Here we define some small useful bash functions. This should be part of the same file. +== Download this page and run it == - -# for convenience, Mediawiki config file -mwc="$mw/LocalSettings.php" +This is an option to do automated setup. Optional code blocks are skipped (they have a bold warning just before them and a tag on the source block). The only important things left after running this are running the automated backup setup code on another machine. -if isdeb; then - apache_user=www-data -else - apache_user=apache -fi +''' Requires manual step: inspect output file: /tmp/mw-setup, then run it''' + +start=' * *' +end=' *<\/source> *' +ruby <<'EOF' | sed -rn "/^$start$/,/^$end$/{s/^$start|$end$/# \0/;p} > /tmp/mw-setup" +require 'json' +puts JSON.parse(`curl 'https://ofswiki.org/w/api.php?\ +action=query&titles=Mediawiki_Setup_Guide&prop=revisions&rvprop=content&\ +format=json'`.chomp)['query']['pages'].values[0]['revisions'][0]['*'] +EOF +chmod +x /tmp/mw-setup + + +== Required Bash Functions == + +Here we define some small useful bash functions. This should be part of the same ~/mw_vars file if you are running the code step by step. + + +# identify if this is a debian based distro +isdeb() { command -v apt &>/dev/null; } +# tee unique. append each stdin line if it does not exist in the file +teeu () { + local MAPFILE + mapfile -t + for line in "${MAPFILE[@]}"; do + grep -xFq "$line" "$1" &>/dev/null || tee -a "$1" <<<"$line" + done +} # get and reset an extension/skin repository, and enable it -mw-ext () { mw-extra extension $@; } -mw-skin() { mw-extra skin $@; } - -mw-extra() { - local type=${1}s # extension or skin - shift - local clone=true - if [[ $1 == -g ]]; then - clone=false - shift +mw-clone() { + local url=$1 + local original_pwd="$PWD" + local name + local re='[^/]*/[^/]*$' # last 2 parts of path + [[ $url =~ $re ]] ||: + target=$mw/${BASH_REMATCH[0]} + if [[ ! -e $target/.git ]]; then + git clone $url $target fi + if ! cd $target; then + echo "mw-ext error: failed cd $target"; + exit 1 + fi + git fetch + git checkout -qf origin/$mw_branch || git checkout -qf origin/master + git clean -xffd + cd "$original_pwd" + +} +mw-ext () { local ext - for ext in "$@"; do - if $clone; then - local original_pwd="$PWD" - # it's ok that this fails if we already have it - url=https://git.wikimedia.org/git/mediawiki - target=$mw/$type/$ext - git clone $url/$type/$ext.git $target - if ! cd $target; then - echo "mw-ext error: failed cd $mw/extensions/$ext"; - exit 1 - fi - git fetch - git checkout -qf origin/$mw_branch || git checkout -qf origin/master - git clean -xffd - cd "$original_pwd" - fi - case $type in - extensions) - if [[ -e $target/extension.json ]]; then - # new style extension. remove old style declaration - sed -i '#^require_once( "\\\$IP/extensions/\$ext/\$ext\.php" );#d' $mwc - teeu $mwc </dev/null; then + apache_user=www-data +else + apache_user=apache +fi + == Install Mediawiki Dependencies == @@ -203,15 +210,50 @@ The best way to get core dependencies is to install the mediawiki package itself [[mediawikiwiki:Manual:Installation_requirements|Manual:Installation_requirements]]: Overview of installation requirements. +Note, this guide needs a little adjustment before it will work with php7.0: make sure settings are still valid, update ini path. + +# From here on out, exit if a command fails. +# This will prevent us from not noticing an important failure. +# We recommend setting this for the entire installation session. +# If you are running commands interactively, it might be best to +# put it in your ~/.bashrc temporarily. +set -eE -o pipefail +trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR +source ~/mw_vars + if isdeb; then + # main reference: + # https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Ubuntu apt-get update - # noninteractive to avoid mysql password prompt - DEBIAN_FRONTEND=noninteractive apt-get -y install mediawiki ImageMagick php5-mysqlnd php-apc + DEBIAN_FRONTEND=noninteractive apt-get install -y imagemagick curl + if apt-get install -s mediawiki &>/dev/null; then + # mediawiki is packaged in jessie backports. + DEBIAN_FRONTEND=noninteractive apt-get -y install php5-apcu mediawiki + else + # https://www.mediawiki.org/wiki/Manual:Installation_requirements + if apt-get install -s php7.0 &>/dev/null; then + # note, 7.0 is untested by the editor here, since it's not + # available in debian 8. it's listed as supported + # in the mediawiki page. + # noninteractive to avoid mysql password prompt. + DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 \ + default-mysql-server \ + php7.0 php7.0-mysql libapache2-mod-php7.0 php7.0-xml \ + php7.0-apcu php7.0-mbstring + else + # note: mbstring is recommended, but it's not available for php5 in + # debian jessie. + DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 \ + default-mysql-server \ + php5 php5-mysql libapache2-mod-php5 php5-apcu + fi + fi service apache2 restart else + # note # fedora deps are missing a database, so some is translated from debian packages yum -y install mediawiki ImageMagick php-mysqlnd php-pecl-apcu mariadb-server @@ -222,18 +264,26 @@ else fi -# slightly different depending on if we already set the root pass -if echo exit|mysql -u root -p"$dbpass"; then - # answer interactive prompts: - # mysql root pass, change pass? no, remove anon users? (default, yes) - # disallow remote root (default, yes), reload? (default, yes) - echo -e "$dbpass\nn\n\n\n\n" | mysql_secure_installation -else - # I had 1 less newline at the start when doing ubuntu 14.04, +# skip if we already set the root pass and are on pre-debian 9. +if ! echo exit|mysql -uroot "-p$dbpass"; then + # Note: we set a root password here, but in debian 9+, it is ignored; + # only the local user root can login, and any password is accepted. + # We answer these interactive prompts: + # Enter current password for root (enter for none): + # Set root password? [Y/n] + # New password: + # Re-enter new password: + # Remove anonymous users? [Y/n] + # Disallow root login remotely? [Y/n] + # Remove test database and access to it? [Y/n] + # Reload privilege tables now? [Y/n] + # Note, I had 1 less newline at the start when doing ubuntu 14.04, # compared to debian 8, so can't say this is especially portable. - # It won't hurt if it fails. echo -e "\n\n$dbpass\n$dbpass\n\n\n\n\n" | mysql_secure_installation fi +mysql -uroot "-p$dbpass" < @@ -257,15 +307,21 @@ Here, we [[mediawikiwiki:Download_from_Git]], or reset our installation if it is mkdir -p $mw cd $mw # this will just fail if it already exists which is fine -git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git . +if [[ ! -e .git ]]; then + git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git . +fi # to see available branches: https://www.mediawiki.org/wiki/Version_lifecycle # and # git branch -r git checkout -f origin/$mw_branch git clean -ffxd +# apply librejs patch +curl "https://iankelling.org/git/?p=mediawiki-librejs-patch;a=blob_plain;f=mediawiki-1.28-librejs.patch;hb=HEAD" | patch -r - -N -p1 # Get the php libraries wmf uses. Based on: # https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries -git clone https://gerrit.wikimedia.org/r/p/mediawiki/vendor.git +if [[ ! -e vendor/.git ]]; then + git clone https://gerrit.wikimedia.org/r/p/mediawiki/vendor.git +fi cd vendor git checkout -f origin/$mw_branch cd .. @@ -273,12 +329,12 @@ cd .. # Drop any previous database which may have been installed while testing. # If upgrading, we should have a db backup which will get restored. # https://www.mediawiki.org/wiki/Manual:Upgrading -mysql -u root -p$dbpass <<'EOF' +mysql -uroot "-p$dbpass" <<'EOF' ||: drop database my_wiki; exit EOF php $mw/maintenance/install.php --pass $wikipass --scriptpath /w \ - --dbuser root --dbpass $dbpass "$mwdescription" "$wikiuser" + --dbuser wikiuser --dbpass $dbpass "$mwdescription" "$wikiuser" teeu $mwc <<'EOF' # lock down the wiki to only the initial owner until anti-spam measures are put in place # limit edits to registered users @@ -302,31 +358,6 @@ Upstream vs distro packages. Upstream is responsive, and it's distributed within Why use git over zip file releases? Mediawiki supports git usage through release branches which get post-release fixes. This means we can auto-update, get more granular fixes, easier to manage updates, and rollbacks. -== Get Piwik Files == - -Because it's really fun to look at your traffic stats. This is only needed for a production site. We get these files now so that we can take them into account when configuring apache in the next section. - -[http://piwik.org/docs/installation-maintenance/ Overall installation guide] - - -tmpdir="$(mktemp -d)" -cd $tmpdir -wget http://builds.piwik.org/piwik.zip -if isdeb; then apt-get -y install unzip; else yum -y install unzip; fi -unzip -q piwik.zip -# gui installer suggested command -if isdeb; then - chown -R www-data:www-data piwik -else - chown -R apache:apache piwik -fi -# remove any existing directory -rm -rf $mw/../analytics -mv piwik $mw/../analytics -rm -rf $tmpdir - - - == Configure Apache == Note, non-debian based installs: modify instructions below to use /etc/httpd/conf.d/$mwdomain.conf, and don't run a2ensite. @@ -356,48 +387,36 @@ a2ensite $mwdomain.conf Then, copy the input to apache-site below and insert it into the apache config. -Here, I use my scripts to setup apache. It's behind nginx because the same server hosts other sites which are not convenient to use the same apache instance. +Here, we use some scripts automate setting up the Let 's Encrypt cert and +the apache config. + l=$mw/../../logs -mkdir $l - -acme-tiny-wrapper $mwdomain -dd of=/etc/apache2/ports.conf <<'EOF' -Listen 8082 -EOF +mkdir -p $l +temp=$(mktemp -d) +cd $temp +git clone https://iankelling.org/git/basic-https-conf { cat <\n $(< $line)\n"; - done -} | apache-site -i -p 127.0.0.1:8082 -- - $mwdomain -nginx-site -p 8082 $mwdomain - - - -Turn on the new configuration - -if isdeb; then - a2ensite $mwdomain.conf - # for short urls - a2enmod rewrite - # We restart rather than reload because of the module - service apache2 restart -else - systemctl reload httpd.service -fi +find -L $(readlink -f $mw) -name .htaccess \ + | while read line; do + echo -e "\n $(< $line)\n"; +done +} | basic-https-conf/web-conf -r ${mw%/*} - apache2 $mwdomain +cd +rm -rf $temp Now mediawiki should load in your browser at $mwdomain . -Allow proper search bots and internet archiver bots, via [[Mediawiki:Robots.txt]] +Allow proper search bots and internet archiver bots, via [[Mediawiki:Robots.txt]], +and install the default skin. dd of=$mw/../robots.txt <<'EOF' @@ -406,13 +425,14 @@ Disallow: /w/ User-agent: ia_archiver Allow: /*&action=raw EOF +mw-skin Vector '''Skippable Notes''' This section assumes we are redirecting www to a url without www. -[http://httpd.apache.org/docs/current/howto/htaccess.html Apache recommends] moving .htaccess rules into it's config for performance. So we look for .htaccess files from mediawiki and piwik and copy their contents into this config. In modern apache versions, we would have to explicitly set options like AllowOverride to allow .htaccess files to take effect. +[http://httpd.apache.org/docs/current/howto/htaccess.html Apache recommends] moving .htaccess rules into it's config for performance. So we look for .htaccess files from mediawiki and copy their contents into this config. In modern apache versions, we would have to explicitly set options like AllowOverride to allow .htaccess files to take effect. == Mediawiki Settings == @@ -426,10 +446,9 @@ teeu $mwc< -Settings I recommend which are different than the defaults. +Settings asked by the gui setup which are different than the install script defaults. They different because the defaults are the most compatible and unobtrusive. teeu $mwc< @@ -453,20 +473,22 @@ $wgArticlePath = "/wiki/$1"; # not using nofollow is good practice, as long as we avoid spam. $wgNoFollowLinks = false; # Allow user customization. -$wgAllowUserJs = true; $wgAllowUserCss = true; - # use imagemagick over GD $wgUseImageMagick = true; +# manual says this is not production ready, I think that is mostly +# because they are using MobileFrontend extension instead, which gives +# an even cleaner more minimal view, I plan to try setting it up +# sometime but this seems like a very nice improvement for now. +$wgVectorResponsive = true; EOF # https://www.mediawiki.org/wiki/Manual:Configuring_file_uploads # Increase from default of 2M to 100M. # This will at least allow high res pics etc. -php_ini=$(isdeb && echo /etc/php5/apache2/php.ini || echo /etc/php.ini) -sed -i 's/^\(upload_max_filesize\)\b.*/\1 = 100M/' -sed -i 's/^\(post_max_size\)\b.*/\1 = 100M/' +php_ini=$(php -r 'echo(php_ini_loaded_file());') +sed -i --follow-symlinks 's/^\(upload_max_filesize\|post_max_size\)\b.*/\1 = 100M/' $php_ini if isdeb; then service apache2 restart else @@ -485,14 +507,15 @@ Style settings. Omit to use a different style. teeu $mwc <<'EOF' $wgLogo = null; -$wgShowIPinHeader = false; -$wgFooterIcons = null; +#$wgFooterIcons = null; EOF # Make the toolbox go into the drop down. -cd $mw -git remote add ian git@gitorious.org:mediawiki-toolbox-patch/mediawiki-toolbox-patch.git -git fetch ian -git rebase ian/REL1_23-toolbox-in-dropdown +cd $mw/skins/Vector +if ! git remote show ian-kelling &>/dev/null; then + git remote add ian-kelling https://iankelling.org/git/forks/Vector +fi +git fetch ian-kelling +git checkout ian-kelling/${mw_branch}-toolbox-in-dropdown == Install and Configure Mediawiki Extensions == @@ -501,56 +524,61 @@ When installing extensions on a wiki with important content, backup first as a p ''' Extensions with no configuration needed ''' -{| class="wikitable" -! Name -! Description -|- -| [[mediawikiwiki:Extension:Cite|Extension:Cite]] -| Have references in footnotes. -|- -| [[mediawikiwiki:Extension:CiteThisPage|Extension:CiteThisPage]] -| Ability to generate citations to pages in a variety of styles. -|- -| [[mediawikiwiki:Extension:CSS|Extension:CSS]] -| Allows CSS stylesheets to be included in specific articles -|- -| [[mediawikiwiki:Extension:DynamicPageList|Extension:DynamicPageList]] -| Embed page lists from categories & combinations of categories -|- -| [[mediawikiwiki:Extension:Echo|Extension:Echo]] -| Notification subsystem for usage by other extensions -|- -| [[mediawikiwiki:Extension:Gadgets|Extension:Gadgets]] -| UI extension system for users -|- -| [[mediawikiwiki:Extension:ImageMap|Extension:ImageMap]] -| Links for a region of an image -|- -| [[mediawikiwiki:Extension:Interwiki|Extension:Interwiki]] -| Tool for nice links to other wikis -|- -| [[mediawikiwiki:Extension:News|Extension:News]] -| Embed or rss recent changes -|- -| [[mediawikiwiki:Extension:Nuke|Extension:Nuke]] -| Mass delete of pages, in the case of spam -|- -| [[mediawikiwiki:Extension:ParserFunctions|Extension:ParserFunctions]] -| Useful for templates -|- -| [[mediawikiwiki:Extension:Poem|Extension:Poem]] -| Useful for formatting things various ways -|- -| [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi|Extension:SyntaxHighlight_GeSHi]] -| Source code highlighting -|- -| [[mediawikiwiki:Extension:Variables|Extension:Variables]] -| Define per-page variables -|} +{| class="writable" + ! Name + ! Description + |- + | [[mediawikiwiki:Extension:Cite|Extension:Cite]] + | Have references in footnotes* + |- + | [[mediawikiwiki:Extension:CiteThisPage|Extension:CiteThisPage]] + | Ability to generate citations to pages in a variety of styles* + |- + | [[mediawikiwiki:CheckUser|Extension:CheckUser]] + | Get ip addresses from inside mediawiki so you can ban users'' + |- + | [[mediawikiwiki:Extension:CSS|Extension:CSS]] + | Allows CSS stylesheets to be included in specific articles + |- + | [[mediawikiwiki:Extension:Echo|Extension:Echo]] + | Notification subsystem for usage by other extensions + |- + | [[mediawikiwiki:Extension:Gadgets|Extension:Gadgets]] + | UI extension system for users* + |- + | [[mediawikiwiki:Extension:ImageMap|Extension:ImageMap]] + | Links for a region of an image* + |- + | [[mediawikiwiki:Extension:Interwiki|Extension:Interwiki]] + | Tool for nice links to other wikis* + |- + | [[mediawikiwiki:Extension:News|Extension:News]] + | Embed or rss recent changes + |- + | [[mediawikiwiki:Extension:Nuke|Extension:Nuke]] + | Mass delete of pages, in the case of spam* + |- + | [[mediawikiwiki:Extension:ParserFunctions|Extension:ParserFunctions]] + | Useful for templates* + |- + | [[mediawikiwiki:Extension:Poem|Extension:Poem]] + | Useful for formatting things various ways* + |- + | [[mediawikiwiki:Extension:Renameuser|Extension:Renameuser]] + | Allows bureaucrats to rename user accounts* + |- + | [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi|Extension:SyntaxHighlight_GeSHi]] + | Source code highlighting* + |- + | [[mediawikiwiki:Extension:Variables|Extension:Variables]] + | Define per-page variables + |} + +* = Comes with the MediaWiki default download. -mw-ext Cite CiteThisPage CSS DynamicPageList Echo Gadgets ImageMap Interwiki News \ - Nuke ParserFunctions Poem SyntaxHighlight_GeSHi Variables +mw-ext Cite CiteThisPage CheckUser CSS Echo Gadgets ImageMap Interwiki News \ + Nuke ParserFunctions Poem Renameuser SyntaxHighlight_GeSHi Variables @@ -563,15 +591,6 @@ sudo -u $apache_user php $mw/extensions/AntiSpoof/maintenance/batchAntiSpoof.php -''' [[mediawikiwiki:CheckUser|Extension:CheckUser]]: Get ip addresses from inside mediawiki so you can ban users''' - -Requires special install steps or we can get into a bad state. Add a sleep like the default of update.php to avoid errors. - -mw-ext CheckUser -sudo -u $apache_user php $mw/extensions/CheckUser/install.php; sleep 1 - - - '''[[mediawikiwiki:Extension:Wikidiff2|Extension:Wikidiff2]]: Faster and international character supported page diffs''' I used packaged version since this is a c++ and probably not very tied to the Mediawiki version. This isn't packaged in fedora, haven't gotten around to testing and adding the code to compile it for fedora. @@ -581,7 +600,8 @@ if isdeb; then teeu $mwc <<'EOF' $wgExternalDiffEngine = 'wikidiff2'; EOF - ln -sf ../../mods-available/wikidiff2.ini /etc/php5/apache2/conf.d + dir=$(dirname $(php -r 'echo(php_ini_loaded_file());'))/../apache2/conf.d + ln -sf ../../mods-available/wikidiff2.ini $dir service apache2 restart fi @@ -593,12 +613,16 @@ fi mw-ext Math # php5-curl according to Math readme if isdeb; then - apt-get -y install latex-cjk-all texlive-latex-extra texlive-latex-base ghostscript imagemagick ocaml php5-curl + curl_pkg=php7.0-curl + if ! apt-get -s install $curl_pkg &>/dev/null; then + curl_pkg=php5-curl + fi + apt-get -y install latex-cjk-all texlive-latex-extra texlive-latex-base \ + ghostscript imagemagick ocaml $curl_pkg make else # todo, php5-curl equivalent on fedora yum -y install texlive-cjk ghostscript ImageMagick texlive ocaml fi -ln -sf ../../mods-available/curl.ini /etc/php5/apache2/conf.d service apache2 restart cd $mw/extensions/Math/math; make # makes texvc @@ -621,6 +645,8 @@ There is no current list of package depencies so I took dependencies from mediaw ''' [[mediawikiwiki:Extension:SpamBlacklist|Extension:SpamBlacklist]]: Import/create IP blacklists, mainly for spam''' +Comes with MediaWiki. + mw-ext SpamBlacklist if ! grep -F '$wgSpamBlacklistFiles = array(' $mwc &>/dev/null; then @@ -639,6 +665,8 @@ fi ''' [[mediawikiwiki:Extension:TitleBlacklist|Extension:TitleBlacklist]]: Anti-spam ''' +Comes with Mediawiki. + mw-ext TitleBlacklist if ! grep -F '$wgTitleBlacklistSources = array(' $mwc &>/dev/null; then @@ -659,6 +687,8 @@ fi ''' [[mediawikiwiki:Extension:WikiEditor|Extension:WikiEditor]]: Editing box extras and a fast preview tab ''' +Comes with MediaWiki. + mw-ext WikiEditor teeu $mwc <<'EOF' @@ -696,9 +726,9 @@ $wgGroupPermissions['sysop']['abusefilter-revert'] = true; EOF -'''[[mediawikiwiki:Extension:ConfirmEdit|Extension:ConfirmEdit]]: Custom Captcha''' +'''[[mediawikiwiki:Extension:ConfirmEdit|Extension:ConfirmEdit]]: Custom Captcha.''' -Uses captchaArray defined in mw_vars. +Uses captchaArray defined in mw_vars. Comes with MediaWiki. mw-ext ConfirmEdit @@ -721,7 +751,7 @@ fi Enable account creation that we initially disabled. -sed -i "/\\\$wgGroupPermissions\\['\\*'\\]\\['createaccount'\\] = false;/d" $mwc +sed -i --follow-symlinks "/\\\$wgGroupPermissions\\['\\*'\\]\\['createaccount'\\] = false;/d" $mwc == Additional Configuration with Pywikibot == @@ -735,9 +765,11 @@ There are quite a few [[mediawikiwiki:Help:Namespaces|special pages]] which act # get repo -mkdir ~/opt -git clone --recursive https://gerrit.wikimedia.org/r/pywikibot/core.git ~/opt/pywikibot -cd ~/opt/pywikibot +if [[ ! -e ~/pywikibot/.git ]]; then + git clone --recursive \ + https://gerrit.wikimedia.org/r/pywikibot/core.git ~/pywikibot +fi +cd ~/pywikibot #updating git pull --all git submodule update @@ -750,7 +782,7 @@ Relevent docs: [[mediawikiwiki:Manual:Pywikibot/Use_on_non-WMF_wikis|Manual:Pywi -cd $HOME/opt/pywikibot +cd $HOME/pywikibot dd of=user-config.py < -pw="$HOME/opt/pywikibot" +cd "$HOME/pywikibot" -dd of=$pw/scripts/${mwfamily}_setup.py<