47341f76bce9eac238f92d666230406d62c672af
   1# Copyright (C) 2012
   2#     Charles Roussel <charles.roussel@ensimag.imag.fr>
   3#     Simon Cathebras <simon.cathebras@ensimag.imag.fr>
   4#     Julien Khayat <julien.khayat@ensimag.imag.fr>
   5#     Guillaume Sasdy <guillaume.sasdy@ensimag.imag.fr>
   6#     Simon Perrat <simon.perrat@ensimag.imag.fr>
   7# License: GPL v2 or later
   8
   9#
  10# CONFIGURATION VARIABLES
  11# You might want to change these ones
  12#
  13
  14. ./test.config
  15
  16CURR_DIR=$(pwd)
  17TEST_OUTPUT_DIRECTORY=$(pwd)
  18TEST_DIRECTORY="$CURR_DIR"/../../../t
  19
  20export TEST_OUTPUT_DIRECTORY TEST_DIRECTORY CURR_DIR
  21
  22if test "$LIGHTTPD" = "false" ; then
  23        PORT=80
  24else
  25        WIKI_DIR_INST="$CURR_DIR/$WEB_WWW"
  26fi
  27
  28# ================= Install part =================
  29
  30error () {
  31        echo "$@" >&2
  32        exit 1
  33}
  34
  35# config_lighttpd
  36#
  37# Create the configuration files and the folders necessary to start lighttpd.
  38# Overwrite any existing file.
  39config_lighttpd () {
  40        mkdir -p $WEB
  41        mkdir -p $WEB_TMP
  42        mkdir -p $WEB_WWW
  43        cat > $WEB/lighttpd.conf <<EOF
  44        server.document-root = "$CURR_DIR/$WEB_WWW"
  45        server.port = $PORT
  46        server.pid-file = "$CURR_DIR/$WEB_TMP/pid"
  47
  48        server.modules = (
  49        "mod_rewrite",
  50        "mod_redirect",
  51        "mod_access",
  52        "mod_accesslog",
  53        "mod_fastcgi"
  54        )
  55
  56        index-file.names = ("index.php" , "index.html")
  57
  58        mimetype.assign             = (
  59        ".pdf"          =>      "application/pdf",
  60        ".sig"          =>      "application/pgp-signature",
  61        ".spl"          =>      "application/futuresplash",
  62        ".class"        =>      "application/octet-stream",
  63        ".ps"           =>      "application/postscript",
  64        ".torrent"      =>      "application/x-bittorrent",
  65        ".dvi"          =>      "application/x-dvi",
  66        ".gz"           =>      "application/x-gzip",
  67        ".pac"          =>      "application/x-ns-proxy-autoconfig",
  68        ".swf"          =>      "application/x-shockwave-flash",
  69        ".tar.gz"       =>      "application/x-tgz",
  70        ".tgz"          =>      "application/x-tgz",
  71        ".tar"          =>      "application/x-tar",
  72        ".zip"          =>      "application/zip",
  73        ".mp3"          =>      "audio/mpeg",
  74        ".m3u"          =>      "audio/x-mpegurl",
  75        ".wma"          =>      "audio/x-ms-wma",
  76        ".wax"          =>      "audio/x-ms-wax",
  77        ".ogg"          =>      "application/ogg",
  78        ".wav"          =>      "audio/x-wav",
  79        ".gif"          =>      "image/gif",
  80        ".jpg"          =>      "image/jpeg",
  81        ".jpeg"         =>      "image/jpeg",
  82        ".png"          =>      "image/png",
  83        ".xbm"          =>      "image/x-xbitmap",
  84        ".xpm"          =>      "image/x-xpixmap",
  85        ".xwd"          =>      "image/x-xwindowdump",
  86        ".css"          =>      "text/css",
  87        ".html"         =>      "text/html",
  88        ".htm"          =>      "text/html",
  89        ".js"           =>      "text/javascript",
  90        ".asc"          =>      "text/plain",
  91        ".c"            =>      "text/plain",
  92        ".cpp"          =>      "text/plain",
  93        ".log"          =>      "text/plain",
  94        ".conf"         =>      "text/plain",
  95        ".text"         =>      "text/plain",
  96        ".txt"          =>      "text/plain",
  97        ".dtd"          =>      "text/xml",
  98        ".xml"          =>      "text/xml",
  99        ".mpeg"         =>      "video/mpeg",
 100        ".mpg"          =>      "video/mpeg",
 101        ".mov"          =>      "video/quicktime",
 102        ".qt"           =>      "video/quicktime",
 103        ".avi"          =>      "video/x-msvideo",
 104        ".asf"          =>      "video/x-ms-asf",
 105        ".asx"          =>      "video/x-ms-asf",
 106        ".wmv"          =>      "video/x-ms-wmv",
 107        ".bz2"          =>      "application/x-bzip",
 108        ".tbz"          =>      "application/x-bzip-compressed-tar",
 109        ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
 110        ""              =>      "text/plain"
 111        )
 112
 113        fastcgi.server = ( ".php" =>
 114        ("localhost" =>
 115        ( "socket" => "$CURR_DIR/$WEB_TMP/php.socket",
 116        "bin-path" => "$PHP_DIR/php-cgi -c $CURR_DIR/$WEB/php.ini"
 117
 118        )
 119        )
 120        )
 121EOF
 122
 123        cat > $WEB/php.ini <<EOF
 124        session.save_path ='$CURR_DIR/$WEB_TMP'
 125EOF
 126}
 127
 128# start_lighttpd
 129#
 130# Start or restart daemon lighttpd. If restart, rewrite configuration files.
 131start_lighttpd () {
 132        if test -f "$WEB_TMP/pid"; then
 133                echo "Instance already running. Restarting..."
 134                stop_lighttpd
 135        fi
 136        config_lighttpd
 137        "$LIGHTTPD_DIR"/lighttpd -f "$WEB"/lighttpd.conf
 138
 139        if test $? -ne 0 ; then
 140                echo "Could not execute http deamon lighttpd"
 141                exit 1
 142        fi
 143}
 144
 145# stop_lighttpd
 146#
 147# Kill daemon lighttpd and removes files and folders associated.
 148stop_lighttpd () {
 149        test -f "$WEB_TMP/pid" && kill $(cat "$WEB_TMP/pid")
 150        rm -rf "$WEB"
 151}
 152
 153# Create the SQLite database of the MediaWiki. If the database file already
 154# exists, it will be deleted.
 155# This script should be runned from the directory where $FILES_FOLDER is
 156# located.
 157create_db () {
 158        rm -f "$TMP/$DB_FILE"
 159
 160        echo "Generating the SQLite database file. It can take some time ..."
 161        # Run the php script to generate the SQLite database file
 162        # with cURL calls.
 163        php "$FILES_FOLDER/$DB_INSTALL_SCRIPT" $(basename "$DB_FILE" .sqlite) \
 164                "$WIKI_ADMIN" "$WIKI_PASSW" "$TMP" "$PORT"
 165
 166        if [ ! -f "$TMP/$DB_FILE" ] ; then
 167                error "Can't create database file $TMP/$DB_FILE. Try to run ./install-wiki.sh delete first."
 168        fi
 169
 170        # Copy the generated database file into the directory the
 171        # user indicated.
 172        cp "$TMP/$DB_FILE" "$FILES_FOLDER" ||
 173                error "Unable to copy $TMP/$DB_FILE to $FILES_FOLDER"
 174}
 175
 176# Install a wiki in your web server directory.
 177wiki_install () {
 178        if test $LIGHTTPD = "true" ; then
 179                start_lighttpd
 180        fi
 181
 182        SERVER_ADDR=$SERVER_ADDR:$PORT
 183        # In this part, we change directory to $TMP in order to download,
 184        # unpack and copy the files of MediaWiki
 185        (
 186        mkdir -p "$WIKI_DIR_INST/$WIKI_DIR_NAME"
 187        if [ ! -d "$WIKI_DIR_INST/$WIKI_DIR_NAME" ] ; then
 188                error "Folder $WIKI_DIR_INST/$WIKI_DIR_NAME doesn't exist.
 189                Please create it and launch the script again."
 190        fi
 191
 192        # Fetch MediaWiki's archive if not already present in the TMP directory
 193        cd "$TMP"
 194        if [ ! -f "$MW_VERSION.tar.gz" ] ; then
 195                echo "Downloading $MW_VERSION sources ..."
 196                wget "http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.0.tar.gz" ||
 197                        error "Unable to download "\
 198                        "http://download.wikimedia.org/mediawiki/1.19/"\
 199                        "mediawiki-1.19.0.tar.gz. "\
 200                        "Please fix your connection and launch the script again."
 201                echo "$MW_VERSION.tar.gz downloaded in `pwd`. "\
 202                        "You can delete it later if you want."
 203        else
 204                echo "Reusing existing $MW_VERSION.tar.gz downloaded in `pwd`."
 205        fi
 206        archive_abs_path=$(pwd)/"$MW_VERSION.tar.gz"
 207        cd "$WIKI_DIR_INST/$WIKI_DIR_NAME/" ||
 208                error "can't cd to $WIKI_DIR_INST/$WIKI_DIR_NAME/"
 209        tar xzf "$archive_abs_path" --strip-components=1 ||
 210                error "Unable to extract WikiMedia's files from $archive_abs_path to "\
 211                        "$WIKI_DIR_INST/$WIKI_DIR_NAME"
 212        ) || exit 1
 213
 214        create_db
 215
 216        # Copy the generic LocalSettings.php in the web server's directory
 217        # And modify parameters according to the ones set at the top
 218        # of this script.
 219        # Note that LocalSettings.php is never modified.
 220        if [ ! -f "$FILES_FOLDER/LocalSettings.php" ] ; then
 221                error "Can't find $FILES_FOLDER/LocalSettings.php " \
 222                        "in the current folder. "\
 223                "Please run the script inside its folder."
 224        fi
 225        cp "$FILES_FOLDER/LocalSettings.php" \
 226                "$FILES_FOLDER/LocalSettings-tmp.php" ||
 227                error "Unable to copy $FILES_FOLDER/LocalSettings.php " \
 228                "to $FILES_FOLDER/LocalSettings-tmp.php"
 229
 230        # Parse and set the LocalSettings file of the user according to the
 231        # CONFIGURATION VARIABLES section at the beginning of this script
 232        file_swap="$FILES_FOLDER/LocalSettings-swap.php"
 233        sed "s,@WG_SCRIPT_PATH@,/$WIKI_DIR_NAME," \
 234                "$FILES_FOLDER/LocalSettings-tmp.php" > "$file_swap"
 235        mv "$file_swap" "$FILES_FOLDER/LocalSettings-tmp.php"
 236        sed "s,@WG_SERVER@,http://$SERVER_ADDR," \
 237                "$FILES_FOLDER/LocalSettings-tmp.php" > "$file_swap"
 238        mv "$file_swap" "$FILES_FOLDER/LocalSettings-tmp.php"
 239        sed "s,@WG_SQLITE_DATADIR@,$TMP," \
 240                "$FILES_FOLDER/LocalSettings-tmp.php" > "$file_swap"
 241        mv "$file_swap" "$FILES_FOLDER/LocalSettings-tmp.php"
 242        sed "s,@WG_SQLITE_DATAFILE@,$( basename $DB_FILE .sqlite)," \
 243                "$FILES_FOLDER/LocalSettings-tmp.php" > "$file_swap"
 244        mv "$file_swap" "$FILES_FOLDER/LocalSettings-tmp.php"
 245
 246        mv "$FILES_FOLDER/LocalSettings-tmp.php" \
 247                "$WIKI_DIR_INST/$WIKI_DIR_NAME/LocalSettings.php" ||
 248                error "Unable to move $FILES_FOLDER/LocalSettings-tmp.php" \
 249                "in $WIKI_DIR_INST/$WIKI_DIR_NAME"
 250        echo "File $FILES_FOLDER/LocalSettings.php is set in" \
 251                " $WIKI_DIR_INST/$WIKI_DIR_NAME"
 252
 253        echo "Your wiki has been installed. You can check it at
 254                http://$SERVER_ADDR/$WIKI_DIR_NAME"
 255}
 256
 257# Reset the database of the wiki and the password of the admin
 258#
 259# Warning: This function must be called only in a subdirectory of t/ directory
 260wiki_reset () {
 261        # Copy initial database of the wiki
 262        if [ ! -f "../$FILES_FOLDER/$DB_FILE" ] ; then
 263                error "Can't find ../$FILES_FOLDER/$DB_FILE in the current folder."
 264        fi
 265        cp "../$FILES_FOLDER/$DB_FILE" "$TMP" ||
 266                error "Can't copy ../$FILES_FOLDER/$DB_FILE in $TMP"
 267        echo "File $FILES_FOLDER/$DB_FILE is set in $TMP"
 268}
 269
 270# Delete the wiki created in the web server's directory and all its content
 271# saved in the database.
 272wiki_delete () {
 273        if test $LIGHTTPD = "true"; then
 274                stop_lighttpd
 275        else
 276                # Delete the wiki's directory.
 277                rm -rf "$WIKI_DIR_INST/$WIKI_DIR_NAME" ||
 278                        error "Wiki's directory $WIKI_DIR_INST/" \
 279                        "$WIKI_DIR_NAME could not be deleted"
 280                # Delete the wiki's SQLite database.
 281                rm -f "$TMP/$DB_FILE" ||
 282                        error "Database $TMP/$DB_FILE could not be deleted."
 283        fi
 284
 285        # Delete the wiki's SQLite database
 286        rm -f "$TMP/$DB_FILE" || error "Database $TMP/$DB_FILE could not be deleted."
 287        rm -f "$FILES_FOLDER/$DB_FILE"
 288        rm -rf "$TMP/$MW_VERSION"
 289}