BOMBOLOM.COM

(http) Instalação de um Wiki (MoinMoin)

Pelo menos em Portugal as empresas têm GRANDES problemas de organização. Quem faz trabalho em TI não pode só por si resolver esses problemas, mas podemos sem dúvida, apresentar e configurar ferramentas que facilitem a organização.

Um Wiki é uma dessas ferramentas. Um dos exemplos mais conhecidos de Wiki é a própria Wikipédia, e nada mais apropriado do que dar um link da Wikipédia para mostrar o que é um Wiki.

A Wikipédia é um Wiki publico, ou seja qualquer pessoa pode editar qualquer página. Para uma empresa isso poderá não ser a opção mais conveniente, por isso neste documento vou mostrar como se pode configurar um wiki privado (ao qual apenas têm acesso pessoas autorizadas).

Numa empresa um Wiki pode-se usar para diversos fins:

Notar que ao fim ao cabo um wiki pode servir para armazenar de uma forma fácil de aceder todo o género de informação que queiramos. É claro que para certos tipos de informação há ferramentas mais adequadas, que devem de ser usadas em vez do Wiki. Por exemplo a informação contabilística é armazenada num sistema de contabilidade, o economato (almoxarifado) tem a sua própria ferramenta, e não deve ser muito prático manter livros de endereços ou agendas num wiki (já uma lista de "to do's" é um caso a considerar!).

Escolhi demonstrar a instalação do Wiki MoinMoin porque este tem um bom número de características, é fácil de instalar e de configurar, não utiliza base de dados (o que além de encurtar este artigo facilita editar remotamente por ssh e de uma forma geral resolver os problemas), está traduzido para português e finalmente é escrito em Python (eu gosto da linguagem...).

Para seguir este artigo deve:

Se seguiu algum dos links anteriores já sabe que esta instalação vai ser feita num sistema Debian. No entanto o procedimento de instalação é idêntico (ou quase) em qualquer outra distribuição.

O Debian (e sem dúvida as outras distribuições de linux) já têm pacotes prontos para instalação do MoinMoin. Apesar disto vou mostrar como se instala a partir do pacote distribuido no site do MoinMoin, assim não somos obrigados a usar a versão que vem com a distribuição.

Instalação do sw no sistema

  1. Download do pacote:
    $ wget http://static.moinmo.in/files/moin-1.6.3.tar.gz

    Neste caso trata-se da versão 1.6.3, que é a última versão estável quando escrevi este artigo. Deve verificar no site do MoinMoin se esta é a versão correcta.

  2. Extrair para uma directoria adequada:
    $ tar -xzvf moin-1.6.3.tar.gz
  3. Como root instalar para /usr/local:
    $ su -
    # cd <directoria onde foi extraido o wiki>
    # python2.5 setup.py install --prefix=/usr/local

    Notar que estamos a instalar para um caminho alternativo, fazemos isto para não poluirmos o nosso sistema com os ficheiros do MoinMoin.

  4. Modificar /usr/local/bin/moin como se segue:
    #!/usr/bin/python2.5
    #Fix and uncomment those 2 lines if your moin command doesn't find the MoinMoin package:
    import sys
    sys.path.insert(0, '/usr/local/lib/python2.5/site-packages')
    from MoinMoin.script.moin import run
    run()

    Notar que utilizámos a versão 2.5 do Python, você poderá estar a usar outra versão, por isso modifique o script anterior de acordo com isso, também.

Criação de uma instância do MoinMoin

Um sistema MoinMoin, uma vez instalado, pode servir vários wikis. Cada um desses wikis vive na sua instância. Em instalações mais complicadas podemos configurar o sistema de forma a que várias instâncias partilhem por exemplo as páginas de ajuda, utilizadores e grupos de utilizadores, etc.

Para criar uma instância faz-se:

  1. Criar a directoria onde vão ficar os wikis (podemos ter várias instâncias no mesmo servidor):
    $ mkdir -p /arquivo/www/moin/

    Notar que eu costumo usar a directoria /arquivo/www para armazenar os sites. É claro que pode usar outra directoria qualquer.

  2. Nessa directoria criar o script 'createinstance.sh':
    #!/bin/bash
    
    # path of MoinMoin shared files
    SHARE=/usr/local/share/moin
    
    # path to target instance location
    INSTANCE=$1
    
    # should be nice
    USER=www-data
    GROUP=www-data
    
    if [ ! $1 ]
    then
      echo "You must specify an instance (relative or absolute path)"
      exit
    fi
    
    if [[ -e $1 || -d $1 ]]
    then
      echo "$1 already exists"
      exit
    fi
    
    mkdir -p $INSTANCE
    cp -R $SHARE/data $INSTANCE
    cp -R $SHARE/underlay $INSTANCE
    cp $SHARE/config/wikiconfig.py $INSTANCE
    
    chown -R $USER.$GROUP $INSTANCE
    chmod -R ug+rwX $INSTANCE
    chmod -R o-rwx $INSTANCE
    
    if [ $? ]
    then
      echo "Done."
    fi

    Tornar o script executável:

    $ chmod +x createinstance.sh

    NOTAR no script acima deverá assegurar-se que USER/GROUP correspondem ao utilizador e grupo sob o qual o Apache está a correr. A variável SHARE deverá corresponder ao prefixo usado para fazer a instalação do MoinMoin mais 'share/moin'.

  3. Criar a instância (como root dado que vai ser necessário mudar ownerships de ficheiros):
    # cd /arquivo/www/moin/
    # ./createinstance.sh <my wiki>
  4. Editar em /arquivo/www/moin/<my wiki> o ficheiro wikiconfig.py. Existem várias variáveis que devem ser ajustadas. As duas fundamentais são:
    data_dir = '/arquivo/www/moin/<my wiki>/data/'
    data_underlay_dir = '/arquivo/www/moin/<my wiki>/underlay/'

NOTA IMPORTANTE DE SEGURANÇA: tanto a directoria 'data' como a 'underlay' não devem ser criadas dentro da directoria publica do servidor de html. Além disto as permissões devem ser ajustadas de tal forma que apenas o servidor de html tenha direito de modificação dentro destas directorias. Caso contrário teremos uma configuração insegura.

Configuração do sistema como script CGI

Deve-se configurar primeiro como CGI, só depois vamos configurar como mod_python (de modo a termos a certeza que o nosso sistema funciona convenientemente).

  1. Copiar para a directoria do novo wiki o ficheiro moin.cgi
    cp /usr/local/share/moin/server/moin.cgi /arquivo/www/moin/<my wiki>/
  2. Editar o ficheiro /arquivo/www/moin/<my wiki>/moin.cgi de modo a que este reflita a sua configuração. Deve acrescentar os caminhos adequados. Especificamente, as alterações que deve fazer são nas seguintes linhas:
    # Path of the directory where wikiconfig.py is located.
    # YOU NEED TO CHANGE THIS TO MATCH YOUR SETUP.
    sys.path.insert(0, '/arquivo/www/moin/<my wiki>')
    
    # Path to MoinMoin package, needed if you installed with --prefix=PREFIX
    # or if you did not use setup.py.
    sys.path.insert(0, '/usr/local/lib/python2.5/site-packages')
  3. Editar a sua configuração do Apache, com:
    Alias /moin_static163/ "/usr/local/share/moin/htdocs/"
    <Directory "/usr/local/share/moin/htdocs">
       Options Indexes FollowSymLinks Includes
       # Config do htaccess
       AllowOverride All
       # Geral
       Order allow,deny
       Allow from all
    </Directory>
    
    ScriptAlias /my_wiki "/arquivo/www/moin/<my wiki>/moin.cgi"
    <Directory "/arquivo/www/moin/oasiswiki">
       AllowOverride None
       Options +ExecCGI -Includes
       Order allow,deny
       Allow from all
    </Directory>

    Deve testar nesta altura se o software funciona. Devemos reiniciar o Apache e aceder a http[s]://<site>/<my_wiki>/ . É claro que deverá substituir o 'my_wiki' por um título que se adeque ao seu wiki.

    Se aparecer a página do wiki, então podemos passar ao passo seguinte que consistem em configurar o wiki para funcionar com o mod_python.

Configuração da instância usando o mod_python

O mod_python é uma forma rápida de servir aplicações web escritas em Python, é muito mais rápido do que o método CGI.

Temos de voltar a configurar o Apache:

  1. Comentar a linha do ScriptAlias
    # ScriptAlias /my_wiki "/arquivo/www/moin/<my wiki>/moin.cgi"
    #<Directory "/arquivo/www/moin/oasiswiki">
    ...
    #</Directory>
    
  2. Acrescentar a directiva Location:
        <Location /my_wiki>
            SetHandler python-program
            # Add the path of your wiki directory
            PythonPath "['/arquivo/www/moin/<my wiki>','/usr/local/lib/python2.5/site-packages'] + sys.path"
            PythonHandler MoinMoin.request.request_modpython::Request.run
        </Location>

    Notar que, como instalámos o MoinMoin num local não standard foi necessário acrescentar esse caminho ao PythonPath.

Neste momento, se reiniciarmos o Apache, já conseguimos acessar o Wiki usando mod_python.

Mais configurações

Permissões por omissão

Existem muitas situações onde nos convém termos um Wiki semi-publico ou privado. Para isso temos de voltar a editar o ficheiro de configuração wikiconfig.py e definir os ACL apropriados:

acl_rights_before  = u"sysadm:read,write,delete,revert,admin"
    acl_rights_after   = u"Known:read,write All:"
    acl_rights_default = u""
    acl_hierachic = True

Os ACLs são aplicados por ordem, ie, os ACLs são percorridos pelo programa até ser encontrado um que seja aplicável ao utilizador activo (isto pode ser um bocado confuso). A ordem de aplicação dos ACLs é a seguinte:

  1. A directiva acl_rights_before é avaliada;
  2. Se estiverem definidos ACLs na página estes são avaliados;
  3. Se NÃO estiverem definidos ACLs na página são avaliados os ACLs da directiva acl_rights_default;
  4. Finalmente são avaliados os ACLs da directiva acl_rights_default.

Tendo em conta o anterior, tenho grandes expectativas que as alterações ao ficheiro de configuração sejam compreensíveis: fazemos com que o user 'sysadm' tenha todos s direitos desde o inicio e damos direitos de leitura e escrita a todos os utilizadores que tenham conta no sistema (grupo 'Known'), não definimos acessos por omissão e por fim, a menos que se dê acesso nos ACLs da página retiramos os direitos aos utilizadores não logados.

Criar utilizadores num sistema privado

Se tivermos um sistema privado, então os users não poderão criar as suas contas. Para resolver isto temos várias hipóteses:

Conclusão

Um wiki é uma excelente forma de organizar informação de grupos de pessoas e da empresa em geral. Tem também a vantagem de ter uma curva de aprendizagem relativamente suave o que permite aos próprios utilizadores usarem o sistema em pouco tempo.

O MoinMoin, sistema que instalámos, é do ponto de vista do utilizador muito simples. Mesmo assim, ao princípio, eu configurei o sistema para usar o editor WYSIWYG. Foi com grande surpresa que constatei que os utilizadores ao fim de pouco tempo começaram a usar o editor com o wiki markup - lição: por vezes os utilizadores surpreendem-nos pela positiva! Assim recomendo que na sessão de formação se mostre apenas a edição por markup, já que é mais prática e produz, inevitavelmente, um melhor código.

09.05.2008 | Ler mais | Comentários | Tags , , ,

Voltar à Página principal | Made with PyBlosxom