#!/bin/bash # Copyright (C) 2016 Ian Kelling # This program is under GPL v. 3 or later, see # # for convenience, Mediawiki config file mwc="$mw/LocalSettings.php" if isdeb; then apache_user=www-data else apache_user=apache fi # 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 fi 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 < # if isdeb; then apt-get update # noninteractive to avoid mysql password prompt DEBIAN_FRONTEND=noninteractive apt-get -y install mediawiki ImageMagick php5-mysqlnd php-apc service apache2 restart else # 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 systemctl restart mariadb.service systemctl enable mariadb.service systemctl enable httpd.service systemctl restart httpd.service 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, # 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 # # 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 . # to see available branches: https://www.mediawiki.org/wiki/Version_lifecycle # and # git branch -r git checkout -f origin/$mw_branch git clean -ffxd # 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 cd vendor git checkout -f origin/$mw_branch 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' drop database my_wiki; exit EOF php $mw/maintenance/install.php --pass $wikipass --scriptpath /w \ --dbuser root --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 $wgGroupPermissions['*']['edit'] = false; # don't allow any account creation $wgGroupPermissions['*']['createaccount'] = false; EOF # # 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 # # l=$mw/../../logs mkdir $l acme-tiny-wrapper $mwdomain dd of=/etc/apache2/ports.conf <<'EOF' Listen 8082 EOF { cat <\n $(< $line)\n"; done } | apache-site -i -p 127.0.0.1:8082 -- - $mwdomain nginx-site -p 8082 $mwdomain # # 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 # # dd of=$mw/../robots.txt <<'EOF' User-agent: * Disallow: /w/ User-agent: ia_archiver Allow: /*&action=raw EOF # # teeu $mwc< # teeu $mwc< # teeu $mwc <<'EOF' # from https://www.mediawiki.org/wiki/Manual:Short_URL $wgArticlePath = "/wiki/$1"; # https://www.mediawiki.org/wiki/Manual:Combating_spam # check that url if our precautions don't work # 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; 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/' if isdeb; then service apache2 restart else systemctl restart httpd.service fi # if you were to install as a normal user, you would need this for images # sudo usermod -aG $apache_user $USER # this doesn't propogate right away chgrp -R $apache_user $mw/images chmod -R g+w $mw/images # # teeu $mwc <<'EOF' $wgLogo = null; $wgShowIPinHeader = false; $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 # # mw-ext Cite CiteThisPage CSS DynamicPageList Echo Gadgets ImageMap Interwiki News \ Nuke ParserFunctions Poem SyntaxHighlight_GeSHi Variables # # mw-ext AntiSpoof # recommended setup script to account for existing users sudo -u $apache_user php $mw/extensions/AntiSpoof/maintenance/batchAntiSpoof.php # # mw-ext CheckUser sudo -u $apache_user php $mw/extensions/CheckUser/install.php; sleep 1 # # if isdeb; then apt-get -y install php-wikidiff2 teeu $mwc <<'EOF' $wgExternalDiffEngine = 'wikidiff2'; EOF ln -sf ../../mods-available/wikidiff2.ini /etc/php5/apache2/conf.d service apache2 restart 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 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 cd $mw/extensions/Math/texvccheck; make teeu $mwc <<'EOF' # Enable MathJax as rendering option $wgUseMathJax = true; # Enable LaTeXML as rendering option $wgMathValidModes[] = 'latexml'; # Set LaTeXML as default rendering option, because it is nicest $wgDefaultUserOptions['math'] = 'latexml'; EOF # # mw-ext SpamBlacklist if ! grep -F '$wgSpamBlacklistFiles = array(' $mwc &>/dev/null; then tee -a $mwc <<'EOF' $wgEnableDnsBlacklist = true; $wgDnsBlacklistUrls = array( 'xbl.spamhaus.org', 'dnsbl.tornevall.org' ); ini_set( 'pcre.backtrack_limit', '10M' ); $wgSpamBlacklistFiles = array( "[[m:Spam blacklist]]", "http://en.wikipedia.org/wiki/MediaWiki:Spam-blacklist" ); EOF fi # # mw-ext TitleBlacklist if ! grep -F '$wgTitleBlacklistSources = array(' $mwc &>/dev/null; then tee -a $mwc <<'EOF' $wgTitleBlacklistSources = array( array( 'type' => 'local', 'src' => 'MediaWiki:Titleblacklist', ), array( 'type' => 'url', 'src' => 'http://meta.wikimedia.org/w/index.php?title=Title_blacklist&action=raw', ), ); EOF fi # # mw-ext WikiEditor teeu $mwc <<'EOF' # Enable Wikieditor by default $wgDefaultUserOptions['usebetatoolbar'] = 1; $wgDefaultUserOptions['usebetatoolbar-cgd'] = 1; # Display the Preview and Changes tabs $wgDefaultUserOptions['wikieditor-preview'] = 1; EOF # # mw-ext CategoryTree teeu $mwc <<'EOF' # Mediawiki setting dependency for CategoryTree $wgUseAjax = true; EOF # # mw-ext AbuseFilter teeu $mwc<<'EOF' $wgGroupPermissions['sysop']['abusefilter-modify'] = true; $wgGroupPermissions['*']['abusefilter-log-detail'] = true; $wgGroupPermissions['*']['abusefilter-view'] = true; $wgGroupPermissions['*']['abusefilter-log'] = true; $wgGroupPermissions['sysop']['abusefilter-private'] = true; $wgGroupPermissions['sysop']['abusefilter-modify-restricted'] = true; $wgGroupPermissions['sysop']['abusefilter-revert'] = true; EOF # # mw-ext ConfirmEdit captchaArray teeu $mwc <<'EOF' wfLoadExtension( 'ConfirmEdit/QuestyCaptcha' ); $wgCaptchaClass = 'QuestyCaptcha'; # only captcha on registration $wgGroupPermissions['user' ]['skipcaptcha'] = true; $wgGroupPermissions['autoconfirmed']['skipcaptcha'] = true; EOF if ! grep -Fx 'foreach ( $localSettingsQuestyQuestions as $key => $value ) {' $mwc; then tee -a $mwc <<'EOF' foreach ( $localSettingsQuestyQuestions as $key => $value ) { $wgCaptchaQuestions[] = array( 'question' => $key, 'answer' => $value ); } EOF fi # # sed -i "/\\\$wgGroupPermissions\\['\\*'\\]\\['createaccount'\\] = false;/d" $mwc # # # get repo mkdir ~/opt git clone --recursive https://gerrit.wikimedia.org/r/pywikibot/core.git ~/opt/pywikibot cd ~/opt/pywikibot #updating git pull --all git submodule update # # cd $HOME/opt/pywikibot dd of=user-config.py < # pw="$HOME/opt/pywikibot" dd of=$pw/scripts/${mwfamily}_setup.py<