* 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 and will be updated/tested on this very site!
+* Used to setup this site (style is optional)
* Support for multiple gnu/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.
+* 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 GNU/Linux system with Bash shell
-* Root shell is assumed throughout
-* Code blocks are [https://en.wikipedia.org/wiki/Idempotent idempotent]
+* 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.27
-* Debian 8 (tested)
-* Debian testing (tested Aug 7, 2016)
+* Mediawiki 1.28, updated as new versions are released
+* Debian 8 + backports
+* Debian 8
+* Debian testing (last tested Aug 7, 2016)
Pre 5/2016 revisions ran Mediawiki 1.23, tested on Fedora 20 and Ubuntu 14.04.
# The rest of this section will work fine with no changes.
-# git branch for mediawiki + extensions.
-# This guide has only been tested with 1_27.
+# git branch for mediawiki + extensions. See intro for supported versions.
# branch names: https://git.wikimedia.org/branches/mediawiki%2Fcore.git
-export mw_branch=REL1_27
+export mw_branch=REL1_28
# As set by gui installer when choosing cc by sa.
export mw_RightsUrl='https://creativecommons.org/licenses/by-sa/4.0/'
local url=$1
local original_pwd="$PWD"
local name
- local re='[^/]*/[^/]*$'
+ local re='[^/]*/[^/]*$' # last 2 parts of path
[[ $url =~ $re ]] ||:
target=$mw/${BASH_REMATCH[0]}
if [[ ! -e $target/.git ]]; then
}
mw-ext () {
local ext
- for ext in "$@"; do
+ for ext; do
mw-clone https://gerrit.wikimedia.org/r/p/mediawiki/extensions/$ext
- if [[ -e $mw/ext/$ext/extension.json ]]; then
- # new style extension. remove old style declaration
- sed -i --follow-symlinks '#^require_once( "\\\$IP/extensions/\$ext/\$ext\.php" );#d' $mwc
+ if [[ -e $mw/extensions/$ext/extension.json ]]; then
+ # new style extension
teeu $mwc <<EOF
wfLoadExtension( '$ext' );
EOF
# main reference:
# https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Ubuntu
apt-get update
- apt-get install -y imagemagick
+ DEBIAN_FRONTEND=noninteractive apt-get install -y imagemagick curl
if apt-get install -s mediawiki &>/dev/null; then
- # in debian wheezy time-frame distros, mediawiki was packaged.
- apt-get -y install php-apc mediawiki php-mbstring
+ # 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
# 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 mysql-server \
+ 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 mysql-server \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 \
+ default-mysql-server \
php5 php5-mysql libapache2-mod-php5 php5-apcu
fi
fi
# 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
if [[ ! -e vendor/.git ]]; then
\$wgRightsIcon = "$mw_RightsIcon";
EOF
</source>
-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.
<source lang="bash">
teeu $mwc<<EOF
\$wgPasswordSender = "$mw_email";
\$wgMainCacheType = CACHE_ACCEL;
\$wgEnableUploads = true;
\$wgUseInstantCommons = true;
+\$wgPingback = true;
EOF
</source>
# 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
git remote add ian-kelling https://iankelling.org/git/forks/Vector
fi
git fetch ian-kelling
-git checkout ian-kelling/REL1_27-toolbox-in-dropdown
+git checkout ian-kelling/${mw_branch}-toolbox-in-dropdown
</source>
== Install and Configure Mediawiki Extensions ==
''' Extensions with no configuration needed '''
-{| class="wikitable"
+{| class="writable"
! Name
! Description
|-
| [[mediawikiwiki:Extension:Cite|Extension:Cite]]
- | Have references in footnotes.
+ | Have references in footnotes*
|-
| [[mediawikiwiki:Extension:CiteThisPage|Extension:CiteThisPage]]
- | Ability to generate citations to pages in a variety of styles.
+ | 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
| Notification subsystem for usage by other extensions
|-
| [[mediawikiwiki:Extension:Gadgets|Extension:Gadgets]]
- | UI extension system for users
+ | UI extension system for users*
|-
| [[mediawikiwiki:Extension:ImageMap|Extension:ImageMap]]
- | Links for a region of an image
+ | Links for a region of an image*
|-
| [[mediawikiwiki:Extension:Interwiki|Extension:Interwiki]]
- | Tool for nice links to other wikis
+ | 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
+ | Mass delete of pages, in the case of spam*
|-
| [[mediawikiwiki:Extension:ParserFunctions|Extension:ParserFunctions]]
- | Useful for templates
+ | Useful for templates*
|-
| [[mediawikiwiki:Extension:Poem|Extension:Poem]]
- | Useful for formatting things various ways
+ | 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
+ | Source code highlighting*
|-
| [[mediawikiwiki:Extension:Variables|Extension:Variables]]
| Define per-page variables
|}
+<nowiki>*</nowiki> = Comes with the MediaWiki default download.
+
<source lang="bash">
-mw-ext Cite CiteThisPage CSS 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
</source>
</source>
-''' [[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.
-<source lang="bash">
-mw-ext CheckUser
-sudo -u $apache_user php $mw/extensions/CheckUser/install.php; sleep 1
-</source>
-
-
'''[[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.
''' [[mediawikiwiki:Extension:SpamBlacklist|Extension:SpamBlacklist]]: Import/create IP blacklists, mainly for spam'''
+Comes with MediaWiki.
+
<source lang="bash">
mw-ext SpamBlacklist
if ! grep -F '$wgSpamBlacklistFiles = array(' $mwc &>/dev/null; then
''' [[mediawikiwiki:Extension:TitleBlacklist|Extension:TitleBlacklist]]: Anti-spam '''
+Comes with Mediawiki.
+
<source lang="bash">
mw-ext TitleBlacklist
if ! grep -F '$wgTitleBlacklistSources = array(' $mwc &>/dev/null; then
''' [[mediawikiwiki:Extension:WikiEditor|Extension:WikiEditor]]: Editing box extras and a fast preview tab '''
+Comes with MediaWiki.
+
<source lang="bash">
mw-ext WikiEditor
teeu $mwc <<'EOF'
EOF
</source>
-'''[[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.
<source lang="bash">
mw-ext ConfirmEdit
sudo chmod +x $backup_script
</source>
-If you are like most people and don't use the old-school mail spool, setup the backup system to send mail externally. Some ways to do that are on this [http://unix.stackexchange.com/questions/36982/can-i-set-up-system-mail-to-use-an-external-smtp-server stackoverflow answer]. Then make local mail to your user get forwarded to an address you will read:
-
'''Optional & requires additional steps'''
-<source lang="bash" type="example">
-sed -i --follow-symlinks "/^root:/d" /etc/aliases
-echo "root: EXAMPLE_ONLY_REPLACE_ME@gmail.com" >> /etc/aliases
-newaliases
-</source>
+
+If you are like most people and don't use the old-school mail spool, setup the backup system to send mail externally so you are notified if it fails. For examples of how to do this, [http://unix.stackexchange.com/questions/36982/can-i-set-up-system-mail-to-use-an-external-smtp-server stackoverflow], [https://iankelling.org/git/?p=ian-specific/distro-setup;a=blob;f=mail-setup;hb=HEAD script I use].
== Restoring Backups ==
dd of=$s<<'EOF'
#!/bin/bash
source ~/mw_vars
-cd $mw
-for dir in extensions/* skins/* $mw; do
- [[ -d $dir ]] || continue
+update() {
+ dir=$1
+ cd $mw
+ [[ -d $dir ]] || return 1
cd $dir
branch=$(git describe --all)
branch=${branch#remotes/}
git fetch --all -q
new_head=$(git rev-parse $branch)
log=$(git log HEAD..$new_head)
- if [[ $log ]]; then
- pwd
- echo "$log"
+ if [[ ! $log ]]; then
+ return 1
fi
- git checkout -q $new_head
+ pwd
+ echo "$log"
+ git checkout -qf $new_head
cd $mw
+ return 0
+}
+for dir in extensions/* skins/* vendor; do
+ update "$dir" ||:
done
-php $mw/maintenance/update.php -q
+if update .; then
+ curl "https://iankelling.org/git/?p=mediawiki-librejs-patch;a=blob_plain;f=mediawiki-1.28-librejs.patch;hb=HEAD" | patch -r - -N -p1
+fi
+php $mw/maintenance/update.php -q --quick
EOF
</source>
Here are brief descriptions of extensions that are part of distributions and why they were rejected for this wiki.
{| class="wikitable"
+ |+
+ | '''Footnote''' || deprecated in newer versions
|+
| '''InputBox''' || Add html forms to pages. Can't imagine using it. Would install if I did.
|+
- | '''Pdfhandler''' || Gallery of pages from a pdf file. Can't imagine using it. Would install if I did.
+ | '''LocalisationUpdate'''|| update localization only. I'm fine updating all of mediawiki, there aren't many updates.
|+
- | '''Footnote''' || deprecated in newer versions
+ | '''NewestPages''' || A page creation history that doesn't expire like recent-changes. Meh
|+
| '''NewUserNotif''' || Send me a notification when a user registers. Seems like an excessive notification.
|+
- | '''NewestPages''' || A page creation history that doesn't expire like recent-changes. Meh
+ | '''Openid''' || Poor UI. 2 pages & 2 links <login> <login with openid> which is confusing & ugly.
+ |+
+ | '''Pdfhandler''' || Gallery of pages from a pdf file. Can't imagine using it. Would install if I did.
|+
| '''RSSReader''' || Embed an rss feed. Can't imagine using it. Would install if I did.
|+
- | '''Openid''' || Poor UI. 2 pages & 2 links <login> <login with openid> which is confusing & ugly.
+ | '''Semantic''' || Seems like a lot of trouble around analyzing kinds of data which my wiki will not have.
|+
| '''Validator''' || dependency of of semantic
|+
- | '''Semantic''' || Seems like a lot of trouble around analyzing kinds of data which my wiki will not have.
- |+
- | '''wikicalendar''' || Make a calendar of events etc. Can't imagine using it. Would install if I did.
|}
== Misc Notes ==
== todo list for this page ==
-* Check if there are any new default extensions 1.27 which I haven't evaluated.
-* Test for any new config values set by the 1.27 gui install method.
* Get Visual editor extension.
* Don't require registration for edits