Blob Blame History Raw
#!/bin/bash
# moinmoin-postinstall.sh
# MoinMoin 1.5 wikifarm instance installation script.
#
# The CentOS Artwork SIG.
# http://wiki.centos.org/ArtWork



# ---------------------------------------------------------
# Begin Configuration Section

# First Wiki Site Name. This is the name shown in the browser 
# title bar.
WIKISITENAME="mywiki"

# Your Domain Name (without the trailing slash).
MYDOMAIN="localdomain"

# Name of the Wiki Front Page.
WIKIFRONTPAGE="FrontPage"

# Directory name where the wiki instance will be copied.
WIKILOCATION=/var/www/

# Instance Name.
WIKIINSTANCE="wikifarm"

# Alias name used to access wiki static files. This value
# should be different from $WIKIALIAS above.
WIKIURLPREFIX="staticfiles"

# Wiki Super User. Add your WikiUserName here.
WIKISUPERUSER="YourName"

# Do you want to restrict the edit actions ?  (yes|no).
# 
# a) If `yes' only the wiki superuser, and those listed into
# EditGroup and AdminGroup pages will be able to edit pages
# on your wiki. After this script is run, we suggest to:
#
#    1. Register the superuser. For example:
#	Login > UserPreferences > Create Profile
#    2. Create a EditGroup page.
#    3. Add registered user names into EditGroup page.
#
#       At this point those users listed in EditGroup will
#       be able to edit pages on your wiki. If you need to
#       grant admin rights to other people then create the
#       AdminGroup page and add register users names into
#       it. After that they will have admin rights.
#
#       More info about acl can be found at
#       http://localhost/wiki/HelpOnAccessControlLists once
#       you have installed the wiki.
# 
# b) If `no' all users will be able to edit your wiki. Even
# if they haven't a user register on it.
WIKIRESTRICTEDIT="no"

# Mail
WIKIMAILSMARTHOST=""
WIKIMAILFROM=""
WIKIMAILLOGIN=""

# Language.
WIKILANGUAGE="en"

# Basic installation Prefix.
PREFIX=/usr

# Share directory name.
SHARE=$PREFIX/share/moin/

# User & Group used by your web server.
USER=apache
GROUP=$USER

# End of Configuration section
# ---------------------------------------------------------


# Copy files
#
# Here we create directories and copy files into the
# instance.
#
cd $WIKILOCATION
mkdir -p ${WIKIINSTANCE}/cgi-bin/
mkdir -p ${WIKIINSTANCE}/${WIKISITENAME}.${MYDOMAIN}/
cp -r ${SHARE}data/* ${WIKIINSTANCE}/${WIKISITENAME}.${MYDOMAIN}/
cp -r ${SHARE}data ${WIKIINSTANCE}/
cp -r ${SHARE}htdocs $WIKIINSTANCE
cp -r ${SHARE}underlay $WIKIINSTANCE
cp ${SHARE}server/moin.cgi ${WIKIINSTANCE}/cgi-bin/


# Fix PATH in moin.cgi file
#
sed -i -e "
        s/\/path\/to\/wikiconfig/\/var\/www\/${WIKIINSTANCE}\/cgi-bin/
        s/\/path\/to\/farmconfig/\/var\/www\/${WIKIINSTANCE}\/cgi-bin\/farmconfig/
        " ${WIKILOCATION}${WIKIINSTANCE}/cgi-bin/moin.cgi


# Apache Configuration
#
# Here we create the apache configuration file. By default
# the wiki will be accessed through the `wiki' apache alias.
# Virtual domains are also included but commented by
# default.
cat <<APACHECONF > /etc/httpd/conf.d/${WIKIINSTANCE}.conf
# Apache web server configuration for MoinMoin wiki.
#
# Created by moinmoin-postinstall-wikifarm.sh.

<VirtualHost *:80>
   ServerName ${WIKISITENAME}.${MYDOMAIN}/
   ServerAdmin webmaster@${MYDOMAIN}
   ErrorLog logs/wiki-${WIKISITENAME}.error_log
   CustomLog logs/wiki-${WIKISITENAME}.access_log common   
   Alias /${WIKIURLPREFIX} "${WIKILOCATION}${WIKIINSTANCE}/htdocs/"
   Alias /favicon.ico "${WIKILOCATION}${WIKIINSTANCE}/favicon.ico"
   ScriptAlias / "${WIKILOCATION}${WIKIINSTANCE}/cgi-bin/moin.cgi/"
</VirtualHost>
APACHECONF

# MoinMoin Configuration - farmconfig.py
#
# Here is a copy and paste from original farmconfig.py file
# in the moin-1.5.7-1.el5.rf package. Some additions were
# included in the secutiry section to make it configurablen
# between 1) an everyone editable wiki 2) a just Superuser,
# EditGroup, and AdminGroup editable wiki.
cat <<WIKICONFIG > ${WIKIINSTANCE}/cgi-bin/farmconfig.py 
# -*- coding: iso-8859-1 -*-
# IMPORTANT! This encoding (charset) setting MUST be correct! If you live in a
# western country and you don't know that you use utf-8, you probably want to
# use iso-8859-1 (or some other iso charset). If you use utf-8 (a Unicode
# encoding) you MUST use: coding: utf-8
# That setting must match the encoding your editor uses when you modify the
# settings below. If it does not, special non-ASCII chars will be wrong.

"""
    MoinMoin - Configuration for a wiki farm

    If you run a single wiki only, you can keep the "wikis" list "as is"
    (it has a single rule mapping all requests to mywiki.py).

    Note that there are more config options than you'll find in
    the version of this file that is installed by default; see
    the module MoinMoin.multiconfig for a full list of names and their
    default values.

    Also, the URL http://moinmoin.wikiwikiweb.de/HelpOnConfiguration has
    a list of config options.
"""


# Wikis in your farm --------------------------------------------------

# If you run multiple wikis, you need this list of pairs (wikiname, url
# regular expression). moin processes that list and tries to match the
# regular expression against the URL of this request - until it matches.
# Then it loads the <wikiname>.py config for handling that request.

# Important:
#  * the left part is the wikiname enclosed in double quotes
#  * the left part must be a valid python module name, so better use only
#    lower letters "a-z" and "_". Do not use blanks or "-" there!!!
#  * the right part is the url re, use r"..." for it
#  * the right part does NOT include "http://" nor "https://" at the beginning
#  * in the right part ".*" means "everything". Just "*" does not work like
#    for filenames on the shell / commandline, you must use ".*" as it is a RE.
#  * in the right part, "^" means "beginning" and "$" means "end"

wikis = [
    # Standalone server needs the port e.g. localhost:8000
    # Twisted server can now use the port, too.
    
    # wikiname,     url regular expression (no protocol)
    # ---------------------------------------------------------------
    #("mywiki",  r".*"),   # this is ok for a single wiki

    # for multiple wikis, do something like this:
    #("moinmoin",    r"^moinmoin.wikiwikiweb.de/.*$"),
    #("moinmaster",  r"^moinmaster.wikiwikiweb.de/.*$"),

    ("${WIKISITENAME}",		r"^${WIKISITENAME}.${MYDOMAIN}/.*$"),
]


# Common configuration for all wikis ----------------------------------

# Everything that should be configured the same way should go here,
# anything else that should be different should go to the single wiki's
# config.
# In that single wiki's config, we will use the class FarmConfig we define
# below as the base config settings and only override what's different.
#
# In exactly the same way, we first include MoinMoin's Config Defaults here -
# this is to get everything to sane defaults, so we need to change only what
# we like to have different:

from MoinMoin.multiconfig import DefaultConfig

# Now we subclass this DefaultConfig. This means that we inherit every setting
# from the DefaultConfig, except those we explicitely define different.

class FarmConfig(DefaultConfig):

    # Critical setup  ---------------------------------------------------

    # Misconfiguration here will render your wiki unusable. Check that
    # all directories are accessible by the web server or moin server.

    # If you encounter problems, try to set data_dir and data_underlay_dir
    # to absolute paths.

    # Where your mutable wiki pages are. You want to make regular
    # backups of this directory.
    #data_dir = '${WIKILOCATION}${WIKIINSTANCE}/data/'

    # Where read-only system and help page are. You might want to share
    # this directory between several wikis. When you update MoinMoin,
    # you can safely replace the underlay directory with a new one. This
    # directory is part of MoinMoin distribution, you don't have to
    # backup it.
    data_underlay_dir = '${WIKILOCATION}${WIKIINSTANCE}/underlay/'

    # Location of your STATIC files (css/png/js/...) - you must NOT use the
    # same for invoking moin.cgi (or, in general, the moin code).
    # url_prefix must be '/wiki' for Twisted and standalone servers.
    # For CGI, it should match your Apache Alias setting.
    url_prefix = '/${WIKIURLPREFIX}'


    # Security ----------------------------------------------------------

    # This is checked by some rather critical and potentially harmful actions,
    # like despam or PackageInstaller action:
    #superuser = [u"${WIKISUPERUSER}", ]

    # IMPORTANT: grant yourself admin rights! replace YourName with
    # your user name. See HelpOnAccessControlLists for more help.
    # All acl_rights_xxx options must use unicode [Unicode]
    #acl_rights_default = u"All:read"
    #acl_rights_before  = u"${WIKISUPERUSER}:read,write,delete,revert,admin" \\
    #			 u"AdminGroup:read,write,delete,revert,admin" \\
    #			 u"EditGroup:read,write,delete,revert"

    # Link spam protection for public wikis (uncomment to enable).
    # Needs a reliable internet connection.
    #from MoinMoin.util.antispam import SecurityPolicy


    # Mail --------------------------------------------------------------

    # Configure to enable subscribing to pages (disabled by default)
    # or sending forgotten passwords.

    # SMTP server, e.g. "mail.provider.com" (None to disable mail)
    #mail_smarthost = "${WIKIMAILSMARTHOST}"

    # The return address, e.g u"Jürgen Wiki <noreply@mywiki.org>" [Unicode]
    #mail_from = u"${WIKIMAILFROM}"

    # "user pwd" if you need to use SMTP AUTH
    #mail_login = "${WIKIMAILLOGIN}"


    # User interface ----------------------------------------------------

    # Add your wikis important pages at the end. It is not recommended to
    # remove the default links.  Leave room for user links - don't use
    # more than 6 short items.
    # You MUST use Unicode strings here, but you need not use localized
    # page names for system and help pages, those will be used automatically
    # according to the user selected language. [Unicode]
    navi_bar = [
        # If you want to show your page_front_page here:
        #u'%(page_front_page)s',
        u'RecentChanges',
        u'FindPage',
        u'HelpContents',
    ]


    # You must use Unicode strings here [Unicode]
    page_category_regex = u'^Category[A-Z]'
    page_dict_regex = u'[a-z]Dict$'
    page_group_regex = u'[a-z]Group$'
    page_template_regex = u'[a-z]Template$'

    # Content options ---------------------------------------------------

    # Show users hostnames in RecentChanges
    show_hosts = 1

    # Show the interwiki name (and link it to page_front_page) in the Theme,
    # nice for farm setups or when your logo does not show the wiki's name.
    show_interwiki = 1
    #logo_string = u''

    # Enable graphical charts, requires gdchart.
    #chart_options = {'width': 600, 'height': 300}
WIKICONFIG

# Copy First Wiki Configuration file.
#
cat <<WIKICONFIG > ${WIKIINSTANCE}/cgi-bin/${WIKISITENAME}.py
# -*- coding: iso-8859-1 -*-
# IMPORTANT! This encoding (charset) setting MUST be correct! If you live in a
# western country and you don't know that you use utf-8, you probably want to
# use iso-8859-1 (or some other iso charset). If you use utf-8 (a Unicode
# encoding) you MUST use: coding: utf-8
# That setting must match the encoding your editor uses when you modify the
# settings below. If it does not, special non-ASCII chars will be wrong.

"""
This is a sample config for a wiki that is part of a wiki farm and uses
farmconfig for common stuff. Here we define what has to be different from
the farm's common settings.
"""

# we import the FarmConfig class for common defaults of our wikis:
from farmconfig import FarmConfig

# now we subclass that config (inherit from it) and change what's different:
class Config(FarmConfig):

    # basic options (you normally need to change these)
    sitename = u'${WIKISITENAME}' # [Unicode]
    interwikiname = '${WIKISITENAME}'

    # name of entry page / front page [Unicode], choose one of those:

    # a) if most wiki content is in a single language
    #page_front_page = u"MyStartingPage"

    # b) if wiki content is maintained in many languages
    page_front_page = u"${WIKIFRONTPAGE}"

    logo_string = u'<img src="/${WIKIURLPREFIX}/common/moinmoin.png" alt="MoinMoin Logo">'

    # The default theme anonymous or new users get
    theme_default = 'modern'

    # Language options --------------------------------------------------
    
    # See http://moinmoin.wikiwikiweb.de/ConfigMarket for configuration in 
    # YOUR language that other people contributed.
    
    # The main wiki language, set the direction of the wiki pages
    language_default = '${WIKILANGUAGE}'

    data_dir = '${WIKILOCATION}${WIKIINSTANCE}/${WIKISITENAME}.${MYDOMAIN}/'
WIKICONFIG

# Uncomment some options in the farmconfig.py file if ...
if [ "$WIKISUPERUSER" != "" ]; then

	sed -i -e '
		/#superuser/s/#//
		s/YourName/'$WIKISUPERUSER'/' ${WIKIINSTANCE}/cgi-bin/farmconfig.py

fi

if [ "$WIKIRESTRICTEDIT" = "yes" ]; then

	sed -i -r -e '
		/#acl_rights_before/s/#//
		/#acl_rights_default/s/#//
		/#[\t ]*u"EditGroup/s/#//
		/#[\t ]*u"AdminGroup/s/#//' ${WIKIINSTANCE}/cgi-bin/farmconfig.py

fi

if [ "$WIKIMAILSMARTHOST" != "" ]; then

	sed -i -e '
		/#mail_smarthost/s/#//' ${WIKIINSTANCE}/cgi-bin/farmconfig.py

fi

if [ "$WIKIMAILFROM" != "" ];then

	sed -i -e '
		/#mail_from/s/#//' ${WIKIINSTANCE}/cgi-bin/farmconfig.py

fi

if [ "$WIKIMAILLOGIN" != "" ];then
 
	sed -i -e '
		/#mail_login/s/#//' ${WIKIINSTANCE}/cgi-bin/farmconfig.py

fi

# File Permissions
#
# Here we set the file permissons to the created and copied
# files.
#
chown -R $USER.$GROUP $WIKIINSTANCE
chmod -R ug=rwx $WIKIINSTANCE
chmod -R o-rwx $WIKIINSTANCE
cd $WIKIINSTANCE
chown -R $USER.$GOUP cgi-bin 
chmod -R ug=rx cgi-bin
chmod -R o-rwx cgi-bin


# Last Message
#
less <<LASTMESSAGE

------------------------------------------------------------
	     *** WIKIFARM INSTANCE CREATED *** 
------------------------------------------------------------

   To finish the installation do the following:

	1. Restart the Web Server (service httpd restart)

	2. Open your browser and try the address:
	http://${WIKISITENAME}.${MYDOMAIN}/"

------------------------------------------------------------
	      *** HOWTO CREATE NEW WIKIS  *** 
------------------------------------------------------------

  To create new wikis into the farm check the following
  steps:

  	1. Update your farmconfig.py file adding the new
	wiki definition. Ex.

	("mywiki2",    r"^mywiki2.${MYDOMAIN}/.*$"),

	2. Create a directory to store your new wiki data.
	Ex.
	
	mkdir ${WIKILOCATION}${WIKIINSTANCE}/mywiki2.${MYDOMAIN}/

	3. Copy the content of data directory into the
	recently created directory. Ex.: 

	cp -rv ${WIKILOCATION}${WIKIINSTANCE}/data/* \\
	${WIKILOCATION}${WIKIINSTANCE}/mywiki2.${MYDOMAIN}/

	4. Create a copy of your cgi-bin/mywiki.py into
	cgi-bin/mywiki2.py. Then modify mywiki2 with the new
	and specific configuration, related to the second
	wiki. Ex.:

	sitename = u'mywiki2' # [Unicode]
	interwikiname = 'mywiki2'
	data_dir = '/var/www/wikifarm/mywiki2.${MYDOMAIN}/'
		

------------------------------------------------------------
		   *** GET TROUBLES ? ***
------------------------------------------------------------

   If you get some error when try to reach your wiki through
   the web browser, check the following:

	1. Add in your DNS or HOSTS file a record to your
	wiki address. For example, if your domain is
	${MYDOMAIN} and your wiki is in a host with the ip
	192.168.0.1, and you want a wiki address like
	http://${WIKISITENAME}.${MYDOMAIN}/ it is possible
	that you should add a related CNAME record into your
	DNS to your new wiki address, something like the
	following:

   	${WIKISITENAME}.${MYDOMAIN}.	IN CNAME	${MYDOMAINl}.

	Remeber to do a 'service named restart' after
	changes.

	2. Check Virtual Domain configuration in your Apache
	server. It is possible that it is disabled so enable
	it by uncomenting a line like the following:

	NameVirtualHost *:80

	3. It is possible that you want something in
	http://${MYDOMAIN}/ other than the error that
	sometimes appears there after you get your wiki
	working into virtual domains. So you should create a
	virtual domain for that address too and change the
	DocumentoRoot param to wherever you want to load at
	that moment.

	If you are still in troubles, you can write to:
	<alain.reguera@gmail.com>. 
	
	Other way ...
	
   Enjoy your installed wikifarm :).

LASTMESSAGE