X-Git-Url: https://iankelling.org/git/?p=mediawiki-setup;a=blobdiff_plain;f=mw-setup-script;h=7aca959fb344d62421125abdb9cefd5b0a405647;hp=151d9495643ede6662fa481adbf91a318abb101f;hb=44712fafcec81eae9e1908d004054e54b3b5b523;hpb=6bc8621a503a1372f2c534f2b99485e9d0ec9329 diff --git a/mw-setup-script b/mw-setup-script index 151d949..7aca959 100755 --- a/mw-setup-script +++ b/mw-setup-script @@ -5,41 +5,41 @@ # 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-ext () { mw-extra extensions $@; } +mw-skin() { mw-extra skins $@; } mw-extra() { - local type=${1}s # extension or skin + local type=$1 # 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 + 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 + if [[ ! -e $target/.git ]]; then 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 + 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" case $type in extensions) if [[ -e $target/extension.json ]]; then @@ -58,8 +58,8 @@ EOF sed -i '/^wfLoadSkin/d' $mwc sed -i '/^\$wgDefaultSkin/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 + 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 +139,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 +149,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 +159,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 @@ -148,42 +188,34 @@ fi # remove any existing directory rm -rf $mw/../analytics mv piwik $mw/../analytics +cd $mw 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 # # dd of=$mw/../robots.txt <<'EOF' @@ -192,6 +224,7 @@ Disallow: /w/ User-agent: ia_archiver Allow: /*&action=raw EOF +mw-skin Vector # # teeu $mwc< # @@ -236,8 +268,7 @@ EOF # 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/' +sed -i 's/^\(upload_max_filesize\|post_max_size\)\b.*/\1 = 100M/' $php_ini if isdeb; then service apache2 restart else @@ -254,17 +285,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 # # @@ -290,7 +322,12 @@ 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 @@ -395,15 +432,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 +573,31 @@ 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 +# based on recommendation from install page +if ! dpkg -s php5-gd &>/dev/null; then + apt-get install -y php5-gd + service apache2 restart +fi + +# docs suggests using separate database user mysql -u root -p$dbpass < # git clone https://github.com/DaSchTour/piwik-mediawiki-extension.git $mw/extensions/Piwik -mw-ext -g Piwik +mw-ext Piwik teeu $mwc < -# -s=~/bin/piwik-update -mkdir -p ${s%/*} -dd of=$s < "$x" -teeu "$x" <<< "0 3 * * tue $s" -crontab "$x" -#