X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=mw-setup-script;h=12f0c45316fef8397baa22ca00f48cf55c209616;hb=f28733f4fdf50cb629fb461b6c4039b564bbd5b0;hp=151d9495643ede6662fa481adbf91a318abb101f;hpb=90876e4723500bf439f2d6a0009c8c9b654cbff2;p=mediawiki-setup diff --git a/mw-setup-script b/mw-setup-script index 151d949..12f0c45 100755 --- a/mw-setup-script +++ b/mw-setup-script @@ -2,80 +2,113 @@ # 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 +# 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='[^/]*/[^/]*$' + [[ $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 + # # +# 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 + apt-get install -y imagemagick php-mbstring + 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 + 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 mysql-server \ + php7.0 php7.0-mysql libapache2-mod-php7.0 php7.0-xml \ + php7.0-apcu + else + DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 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 @@ -103,7 +136,9 @@ 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 . +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 @@ -111,7 +146,9 @@ 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 +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 .. @@ -119,7 +156,7 @@ 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 -u root -p$dbpass <<'EOF' ||: drop database my_wiki; exit EOF @@ -134,56 +171,31 @@ $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 - -# -# +temp=$(mktemp -d) +cd $temp +git_site=https://iankelling.org/git +git clone $git_site/acme-tiny-wrapper l=$mw/../../logs -mkdir $l +mkdir -p $l -acme-tiny-wrapper $mwdomain -dd of=/etc/apache2/ports.conf <<'EOF' -Listen 8082 -EOF +acme-tiny-wrapper/acme-tiny-wrapper $mwdomain + +git clone $git_site/basic-https-conf { 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 +ServerAdmin $mw_email +RewriteEngine On +# make the site's root url go to our main page +RewriteRule ^/?wiki(/.*)?\$ %{DOCUMENT_ROOT}/w/index.php [L] +# use short urls https://www.mediawiki.org/wiki/Manual:Short_URL +RewriteRule ^/*\$ %{DOCUMENT_ROOT}/w/index.php [L] +EOF +find -L $(readlink -f $mw) -name .htaccess \ + | while read line; do + echo -e "\n $(< $line)\n"; +done +} | basic-https-conf/apache-site -r ${mw%/*} - $mwdomain +cd +rm -rf $temp # # dd of=$mw/../robots.txt <<'EOF' @@ -192,6 +204,7 @@ Disallow: /w/ User-agent: ia_archiver Allow: /*&action=raw EOF +mw-skin Vector # # teeu $mwc< # @@ -235,9 +247,8 @@ 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 's/^\(upload_max_filesize\|post_max_size\)\b.*/\1 = 100M/' $php_ini if isdeb; then service apache2 restart else @@ -254,17 +265,18 @@ chmod -R g+w $mw/images # 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/Vector +fi +git fetch ian-kelling +git checkout ian-kelling/REL1_27-toolbox-in-dropdown # # -mw-ext Cite CiteThisPage CSS DynamicPageList Echo Gadgets ImageMap Interwiki News \ +mw-ext Cite CiteThisPage CSS Echo Gadgets ImageMap Interwiki News \ Nuke ParserFunctions Poem SyntaxHighlight_GeSHi Variables # # @@ -282,7 +294,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 # @@ -290,12 +303,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 @@ -395,15 +412,17 @@ 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 +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 # # -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< # -#!/bin/bash -source ~/mw_vars - -# if we get an error, keep going but return it at the end -last_error=0 -trap 'last_error=$?' ERR - -ssh root@$mwdomain < ~/wiki_backup/wikidump -sed -i '$ d' $mwc # delete last line -ENDSSH -rdiff-backup root@$mwdomain::/root/wiki_db_backup ~/backup/wiki_db_backup -rdiff-backup root@$mwdomain::$mw ~/backup/wiki_file_backup - -exit $last_error -# -# -chmod +x $HOME/bin/remote_wiki_backup -x="$(mktemp)" -crontab -l > "$x" -teeu "$x" <<'EOF' -0 4 * * * x=$($HOME/bin/remote_wiki_backup 2>&1); [[ $? != 0 ]] && echo "$x" -EOF -crontab "$x" -# -# -source ~/mw_vars -HOSTNAME=REPLACE_ME source ~/mw_vars -rdiff-backup -r now ~/backup/wiki_file_backup /tmp/wiki_file_restore -scp -r /tmp/wiki_file_restore/images root@$mwdomain:$mw/images -rdiff-backup -r now ~/backup/wiki_db_backup /tmp/wiki_db_restore -scp -r /tmp/wiki_db_restore root@$mwdomain:/tmp -ssh root@$mwdomain "mysql -u root -p$dbpass my_wiki < /tmp/wiki_db_restore/wiki_db_dump" -# -# -s=$HOME/bin/mediawiki_update +s=/etc/cron.daily/mediawiki_update dd of=$s<<'EOF' #!/bin/bash source ~/mw_vars @@ -567,54 +553,4 @@ done php $mw/maintenance/update.php -q EOF chmod +x $s - -x="$(mktemp)" -crontab -l > "$x" -teeu "$x" < -# -# docs suggests using separate database user, google lead me here for how -# https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql -mysql -u root -p$dbpass < -# -git clone https://github.com/DaSchTour/piwik-mediawiki-extension.git $mw/extensions/Piwik -mw-ext -g Piwik -teeu $mwc < -# -s=~/bin/piwik-update -mkdir -p ${s%/*} -dd of=$s < "$x" -teeu "$x" <<< "0 3 * * tue $s" -crontab "$x" #