Month: August 2011

  • Automatická aktualizace WordPressu

    Podle statistik rozšíření CMS na internetu z ledna tohoto roku využívá 15% všech webů WordPress. Kdyby tedy hacker objevil ve WordPressu bezpečnostní díru, mohl by teoreticky ovládnout až 15% Internetu. Spoustu lidí se o to již pokusilo a jistě nadále pokouší a komunita vývojářů chyby rychle odstraňuje. Nové verze vychází zhruba jednou za měsíc. Oprava vám ale nepomůže, pokud jí nemáte nainstalovanou :). Je tedy nutné neustále aktualizovat.

    WordPress se dá aktualizovat z administrace, proces ale potřebuje na stažení a rozbalení balíčku místo na disku, kterého se mi na freehostingu nedostává. Člověk se také musí přihlásit a zmáčknout tlačítko. Naštěstí to lze udělat i jinak. Stačí malý skript.

    Můj skript stáhne poslední stabilní verze českého WordPressu a vašich pluginů, uloží je do lokálního repozitáře GITu a následně nahraje na FTP pouze ty soubory, které se změnily. K nahrání změněných souborů jsem využil skvělý skript git-ftp.py.

    Aby git-ftp.py fungoval, vytvořte ve složce WordPressu soubor .git/ftpdata s následujícím obsahem a doplňte vaše údaje k FTP:

    [master]
    username=me
    password=s00perP4zzw0rd
    hostname=ftp.hostname.com
    remotepath=/htdocs

    Připravte si adresář, do kterého se rozbalí WordPress. Já mám WORKDIR nastavenou na /home/kuba/weby/oss/, takže WordPress se rozbalí do /home/kuba/weby/oss/wordpress. Do proměnné PLUGINY uveďte názvy pluginů získané z adres URL jejich webů. Zde je celý skript (stáhnout):

    #!/bin/bash
    #
    # Automaticka aktualizace WordPressu pres FTP
    #
    
    WORKDIR="/home/kuba/weby/oss/"
    TMPDIR="/tmp/wordpress-update/"
    PLUGINY="w3-total-cache wp-syntax simplemodal-contact-form-smcf lightbox-plus openid"
    
    function echoi {
            echo -e "\e[1;36m""$1""\e[0m"
    }
    
    function stahnoutplugin {
            PLUGINSVN=http://plugins.svn.wordpress.org/
            PLUGINDIR="$TMPDIR"/"$1"
            stabilni_verze=`svn ls "$PLUGINSVN"/"$1"/tags | tr -d / | sort -V | tail -n 1`
            echoi "Stahuji $1-$stabilni_verze"
            mkdir -p "$PLUGINDIR"
            cd "$PLUGINDIR"
            svn co "$PLUGINSVN"/"$1"/tags/"$stabilni_verze"
            rm -rf `find -type d -name .svn`
            mv "$stabilni_verze" "$1"
            mv "$1" "$WORKDIR"/wordpress/wp-content/plugins
    }
    
    cd "$WORKDIR"
    rm latest-cs_CZ.tar.gz
    echoi "Stahuji aktualni wordpress"
    wget http://cs.wordpress.org/latest-cs_CZ.tar.gz
    rm -rf wordpress/*
    tar xvf latest-cs_CZ.tar.gz
    for plugin in $PLUGINY; do
            stahnoutplugin "$plugin"
    done
    cd "$WORKDIR"/wordpress
    echoi "Mazu zbytecnosti"
    rm -rf wp-content/themes/twenty*
    rm wp-content/plugins/*/screenshot-*
    find -name \*.txt -exec rm '{}' \;
    find -name \*.dev.\* -exec rm '{}' \;
    rm -rf "$TMPDIR"
    echoi "Commituji zmeny"
    git add .
    git commit -a
    echoi "Nahravam na vzdaleny server"
    git-ftp.py

    O upozornění na nové verze WordPressu se stará moje RSS čtečka se speciálním kanálem. Časem by se to celé ale klidně dalo spojit s Cronem a nemusel bych se starat vůbec o nic.