O Gerenciador de Conte\xFAdo MIR

Este \xE9 o manual do gerenciador de conte\xFAdo MIR, uma poderosa ferramenta para automatizar a publica\xE7\xE3o, facilitar a administra\xE7\xE3o e distribuir o conte\xFAdo de um s\xEDtio de publica\xE7\xE3o aberta. O MIR \xE9 o software que constr\xF3i o s\xEDtio do CMI Brasil e pode ser utilizado para construir o s\xEDtio de qualquer outro projeto de publica\xE7\xE3o aberta.

Se voc\xEA est\xE1 procurando por informa\xE7\xF5es sobre como mexer na interface administrativa do MIR, consulte o texto A P\xE1gina de Administra\xE7\xE3o do s\xEDtio do CMI.

Este manual \xE9 voltado para pessoas que s\xE3o administradoras de sistemas, desenvolvedoras de gerenciadores de conte\xFAdo, designers de sites ou curiosas em geral que desejam saber como funciona, como instalar e como configurar um s\xEDtio na internet gerado pelo Mir.

\xCDndice

O que \xE9 MIR?

MIR foi a esta\xE7\xE3o espacial russa que durante 15 anos abrigou seres humanos em \xF3rbita da Terra. Mir tamb\xE9m significa paz em algumas l\xEDnguas eslavas. No nosso caso, por\xE9m, MIR \xE9 um CMS (Content Management System - Sistema de Administra\xE7\xE3o de Conte\xFAdo) voltado para sites de publica\xE7\xE3o aberta. O MIR \xE9 um gerenciador de conte\xFAdo robusto cujas principais caracter\xEDsticas s\xE3o:

Caracter\xEDsticas gerais

  • Sistema multil\xEDngue para a produ\xE7\xE3o, publica\xE7\xE3o e administra\xE7\xE3o de conte\xFAdo
  • Permite v\xE1rios tipos de artigos diferentes
  • Sistema de coment\xE1rios nos artigos
  • Divis\xE3o por t\xF3picos
  • Totalmente configur\xE1vel atrav\xE9s de um sistema de templates
  • Produ\xE7\xE3o de conte\xFAdo est\xE1tico ao inv\xE9s de din\xE2mico
  • Sistema de busca

Caracter\xEDsticas t\xE9cnicas

Sob o ponto de vista mais t\xE9cnico, o MIR tem as seguintes caracter\xEDsticas:

  • Escrito na linguagem de programa\xE7\xE3o Java e roda em plataformas com 100% de software livre
  • Sistema Freemarker de templates que permite a separa\xE7\xE3o entre o c\xF3digo do MIR e a produ\xE7\xE3o do conte\xFAdo
  • Utiliza o banco de dados PostgreSQL
  • Utiliza o Apache Tomcat como conector entre a M\xE1quina Virtual Java e o servidor web
  • Design estruturado em quatro camadas: Servlets, Entity/Database (camada persistente), Manipuladores de formatos de m\xEDdia e a camada de Produ\xE7\xE3o (Producer); Esta \xFAltima camada \xE9 respons\xE1vel pela cria\xE7\xE3o das p\xE1ginas html
  • Meta-dados e esquema do banco de dados baseado no padr\xE3o do Dublin Core
  • Sistema de busca usando o Lucene
  • Logs atrav\xE9s do Log4J
  • Localizer: permite que seja adicionado c\xF3digo java espec\xEDfico (local) do seu s\xEDtio, sem interferir com o c\xF3digo do MIR

O s\xEDtio do MIR \xE9 o http://mir.indymedia.org/ e seu deselvolvimento do MIR \xE9 feito em http://mir.codecoop.org/. Existe a lista de discuss\xE3o http://lists.indymedia.org/mailman/listinfo/mir-coders onde s\xE3o discutidos assuntos relacionados ao software.

S\xEDtios que rodam MIR

Veja aqui uma lista mais completa.

Arquitetura

Os diferentes servidores usados em conjunto com o Mir permitem a configura\xE7\xE3o de um sistema escal\xE1vel em que o sistema de publica\xE7\xE3o, administra\xE7\xE3o e o s\xEDtio est\xE1tico fiquem em servidores diferentes.

A figura abaixo mostra, por exemplo, um design em que todo o s\xEDtio \xE9 armazenado num \xFAnico servidor: o Tomcat recebe requisi\xE7\xF5es das p\xE1ginas de administra\xE7\xE3o, publica\xE7\xE3o e busca, e as passa para os servlets Mir e OpenMir, que juntamente com outros servlets lidam com o banco de dados, adicionando informa\xE7\xF5es publicadas ou ent\xE3o retirando informa\xE7\xF5es para ent\xE3o produzir, com a ajuda de um conjunto de templates, p\xE1ginas html armazenadas no s\xEDtio est\xE1tico.

Arquitetura com apenas um servidor

Em s\xEDtios com muito acesso, o uso da banda pode ser um par\xE2metro sens\xEDvel e por isso a distribui\xE7\xE3o do conte\xFAdo do s\xEDtio pode ser distribu\xEDda em diversos outros servidores que ter\xE3o de lidar apenas com p\xE1ginas de html, sem precisarem nem de bancos de dados ou mesmo do Tomcat, como mostra a figura abaixo.

Arquitetura com espelhamento

Como a maioria dos acessos num s\xEDtio s\xE3o para navega\xE7\xE3o e n\xE3o para publica\xE7\xE3o, a exist\xEAncia de espelhos distribui muito bem o uso da banda, permitindo que o servidor onde o Mir est\xE1 instalado ter banda suficiente para cumprir as tarefas de administra\xE7\xE3o e publica\xE7\xE3o. Os mirrors podem ser feitos simplesmente sincronizando os arquivos do s\xEDtio est\xE1tico, sendo poss\xEDvel utilizar tanto ferramentas como o rsync via SSH quanto sistemas de controle de vers\xF5es, como o Subversion.

Configura\xE7\xF5es avan\xE7adas permitem at\xE9 que o banco de dados seja armazenado em dois servidores diferentes, usando esquema de mestre-escravo, permitindo que um mesmo site utilize instala\xE7\xF5es de Mir em dois servidores. O banco de dados e o Tomcat podem estar em m\xE1quinas diferentes, mas recomenda-se que o link entre ambos seja r\xE1pido e de alta disponibilidade.

Como instalar o MIR

A instala\xE7\xE3o do MIR envolve os seguintes passos:

Neste procedimento assumimos que voc\xEA j\xE1 possui instalado o servidor web Apache nas vers\xF5es 1.3.x.

Preparando um servidor para o MIR

Esta parte consiste em instalar um servidor de banco de dados, um servidor web, compiladores, m\xE1quinas virtuais e cont\xE2iners para o Java. As instru\xE7\xF5es a seguir valem para um servidor rodando a distribui\xE7\xE3o Debian de GNU/Linux na vers\xE3o Sarge.

O procedimento de preparar o servidor para o MIR s\xF3 precisa ser feito apenas uma vez na m\xE1quina. Se voc\xEA est\xE1 instalado um novo s\xEDtio numa m\xE1quina que j\xE1 tem alguma inst\xE2ncia do MIR rodando, pule para a se\xE7\xE3o Baixando o c\xF3digo fonte do MIR.

Instalando o banco de dados

O banco de dados \xE9 o respons\xE1vel pelo armazenamento de todo o conte\xFAdo textual e de muitas partes relacionadas aos arquivos de m\xEDdia. Atualmente o MIR suporta trabalhar apenas com o banco de dados PostgreSQL. Primeiro instale-o:

apt-get install postgresql

Ent\xE3o edite as tr\xEAs primeiras linhas do /etc/postgresql/pg_hba.conf, conforme suas necessidades.

# Database administrative login by UNIX sockets
local   all         postgres                                        password
#
# All other connections by UNIX sockets
local   all         all                                             password
#
# All IPv4 connections from localhost
host    all         all         127.0.0.1         255.255.255.255   password

Uma boa pedida \xE9 a seguinte:

local        all                                           password
host         all         127.0.0.1     255.0.0.0           password
host         all         0.0.0.0       0.0.0.0             reject

Reinicie o banco de dados e altere a senha do usu\xE1rio administrador do postgres (onde est\xE1 xxxxxxx voc\xEA coloca a nova senha):

/etc/init.d/postgresql restart
sudo su postgres
psql template1
alter user postgres with password 'xxxxxxx';
\q

Tomcat e M\xE1quina Java

O Tomcat \xE9 um "cont\xE2iner" para Servlets, agindo como uma conex\xE3o entre o servidor web (Apache, no nosso caso) e a a aplica\xE7\xE3o Java (Mir, no nosso caso). Al\xE9m do Tomcat, uma m\xE1quina Java \xE9 necess\xE1ria e pode ser tanto a m\xE1quina da Sun quanto alguma outra implementa\xE7\xE3o (Kaffe, por exemplo). Neste documento assumiremos a m\xE1quina da Sun.

Ent\xE3o vamos l\xE1! Primeiro instale a m\xE1quina Java da Sun e depois use o apt-get para instalar o tomcat e suas depend\xEAncias:

apt-get install tomcat4
/etc/init.d/tomcat4 restart

Sinta-se \xE0 vontade para usar outras m\xE1quinas virtuais, certifique-se apenas que a vari\xE1vel de ambiente JAVA_HOME esteja corretamente ajustada para o local onde est\xE3o suas bibliotecas e bin\xE1rios do java:

export JAVA_HOME=/usr/lib/j2sdk1.5-sun
export PATH=$PATH:$JAVA_HOME/bin

Ant

O Ant \xE9 uma ferramenta de constru\xE7\xE3o para o Java similar ao GNU Make e ser\xE1 usado para compilar o c\xF3digo fonte do MIR. Sua instala\xE7\xE3o \xE9 muito simples:

sudo apt-get install ant

Baixando o c\xF3digo fonte do MIR

Agora que voc\xEA instalou todos os softwares necess\xE1rios para rodar o MIR, \xE9 tempo de baixar seu c\xF3digo fonte ou pacote bin\xE1rio e iniciar sua instala\xE7\xE3o.

At\xE9 a data de escrita deste manual o MIR n\xE3o possu\xEDa um pacote bin\xE1rio de distribui\xE7\xE3o, algo que facilitaria muito a instala\xE7\xE3o. Pacotes para distribui\xE7\xF5es de GNU/Linux como o Debian est\xE3o em processo de constru\xE7\xE3o.

Por causa disso, voc\xEA ter\xE1 de baixar o c\xF3digo fonte do MIR diretamente do seu reposit\xF3rio de desenvolvimento. O MIR \xE9 desenvolvido por v\xE1rios membros do coletivo t\xE9cnico da rede IMC. Ele \xE9 desenvolvido de modo colaborativo, isto \xE9, v\xE1rias pessoas trabalham nele ao mesmo tempo, submetendo novas op\xE7\xF5es e corrigindo bugs. O c\xF3digo-fonte do MIR pode ser obtido atrav\xE9s do sistema CVS (Concurrent Versioning System), que \xE9 um sistema para gerenciar e baixar c\xF3digos fontes de programas escritos de modo colaborativo.

Como voc\xEA deve saber, grandes programas s\xE3o feitos de pequenos arquivos de c\xF3digo-fonte, muitos pequenos arquivos de c\xF3digo-fonte. Muitas pessoas mexendo em muitos pequenos arquivos de c\xF3digo-fonte ao mesmo tempo \xE9 uma grande confus\xE3o. Para ordenar todo o trampo, os programas geralmente s\xE3o desenvolvidos atrav\xE9s do CVS, que \xE9 um sistema que, dentre outras coisas, marca as atualiza\xE7\xF5es de cada arquivo editado. Para mais informa\xE7\xF5es sobre o sistema CVS, consulte o s\xEDtio http://www.cvs.org.

Muito bem, vamos primeiro logar no CVS do MIR:

cvs -d :pserver:anonymous@cvs.codecoop.org:/cvsroot/mir login

Para a senha, apenas tecle ENTER. Agora crie uma pasta onde ser\xE1 armazenado o c\xF3digo fonte e tamb\xE9m o s\xEDtio gerado pelo MIR. Por costume utiliza-se uma subpasta dentro do /var/www, caso este seja seu diret\xF3rio de trabalho do Apache.

cd /var/www
mkdir SITE_NAME
cd SITE_NAME

Em todo este exemplo, SITE_NAME \xE9 o nome do diret\xF3rio do site a ser instalado. No caso do CMI Brasil, SITE_NAME \xE9 brasil. \xC9 o nome que vai aparecer em http://SITE_NAME.indymedia.org, no caso de um s\xEDtio da rede Indymedia.

O pr\xF3ximo comando baixa o c\xF3digo fonte do MIR no diret\xF3rio /var/www/SITE_NAME/mir.

sudo cvs -d :pserver:anonymous@cvs.codecoop.org:/cvsroot/mir co -r MIR_release mir

Onde estiver escrito MIR_release substitua pelo nome da \xFAltima vers\xE3o est\xE1vel do MIR. Por exemplo, MIR_1_1 para o MIR 1.1. Para saber qual \xE9 a \xFAltima vers\xE3o, veja em http://mir.indymedia.org

Editando o arquivo de configura\xE7\xE3o do MIR

O arquivo de configura\xE7\xF5es padr\xE3o

O arquivo de configura\xE7\xE3o do MIR fica em etc/config.properties em rela\xE7\xE3o \xE0 pasta onde voc\xEA baixou o c\xF3digo fonte. Por padr\xE3o ele vem com um arquivo de exemplo, o config.properties-dist, que \xE9 o seguinte (mudei algumas coisas para ele caber na p\xE1gina, ent\xE3o n\xE3o use o exemplo abaixo na configura\xE7\xE3o do seu s\xEDtio, mas sim o config.propertiers-dist dispon\xEDvel na sua c\xF3pia do c\xF3digo-fonte):

#
# Sample config for Mir
# by Matthias <mjordan@code-fu.de> 2001-09-12
# reorganized by <init@nadir.org>  2003-02-12
#
# The Mir software realizes a semi-dynamic web service:
# The web server that is accessed by readers has pure static
# pages. These pages are generated by the Mir software that
# consists of a collection of Java servlets and HTML templates.
#
# Mir uses a database server to store the data that is needed to
# build the static site.
# So there are basically three parts in this config file:
#
# a) general & admin setup
# b) static site config
# c) dynamic site
# d) database config
#
# edit this to suit your needs
# After editing this file, two steps need to be taken to make the changes effective:
#   1. ant has to be invoked.
#   2. tomcat needs to be restarted.
#
# This file only contains the properties that are most often changed. To view all
# possible config values, refer to the file default.properties, located in the
# source directory. Don't change settings in default.properties however, instead
# use this file.
#
# Note: for filename values, by default, files are used relative to the servlet's
# WEB-INF directory.
#
# The setup uses the following assumptions:
# The URL to reach the site is http://mir.someserver.org
# The StorageRoot of this URL is /var/www/project/site/
# All produced pages and media are located below this directory.

################################################
############    A) GENERAL SETUP  ##############
################################################

# mir/project an contact information
# for display on the site
#
Mir.Name=mir.someserver.org
Mir.Shortname=mir

Mir.Contact-email.address=mir-project@somemailserver.org
Mir.Contact-email.name=mir-project mailinglist

Mir.Tech-email.address=mir-admins@somemailserver.org
Mir.Tech-email.name=mir-admins mailinglist

Mir.Public-email.address=project@somemailserver.org
Mir.Public-email.name=project mailinglist

# Default timezone to display times in in admin, producers
# use CET for Central European Time (Paris, Amsterdam)
# more timezones here: http://www.postgresql.org/docs/7.2/static/timezones.html
#
Mir.DefaultTimezone= UTC

# Default date/time format
# For the syntax of the format, refer to
# http://java.sun.com/j2se/1.3/docs/api/java/text/SimpleDateFormat.html
Mir.DefaultDateTimeFormat = yyyy-MM-dd HH:mm

# where to put the lucene index
# for the build in searchengine
# (must be creatable and writable by the tomcat user)
IndexPath=index

# temp-dir used for media-uploads
TempDir=/tmp

# Logging
#
Log.LogClass = mir.log.log4j.LoggerImpl
Log.log4j.ConfigurationFile = etc/log4j.properties
Log.Home = log

# Mir.Localizer
# for your additional site-specific java-code
#
Mir.Localizer=mircoders.localizer.basic.MirBasicLocalizer

# The location of the producer specifiations
#
Mir.Localizer.ProducerConfigFile=etc/producer/producers.xml

# For missing values, the FallbackLanguage is used as default
#
Mir.Admin.FallbackLanguage=en

# the templates
#
Mir.Localizer.Producer.GeneratorLibrary= default=freemarker(etc/producer/)
Mir.Localizer.Admin.GeneratorLibrary= default=freemarker(templates/admin/)
Mir.Localizer.OpenPosting.GeneratorLibrary= default=freemarker(etc/open/)


#################################
# admin interface configuration #
#################################

# Settings for the admin login:
# If the default language is left empty, it will set the accept-language of
# the client browser as the default.
#
Mir.Login.DefaultLanguage=en
Mir.Login.Languages=en;de;fr;nl;es;pt;eu;sv;tr;zh;gz

# Show who's logged in?
#
Mir.Admin.ShowLoggedinUsers=1

# How should the custom operations (hide etc) in article and comment lists
# be presented?
# 0 = links, 1 = checkboxes, 2 = a listbox
#
Mir.Localizer.Admin.ListOperationsFlavor=1

# How should the topics be presented on the article edit page?
# 0 = in a multiselect list box, 1 = checkboxes
#
Mir.Localizer.Admin.TopicListFlavor=1

# For the checkboxes flavour, how many columns should there be?
#
Mir.Localizer.Admin.TopicListColumns=3

# In which order should the topic appear?
#
Mir.Localizer.Admin.TopicListOrder=title

# enable deletion of comments/articles?
#
Mir.Localizer.Admin.AllowDeleteComment=1
Mir.Localizer.Admin.AllowDeleteArticle=1

# Article Preview Link URL (Link to produced articles from within admin)
#
Article.PublicUrl= \ 
http://mir/${to_content.date.formatted.yyyy}/${to_content.date.formatted.MM}/${to_content.id}.html
Comment.PublicUrl= \
http://mir/${date.formatted.yyyy}/${date.formatted.MM}/${id}.html


#######################
# automated producers #
#######################

# Which producers need to be called after an article is posted
#
Mir.Localizer.OpenPosting.ContentProducers= \
media.new;articles.changed;startpage.generate;synchronization.run

# Which producers need to be called after a comment is posted
#
Mir.Localizer.OpenPosting.CommentProducers= \
articles.changed;synchronization.run

# Which producers need to be called after the "produce all new" link is clicked from admin
#
Mir.Localizer.Producer.AllNewProducers= \
media.new;articles.changed;startpage.run;synchronization.run

#########
# rsync #
#########

#use rsync to mirror the website to a remote-host
#
Rsync=no
Rsync.Script.Path=/var/www/bin/rsync-copy.sh


###################
# FileEdit module #
###################

# for extra flexibility editors can edit text-files from within the admin-interface
# these files can then be included in webpages using SSI as footer or announcement-box...
#
# a list of directories to edit
# format:
#      <name>:<path>:<file filter>:<0|1 (recursion off or on)> [, ....]
#
ServletModule.FileEdit.Configuration= \
  includes:/var/www/project/site/includes:.*\\.inc:1




################################################
###########  B) STATIC SITE CONFIG #############
################################################

# the url of the static site
# on the machine where mir runs on
#
Producer.ProductionHost=http://mir.someserver.org

# the url of the public site
# only different from ProductionHost if pages are copied to
# one ore more mirror-servers for delivery
#
Producer.PublicationHost=http://mir.someserver.org

# Produrce.StorageRoot is the directory, in which
# the generated HTML pages will be stored
#
Producer.StorageRoot=/var/www/project/site/

# use this property only if the pages are NOT produced under the docRoot
# of the webserver. all links in the produced pages are prepended
# with Producer.DocRoot
#
Producer.DocRoot=


#####################
# media server URLs #
#####################

# for better performance or load-sharing
# images/media can be copied to (and served from) different servers
# only in this case image- and medialinks need different URLs.

# the url of the video-server
#
Producer.Video.Host=http://mir.someserver.org/video

# the url of the audio-server
#
Producer.Audio.Host=http://mir.someserver.org/audio

# the url of the image-server
#
Producer.Image.Host=http://mir.someserver.org/images

# the url of the media-server
#
Producer.Media.Host=http://mir.someserver.org/media

# the url of the real-media-server
#
Producer.RealMedia.Host=rtsp://some.streamingmedia.server/somedir/



############################################
# image/media specific storage directories #
############################################

# absolute directory, where the images are saved
#
Producer.Image.Path=/var/www/project/site/images/


# absolute directory, where the media files are saved
#
Producer.Media.Path=/var/www/project/site/media

# absolute directory, where the realmedia data files(ra and rm) are saved
# the ram files which point to the RealMedia.Host get saved in the regular Media dir
# this should make rsyncing to a separate streaming server much easier
#
Producer.RealMedia.Path=/var/www/project/site/rtsp

# mir creates a small thumbnail-icon for each image posted
# relativ directory, where the thumbnails will be saved
#
Producer.Image.IconPath=/icon


####################
# media-type-icons #
####################

# by default they are stored in the webservers [docRoot]/img directory
# they are distibuted with the mir-source (etc/producer/images)
# use the "staticimages.generate" producer once to copy them in place
#

# Tiny Icons for the media types on the newswire summary.
# (right hand side of start page)
#
Producer.Icon.TinyImage=photo_small.gif
Producer.Icon.TinyAudio=audio_small.gif
Producer.Icon.TinyVideo=video_small.gif
Producer.Icon.TinyText=text_small.gif

#Medium sized icons used at various places
#
Producer.Icon.BigImage=photo_big.gif
Producer.Icon.BigAudio=audio_big.gif
Producer.Icon.BigVideo=video_big.gif
Producer.Icon.BigText=text_big.gif

#Icons used for links
#
Producer.ExtLinkName=extlink.gif
Producer.IntLinkName=intlink.gif
Producer.MailLinkName=maillink.gif

# this is the name of the subdirectory where the image-dir
# will be linked to.
#
Producer.ImageRoot=/img



################################################
########### C) DYNAMIC SITE CONFIG #############
################################################

# the main mir-servlet
#
Producer.ActionServlet=/servlet/Mir

# the url of the openposting-servlet
#
Producer.OpenAction=http://mir.someserver.org/servlet/OpenMir

# the maximum allowed size of an uploaded media file in KB.
#
MaxMediaUploadSize=20000

# the maximum number of allowed media items to upload at once.
#
ServletModule.OpenIndy.MaxMediaUploadItems=20

# the default number of media items to upload at once
#
ServletModule.OpenIndy.DefaultMediaUploadItems=1


######################
# PDF configurations #
######################

# the following lines are used to construct PDFs on the fly from one or more articles
# for the moment, if you want to change anything else about your pdfs, you
# will have to learn some java!
#
# keep in mind that there may not be enough room for all the text you enter as the
# value of one these options, if text doesn't appear, the only easy thing to do is
# use less text!
#

# a single line of big text which will appear at the top of the first page of all generated pdfs
#
PDF.Title=SOME MIR-SITE

# about two lines of small text which will appear at the bottom of every page
#
PDF.Footer=Mir-CMS PDF-Newsletter.  Content is good, and free to use for non-commercial purposes under the Open Content license. If you have questions, email someone.

# the size paper your target audience will likely have in their printers.
# pick one of A4 or LETTER
#
PDF.PageSize=A4

################################################
############ D) DATABASE CONFIG   ##############
################################################

# specify your database
#
Database.Name=Mir
Database.Username=postgres
Database.Password=

Database.Host=localhost
Database.Port=5432
Database.Driver=org.postgresql.Driver


############################################
# encoding configuration                   #
############################################

# The default encoding charset used in the written html files as well
# as the dynamic output html.
Mir.DefaultHTMLCharset=UTF-8

# The java equivalent of Mir.DefaultHTMLCharset
Mir.DefaultEncoding=UTF8

Muitas das op\xE7\xF5es desse arquivo ser\xE3o mantidas com os valores padr\xE3o. A seguir comentaremos as principais, juntamente com os valores recomendados.

Descri\xE7\xE3o

O arquivo de configura\xE7\xE3o \xE9 dividido em quatro partes

  • Op\xE7\xF5es gerais e configura\xE7\xE3o da interface administrativa
  • Configura\xE7\xF5es do s\xEDtio est\xE1tico
  • Configura\xE7\xE3o da parte din\xE2mica do s\xEDtio
  • Configura\xE7\xE3o do banco de dados

Cada op\xE7\xE3o do arquivo de configura\xE7\xE3o est\xE1 na forma par\xE2metro=valor. Cada op\xE7\xE3o \xE9 descrita a seguir, sendo que as op\xE7\xF5es recomendadas para ser alteradas est\xE3o em negrito e os outros campos podem ser deixados como no arquivo de configura\xE7\xE3o de exemplo.

Op\xE7\xF5es gerais

Os primeiros par\xE2metros das op\xE7\xF5es gerais s\xE3o o nome do s\xEDtio e os endere\xE7os de email para contato. Estes par\xE2metros ser\xE3o exibidos em algumas se\xE7\xF5es do s\xEDtio. Todos os contatos de email s\xE3o definidos em dois par\xE2metros: o primeiro deles define o endere\xE7o de email e o segundo uma descri\xE7\xE3o sobre o que ou de quem \xE9 esse endere\xE7o. Defina-os de acordo com o seu s\xEDtio.

  • Mir.Name - Nome completo do s\xEDtio (pode ser endere\xE7o ou descri\xE7\xE3o)
  • Mir.Shortname - Nome curto do s\xEDtio (abrevia\xE7\xE3o)
  • Mir.Contact-email.address - Endere\xE7o de email para contato
  • Mir.Contact-email.name - Nome do contato de email
  • Mir.Tech-email.address - Endere\xE7o de email para contato t\xE9cnico
  • Mir.Tech-email.name - Nome do endere\xE7o de email para contato t\xE9cnico
  • Mir.Public-email.address - Endere\xE7o p\xFAblico de email
  • Mir.Public-email.name - Nome do endere\xE7o de email para contato p\xFAblico

A seguir temos as configura\xE7\xF5es de tempo:

Op\xE7\xF5es para busca e registros:

  • IndexPath - Local para armazenamento dos arquivos de \xEDndice da busca
  • TempDir - Pasta tempor\xE1ria usada para o upload de arquivos
  • Log.LogClass - Classe de registros (logs)
  • Log.log4j.ConfigurationFile - Arquivo de configura\xE7\xE3o do sistema de registros
  • Log.Home - Pasta para os arquivos de registro

Op\xE7\xF5es para o Localizer e para a produ\xE7\xE3o do conte\xFAdo:

  • Mir.Localizer - O c\xF3digo java espec\xEDfico para seu s\xEDtio
  • Mir.Localizer.ProducerConfigFile - Arquivo de produ\xE7\xE3o do s\xEDtio
  • Mir.Admin.FallbackLanguage - Idioma padr\xE3o usado no caso de string n\xE3o encontradas
  • Mir.Localizer.Producer.GeneratorLibrary - Templates para o conte\xFAdo produzido
  • Mir.Localizer.Admin.GeneratorLibrary - Templates para a interface administrativa
  • Mir.Localizer.OpenPosting.GeneratorLibrary - Templates para as interfaces din\xE2micas p\xFAblicas

Interface administrativa

  • Mir.Login.DefaultLanguage - idioma padr\xE3o da interface administrativa
  • Mir.Login.Languages - idiomas dispon\xEDveis para a interface administrativa
  • Mir.Admin.ShowLoggedinUsers - habilita ou n\xE3o a listagem de usu\xE1rios na interface
  • Mir.Localizer.Admin.ListOperationsFlavor - modo de exibi\xE7\xE3o de algumas opera\xE7\xF5es administrativas quando os artigos aparecem numa listagem: link, caixa de sele\xE7\xE3o o bot\xF5es
  • Mir.Localizer.Admin.TopicListFlavor - como os t\xF3picos de um artigo devem aparecer na p\xE1gina de edi\xE7\xE3o de publica\xE7\xF5es (mesmas op\xE7\xF5es do \xEDtem anterior)
  • Mir.Localizer.Admin.TopicListColumns - caso tenha sido escolhida caixa de sele\xE7\xE3o no \xEDtem anterior, determina o n\xFAmero de colunas
  • Mir.Localizer.Admin.TopicListOrder - campo de ordena\xE7\xE3o dos t\xF3picos na listagem
  • Mir.Localizer.Admin.AllowDeleteComment - permite o apagamento de coment\xE1rios (n\xE3o confundir com escondimento)
  • Mir.Localizer.Admin.AllowDeleteArticle - permite o apagamento de artigos
  • Article.PublicUrl - URL do artigo produzido
  • Comment.PublicUrl - URL do coment\xE1rio publicado
  • Mir.Localizer.OpenPosting.ContentProducers - quais produtores devem ser chamados quando um conte\xFAdo \xE9 publicado
  • Mir.Localizer.OpenPosting.CommentProducers - quais produtores devem ser chamados quando um coment\xE1rio \xE9 publicado
  • Mir.Localizer.Producer.AllNewProducers - quais produtores devem ser chamados quando a op\xE7\xE3o "Produce All New" da administra\xE7\xE3o \xE9 selecionada
  • Rsync - ajusta o uso ou n\xE3o de um script de sincroniza\xE7\xE3o remota para o conte\xFAdo est\xE1tico produzido
  • Rsync.Script.Path - caminho para o script de sincroniza\xE7\xE3o
  • ServletModule.FileEdit.Configuration - pastas para o armazenamento de arquivo de inclus\xE3o

Configura\xE7\xE3o do s\xEDtio din\xE2mico

  • Producer.ProductionHost - endere\xE7o do s\xEDtio (conte\xFAdo est\xE1tico) no servidor onde o mir roda
  • Producer.PublicationHost - endere\xE7o do s\xEDtio est\xE1tico caso o conte\xFAdo seja copiado para uma m\xE1quina que haja como servidor de navega\xE7\xE3o apenas
  • Producer.StorageRoot - pasta onde o conte\xFAdo produzido \xE9 armazenado (pasta do s\xEDtio)
  • Producer.DocRoot - use este campo caso o s\xEDtio n\xE3o esteja armazenado no DocumentRoot do seu host, fazendo com que todos os links locais das p\xE1ginas tenham o Producer.DocRoot prefixado; se voc\xEA usa um VirtualHost no apache, deixe isto em branco

Os pr\xF3ximos par\xE2metros permitem distribuir o uso da banda por tipo de m\xEDdia:

  • Producer.Video.Host - URL do servidor de v\xEDdeo (onde v\xEDdeos s\xE3o armazenados)
  • Producer.Audio.Host - URL do servidor de \xE1udio
  • Producer.Image.Host - URL do servidor de imagens
  • Producer.Media.Host - URL do servidor de outros tipos de m\xEDdia
  • Producer.RealMedia.Host - URL do servidor de Real Media

\xC9 claro que voc\xEA pode colocar todos esses par\xE2metros apontando para pastas de um mesmo servidor, caso voc\xEA n\xE3o possua um mirror por tipo de m\xEDdia. Na sequ\xEAncia, temos as configura\xE7\xF5es para os caminhos de diversos tipos de m\xEDdia:

  • Producer.Image.Path - caminho absoluto do local onde as imagens s\xE3o salvas
  • Producer.Media.Path - caminho absoluto do local onde outros arquivos de m\xEDdia s\xE3o salvos
  • Producer.RealMedia.Path - caminho absoluto do local onde os real media s\xE3o salvos
  • Producer.Image.IconPath - caminho absoluto para os \xEDcones de imagens publicadas

Op\xE7\xF5es relacionadas aos \xEDcones:

  • Producer.Icon.TinyImage - \xEDcone pequeno para imagens
  • Producer.Icon.TinyAudio - \xEDcone pequeno para \xE1udio
  • Producer.Icon.TinyVideo - \xEDcone pequeno para v\xEDdeo
  • Producer.Icon.TinyText - \xEDcone pequeno para texto
  • Producer.Icon.BigImage - \xEDcone grande para imagem
  • Producer.Icon.BigAudio - \xEDcone grande para \xE1udio
  • Producer.Icon.BigVideo - \xEDcone grande para v\xEDdeo
  • Producer.Icon.BigText - \xEDcone grande para texto
  • Producer.ExtLinkName - \xEDcone usado para link externo
  • Producer.IntLinkName - \xEDcone usado para link interno
  • Producer.MailLinkName - \xEDcone para email
  • Producer.ImageRoot - local de armazenamento dos \xEDcones

Configura\xE7\xE3o da parte din\xE2mica

  • Producer.ActionServlet - servlet principal
  • Producer.OpenAction - URL da p\xE1gina de publica\xE7\xE3o
  • MaxMediaUploadSize - tamanho m\xE1ximo de upload para um arquivo de m\xEDdia, em kB
  • ServletModule.OpenIndy.MaxMediaUploadItems - n\xFAmero m\xE1ximo de arquivos anexados por publica\xE7\xE3o
  • ServletModule.OpenIndy.DefaultMediaUploadItems - n\xFAmero padr\xE3o de arquivos que podem ser anexados numa publica\xE7\xE3o
  • PDF.Title - t\xEDtulo do pdf gerado
  • PDF.Footer - rodap\xE9 do pdf gerado
  • PDF.PageSize - tamanho da p\xE1gina do pdf gerado

Configura\xE7\xE3o do banco de dados

  • Database.Name - nome do banco de dados
  • Database.Username - usu\xE1rio com acesso ao banco de dados
  • Database.Password - senha para o banco de dados
  • Database.Host - servidor do bando de dados
  • Database.Port - porta onde o servidor escuta por conex\xF5es
  • Database.Driver - driver utilizado
  • Mir.DefaultHTMLCharset - conjunto de caracteres usado para o html
  • Mir.DefaultEncoding - conjunto de caracteres padr\xE3o

Editando

Agora, copie o arquivo de configura\xE7\xE3o padr\xE3o que vem junto com a instala\xE7\xE3o do MIR para o arquivo de configura\xE7\xE3o do site e edite-o:

cd mir
cp etc/config.properties-dist etc/config.properties
vi etc/config.properties

<pietro> EDITE! EDITE! EDITE!
<rhatto> p\xF3dicr\xEA

Configura\xE7\xF5es t\xEDpicas da rede Indymedia

Em s\xEDtios da rede Indymedia usamos algumas configura\xE7\xF5es t\xEDpicas, principalmente no que se relaciona a caminhos de arquivos. Aqui seguem algumas delas.

  • IndexPath=/var/www/SITE_NAME/mir/bin/mir/WEB-INF/index
  • Mir.Login.DefaultLanguage=c\xF3digo-do-idioma-do-site (vide http://www.w3.org/WAI/ER/IG/ert/iso639.htm) - exemplos: portugu\xEAs - pt, espanhol - es, esperanto - eo.
  • Producer.StorageRoot=/var/www/SITE_NAME/site
  • ServletModule.FileEdit.Configuration=includes:/var/www/SITE_NAME/site/inc:.*\\.inc:1
  • Producer.OpenAction=http://prod.SITE_NAME.indymedia.org/SITE_NAME/servlet/OpenMir
  • Mir.DefaultEncoding=ISO8859_1
  • Mir.DefaultEncoding=ISO8859-1 (n\xE3o confunda com o ISO8859_1 do exemplo anterior)

Em

# the url of the video-server
# the url of the audio-server
# the url of the image-server

substitua o valor utilizado pelo endere\xE7o do novo s\xEDtio, como por exemplo http://SITE_NAME.indymedia.org

Em

# image specific storage directories
# media specific storage directories

substitua os valores por /var/www/SITE_NAME/site

E em

# specify your database

Mude os par\xE2metros: Database.Username, Database.Password e Database.Name. Vai ficar mais ou menos assim:

  • Database.Username=SITE_NAME
  • Database.Password=A_SENHA_Q_VC_ESCOLHER
  • Database.Name=SITE_NAME

Pronto. Revise tudo e salve o arquivo.

Compilando o MIR

Ap\xF3s a edi\xE7\xE3o do arquivo de configura\xE7\xE3o do MIR, o pr\xF3ximo passo \xE9 compilar o software.

Vari\xE1veis de ambiente

Antes de compilar o MIR \xE9 importante que voc\xEA exporte duas vari\xE1veis que ser\xE3o usadas pelo Tomcat e pelo Ant:

export TOMCAT_HOME=/usr/share/tomcat4/
export JAVA_HOME=/usr/lib/kaffe/

\xC9 interessante at\xE9 deixar essas duas linhas em seu ~/.bash_profile, para quando voc\xEA for recompil\xE1-lo no caso de alguma modifica\xE7\xE3o nas configura\xE7\xF5es e no template.

Compilando

Ap\xF3s ajustar as vari\xE1veis de ambiente, compile o MIR rodando o "java make":

cd /var/www/SITE_NAME/mir ; ant

Se tudo der certo, voc\xEA ter\xE1 mais ou menos o seguinte resultado:

Buildfile: build.xml

prepare-compilation:

compile:

generate-deployment-tree:
   [delete] Deleting directory /var/www/brasil/mir/bin/mir/WEB-INF/lib
    [mkdir] Created dir: /var/www/brasil/mir/bin/mir/WEB-INF/lib
     [copy] Copying 1 file to /var/www/brasil/mir/bin/mir/WEB-INF/etc
     [copy] Copying 28 files to /var/www/brasil/mir/bin/mir/WEB-INF/lib

deploy:

BUILD SUCCESSFUL

Total time: 11 seconds

Pasta para o s\xEDtio

O MIR j\xE1 est\xE1 compilado e pronto para funcionar, s\xF3 que antes disso \xE9 preciso criar e ajustar as permiss\xF5es da pasta que armazenar\xE1 os arquivos est\xE1ticos - o s\xEDtio propriamente dito. No nosso exemplo usaremos a pasta /var/www/SITE_NAME/site, sendo que www-data \xE9 o usu\xE1rio e grupo sob o qual o Apache e o Tomcat rodam no sistema.

mkdir /var/www/SITE_NAME/site
sudo chown www-data.www-data /var/www/SITE_NAME/site

Agora voc\xEA roda um script que vai ajustar as permiss\xF5es de alguns arquivos do MIR de modo a proteger sua instala\xE7\xE3o de usu\xE1rios desavisados.

sudo ./perms.sh-dist

cd $TOMCAT_HOME
sudo ln -s /var/www/SITE_NAME/mir/bin/mir webapps/SITE_NAME

Configura\xE7\xE3o para o webserver

Com o MIR compilado e a pasta para o s\xEDtio criada, \xE9 preciso criar uma entrada VirtualHost no seu Apache, dentro do http.conf ou do arquivo destinado a VirtualHosts:

<VirtualHost SITE_NAME.indymedia.org>

  ServerName SITE_NAME.indymedia.org
  DocumentRoot /var/www/SITE_NAME/site/

  <Directory /var/www/SITE_NAME/site/>
        Options Indexes Includes FollowSymLinks MultiViews
        AllowOverride none
  </Directory>

  CustomLog /var/log/apache/SITE_NAME/access_log combined
  ErrorLog /var/log/apache/SITE_NAME/error_log

  ProxyPass /SITE_NAME http://localhost:8180/SITE_NAME
  ProxyPassReverse /SITE_NAME http://localhost:8180/SITE_NAME

</VirtualHost>

<VirtualHost prod.SITE_NAME.indymedia.org>

  ServerName prod.SITE_NAME.indymedia.org
  DocumentRoot /var/www/SITE_NAME/site/

  <Directory /var/www/SITE_NAME/site/>
        Options Indexes Includes FollowSymLinks MultiViews
        AllowOverride none
  </Directory>

  CustomLog /var/log/apache/SITE_NAME/access_log combined
  ErrorLog /var/log/apache/SITE_NAME/error_log

  ProxyPass /SITE_NAME http://localhost:8180/SITE_NAME
  ProxyPassReverse /SITE_NAME http://localhost:8180/SITE_NAME

</VirtualHost>

<VirtualHost admin.SITE_NAME.indymedia.org>

  ServerName admin.SITE_NAME.indymedia.org
  DocumentRoot /var/www/SITE_NAME/site
  Redirect / http://admin.SITE_NAME.indymedia.org/SITE_NAME/servlet/Mir

  ProxyPass /SITE_NAME http://localhost:8180/SITE_NAME
  ProxyPassReverse /SITE_NAME http://localhost:8180/SITE_NAME

</VirtualHost>

Estamos criando tr\xEAs entradas de dom\xEDnio para seu s\xEDtio:

  • SITE_NAME.indymedia.org: o s\xEDtio (navega\xE7\xE3o apenas)
  • prod.SITE_NAME.indymedia.org: usado para acessar a busca e a publica\xE7\xE3o
  • admin.SITE_NAME.indymedia.org: usado para acessar a interface administrativa

Eventualmente voc\xEA tamb\xE9m pode criar um publique.SITE_NAME.indymedia.org para ser um endere\xE7o de acesso mais simples para a p\xE1gina de publica\xE7\xE3o. Tenha certeza que os dom\xEDnios SITE_NAME.indymedia.org e prod.SITE_NAME.indymedia.org existem e apontam para o servidor. Caso contr\xE1rio, contate dns@sos.indymedia.org (no caso de um s\xEDtio da rede Indymedia).

OBSERVA\xC7\xC2O IMPORTANTE: No caso do CMI Brasil, onde alguns arquivos de m\xEDdia foram movidos por quest\xF5es hist\xF3ricas, a configura\xE7\xE3o do Virtual Host para o acesso \xE0s publica\xE7\xF5es \xE9 ĺigeiramente diferente e cont\xE9m diretivas para redirecionar requisi\xE7\xF5es HTTP a esse tipo de conte\xFAdo.

Criando o banco de dados

Agora voc\xEA vai criar o banco de dados do novo s\xEDtio:

cd /var/www/SITE_NAME/mir/dbscripts
./createmirdb.sh SITE_NAME postgres SITE_NAME password

Onde password \xE9 a senha do banco de dados do novo CMI, essa senha tem que ser a mesma que voc\xEA colocou no arquivo de configura\xE7\xE3o em Database.Password. Voc\xEA ter\xE1 que dar a senha do superusu\xE1rio do banco de dados para criar esse novo banco de dados.

Iniciando o MIR

Depois de todo este trabalho, reinicie o Tomcat e o Apache:

/etc/init.d/tomcat restart
/etc/init.d/apache restart

<pietro> a\xED voc\xEA toma umas
<rhatto> e relaxa um pouco

Depois de tudo isso, voc\xEA ser\xE1 capaz de acessar a interface de administra\xE7\xE3o do novo site a partir de http://prod.SITE_NAME.indymedia.org/SITE_NAME/servlet/Mir e o usu\xE1rio/senha padr\xE3o \xE9 admin/indymedia. O site ficar\xE1 dispon\xEDvel em http://SITE_NAME.indymedia.org. Para come\xE7ar a brincadeira, d\xEA uma olhada no texto A P\xE1gina de Administra\xE7\xE3o do s\xEDtio do CMI para saber como se administra um site que rode MIR do ponto de vista editorial.

Boa divers\xE3o!

Funcionamento do MIR

Como dito anteriormente, o MIR produz conte\xFAdo est\xE1tico -- em sua maior parte na forma de arquivos html ou shtml -- a partir do que foi publicado. A forma como isso \xE9 feito internamente no MIR \xE9 detalhada nesta se\xE7\xE3o, juntamente com os principais componentes de configura\xE7\xE3o.

A leitura desta se\xE7\xE3o \xE9 dispens\xE1vel, a n\xE3o ser que voc\xEA queira um melhor entendimento de como o MIR funciona e interage com um n\xFAmero grande de softwares diferentes.

Conex\xE3o com o Apache

O usu\xE1rio lida com o Mir atrav\xE9s do seu navegador web e por isso \xE9 necess\xE1rio que haja uma conex\xE3o entre o Mir e o Apache, que \xE9 feita atrav\xE9s do Tomcat. O tomcat age como um daemon que por padr\xE3o escuta na porta 8180 do servidor. A conex\xE3o com o Apache \xE9 feita simplesmente utilizando duas diretivas de proxy para cada servlet na configura\xE7\xE3o de VirtualHost do site, detalhada na se\xE7\xE3o Configura\xE7\xE3o para o webserver:

  ProxyPass /SITE_NAME http://localhost:8180/SITE_NAME
  ProxyPassReverse /SITE_NAME http://localhost:8180/SITE_NAME

A aplica\xE7\xE3o que roda em http://localhost:8180/SITE_NAME na verdade \xE9 um index.html que redireciona para http://localhost:8180/SITE_NAME/servlet/Mir, que \xE9 o servlet administrativo do MIR, conforme \xE9 descrito a seguir.

Os servlets

O MIR \xE9 composto por v\xE1rios servlets, mas apenas dois deles entram em contato direto com o usu\xE1rio:

  • OpenMir: publica\xE7\xE3o aberta e busca
  • Mir: administra\xE7\xE3o

O servlet OpenMir \xE9 um caso especial do servlet Mir onde n\xE3o \xE9 necess\xE1ria a autentica\xE7\xE3o. Estes dois s\xE3o apenas delegam requisi\xE7\xF5es a outros servlets, os m\xF3dulos do Mir. As requisi\xE7\xF5es a esses m\xF3dulos s\xE3o feitas por http, na forma module=XXX e do=YYY, onde YYY \xE9 um m\xE9todo dentro do m\xF3dulo XXX.

Assim, por exemplo, uma requisi\xE7\xE3o http para listar na p\xE1gina de administra\xE7\xE3o as \xFAltimas not\xEDcias publicadas na coluna da direita, usa-se uma URL do tipo:

http://localhost:8180/SITE_NAME/servlet/Mir?module=Content&do=search [...]

Nesse caso \xE9 usado o m\xF3dulo Content e o m\xE9todo search.

Se voc\xEA instalou o MIR conforme nossas instru\xE7\xF5es, a pasta de trabalho do Tomcat no seu s\xEDtio \xE9 o /var/www/SITE_NAME/mir/bin/mir (para onde a pasta /usr/share/tomcat4/webapps/SITE_NAME aponta), conforme mostra a se\xE7\xE3o Estrutura de pastas.

A pasta webapps hospeda os arquivos de cada s\xEDtio MIR, sendo que webapps/SITE_NAME/ \xE9 chamada de "servlet work dir" (veja Estrutura de pastas para mais detalhes). Os servlets dispon\xEDveis ao usu\xE1rio atrav\xE9s de http s\xE3o definidos em webapps/SITE_NAME/WEB-INF/web.xml e tamb\xE9m em webapps/SITE_NAME/WEB-INF/etc/web.xml. O Tomcat encontra esses servlets, bem como todos os demais dessa instala\xE7\xE3o do mir, na pasta webapps/SITE_NAME/WEB-INF/lib.

Estrutura de pastas

O MIR possui uma estrutura de pastas que divide os arquivos de um s\xEDtio em tr\xEAs partes:

  • A pasta do c\xF3digo-fonte, arquivos de configura\xE7\xE3o e templates
  • A pasta de trabalho do Tomcat, contendo o MIR propriamente dito
  • A pasta do s\xEDtio est\xE1tico

A figura abaixo mostra como essas pastas se relacionam.

arvore do mir

A pasta do c\xF3digo fonte \xE9, no nosso caso, /var/www/SITE_NAME/mir e dentro dela h\xE1 pasta de trabalho do Tomcat.

Conforme dito anteriormente, a pasta /usr/share/tomcat4/webapps/SITE_NAME (e/ou a pasta /var/lib/tomcat4/webapps) \xE9 um link simb\xF3lico para /var/www/SITE_NAME/mir/bin/mir. Esta \xE9 a pasta sob a qual o MIR \xE9 contido pelo Tomcat, isso \xE9, a pasta de trabalho. Se voc\xEA fizer uma requisi\xE7\xE3o http no seu servidor para http://localhost:8180/SITE_NAME, ser\xE1 nessa pasta de trabalho que o Tomcat procurar\xE1 os servlets, arquivos de configura\xE7\xE3o e templates do s\xEDtio. Esta pasta \xE9 chamada de "servlet work dir", ou pasta de trabalho.

Quando voc\xEA compila o MIR, o c\xF3digo java resultante, os arquivos de configura\xE7\xE3o e templates s\xE3o copiados da pasta do c\xF3digo fonte para a pasta de trabalho, conforme mostra a figura acima. Por isso, ao alterar qualquer template \xE9 necess\xE1rio recompilar o MIR para que estes sejam copiados para a pasta de trabalho.

J\xE1 a pasta do s\xEDtio tem o conte\xFAdo atualizado pelos servlets que rodam dentro da pasta de trabalho. \xC9 a pasta do s\xEDtio que fica dispon\xEDvel para navega\xE7\xE3o do site ou ent\xE3o \xE9 distribu\xEDda para outros servidores num sistema de espelhamento (mirroring).

Os quadros em amarelo e cinza da imagem representam o reposit\xF3rio CVS e as setas azuis correspondem \xE0 uma atualiza\xE7\xE3o do reposit\xF3rio local.

Resumindo:

  • Pasta do c\xF3digo-fonte: /var/www/SITE_NAME/mir
  • Pasta de trabalho: /var/www/SITE_NAME/mir/bin/mir, acess\xEDvel pelo Tomcat atrav\xE9s de /usr/share/tomcat4/webapps/SITE_NAME; note que a pasta de trabalho fica dentro da pasta do c\xF3digo-fonte, por uma quest\xE3o de praticidade
  • Pasta do s\xEDtio: /var/www/SITE_NAME/site

\xC9 importante ressaltar que essas pastas cont\xE9m links simb\xF3licos de uma para outra, para que arquivos comuns possam ser acessados de uma forma unificada.

Produ\xE7\xE3o do conte\xFAdo est\xE1tico

A produ\xE7\xE3o do conte\xFAdo \xE9 feita atrav\xE9s de uma fila de tarefas e de um sistema de templates. Os templates definem a cara que cada se\xE7\xE3o do s\xEDtio ter\xE1 independentemente do conte\xFAdo que ser\xE1 veiculado.

Os templates para a parte est\xE1tica do s\xEDtio se encontram em /var/www/SITE_NAME/mir/etc/producer. Mais detalhes a respeito dos templates voc\xEA encontra em Desenvolvendo os templates.

O MIR produz conte\xFAdo est\xE1tico a partir de defini\xE7\xF5es de produtores. Toda a sa\xEDda est\xE1tica do MIR ou chamada de script externo \xE9 considerada como um produtor e estes s\xE3o definidos no arquivo producers.xml localizado na pasta /var/www/SITE_NAME/mir/etc/producer. Tanto os templates quanto o producers.xml s\xE3o copiados para a pasta de trabalho do Tomcat quando o Mir \xE9 compilado.

Os produtores s\xE3o listados na fila de tarefas da p\xE1gina de administra\xE7\xE3o. Na realidade os termos produtores e tarefas podem ser usados como sin\xF4nimos.

Esta fila de tarefas vai produzindo todo tipo de conte\xFAdo um a um, na ordem em que estiverem listados. As tarefas podem ser postas na fila de tr\xEAs modos:

  • Quando um artigo ou coment\xE1rio \xE9 postado, atrav\xE9s dos par\xE2metros Mir.Localizer.OpenPosting.ContentProducers e Mir.Localizer.OpenPosting.CommentProducers do config.properties
  • Quando algum usu\xE1rio requisita atrav\xE9s da p\xE1gina de tarefas
  • Atrav\xE9s de um script, eventualmente pode rodando periodicamente

Defini\xE7\xE3o de produtores: o producers.xml

O producers.xml, juntamente com o sistema de templates, possibilita que grande parte da configura\xE7\xE3o e personaliza\xE7\xE3o do s\xEDtio seja feita por designers e administradores de sistema que possuam pouco ou nenhum conhecimento de programa\xE7\xE3o ou de banco de dados.

Assim, os desenvolvedores do s\xEDtio podem escolher livremente a forma como o conte\xFAdo ser\xE1 exibido em cada tipo de p\xE1gina, sem que seja necess\xE1ria nenhuma altera\xE7\xE3o no c\xF3digo do Mir.

A figura abaixo mostra como ocorre o processo de produ\xE7\xE3o de um artigo, que \xE9 um tipo de produtor definido no producers.xml. Quando \xE9 requisitada a confec\xE7\xE3o de um produtor na fila de tarefas, o m\xF3dulo de produ\xE7\xE3o utiliza as defini\xE7\xF5es correspondentes no producers.xml para acessar o banco de dados, passando a tarefa para o m\xF3dulo de template que, atrav\xE9s dos arquivos de templates tamb\xE9m definidos no produtor, gera uma p\xE1gina est\xE1tica.

Exemplo de produ\xE7\xE3o de artigo

O arquivo producers.xml \xE9 escrito em XML e tem a seguinte forma:

<producers>
   ...
</producers>

Dentro desse arquivo existem dois tipos de blocos:

  • Defini\xE7\xE3o de produtores
  • N\xF3s

Os produtores s\xE3o definidos a partir da seguinte tag:

<producer name="PRODUTOR"/>

e tem a estrutura na forma:

    <producer name="PRODUTOR">
      <verbs>
        <verb name="VERBO">
          <!-- n\xF3s --->           
        </verb>
        ...
        <verb name="VERBO-n">
        </verb>
      </verbs>
      <body>
        <!-- n\xF3s --->           
      </body>  
    </producer> 

Cada produtor tem seus verbos (verbs), que definem formas diferentes de execu\xE7\xE3o do produtor, como no caso abaixo, onde o produtor content \xE9 definido junto com seus verbos all e new.

    <producer name="content">
      <verbs>
        <verb name="new">
        </verb>
        <verb name="all">
        <verb>
      </verbs>
    </producer> 

J\xE1 os "n\xF3s" s\xE3o fun\xE7\xF5es a serem atribu\xEDdas aos produtores. Os n\xF3s geralmente ocorrem apenas dentro do corpo de um produtor, por\xE9m alguns casos especiais de n\xF3s, como o nodedefinition, podem ocorrem fora do produtor, que \xE9 o caso a seguir, onde dentro do corpo do produtor content temos o n\xF3 Generate, que tem a fun\xE7\xE3o de gerar conte\xFAdo est\xE1tico no arquivo ${config.storageRoot}/index.shtml, utilizando o arquivo /producer/startpage.template como modelo.

    <producer name="content">
      <verbs>
        <verb name="new">
        </verb>
        <verb name="all">
        </verb>
      </verbs>
      <body>           
        <Generate 
            generator="/producer/startpage.template" 
            destination="${config.storageRoot}/index.shtml"/>
      </body>  
    </producer>

A principal novidade aqui \xE9 a constru\xE7\xE3o ${config.storageRoot}, que \xE9 um acesso a uma vari\xE1vel definida no pr\xF3prio producers.xml ou ao valor de uma vari\xE1vel do Mir, neste caso config.storageRoot.

Os n\xF3s definidos dentro de verbos \xE9 que estabelecem diferentes formas do produtor ser executados. Complementando nosso exemplo anterior, utilizaremos o n\xF3 Set para definir diferentes valores da vari\xE1vel count para os verbos all e new do produtor content.

    <producer name="content">
      <verbs>
        <verb name="new">
          <Set key="count" value="3"/>
        </verb>
        <verb name="all">
          <Set key="count" value="5"/>
        <verb>
      </verbs>
      <body>           
        <Generate 
            generator="/producer/startpage.template" 
            destination="${config.storageRoot}/index.shtml"/>
      </body>  
    </producer>  

Quanto o produtor content for gerado com o verbo new, a vari\xE1vel count ser\xE1 passada com valor 3 para o corpo do produtor; quando for gerado com o verbo all, count ser\xE1 passada com o valor 5. O valor de count pode ser acessado inclusive no arquivo de template definido no atributo generator do n\xF3 Generate. Isso pode ser aplicado em exemplos mais complexos onde podemos definir, por exemplo, o n\xFAmero de artigos a serem gerados a cada vez que o produtor \xE9 chamado.

Os v\xE1rios tipos existentes de n\xF3s permitem que um conte\xFAdo espec\xEDfico seja selecionado do banco de dados e disponibilizado numa vari\xE1vel para ser usado pelo template, permitem que scripts sejam executados caso alguma condi\xE7\xE3o seja satisfeita, permitem definir o formato das mensagens de log para cada produtor, enfim, permite total controle na produ\xE7\xE3o do conte\xFAdo publicado.

\xC1rvore de produ\xE7\xE3o

O diagrama acima mostra como \xE9 feita a execu\xE7\xE3o de um produtor: o corpo do produtor funciona como um pequeno script onde os n\xF3s agem como estruturas condicionais ou instru\xE7\xF5es para execu\xE7\xE3o.

Tipos de n\xF3s

Aqui ser\xE1 feita uma breve descri\xE7\xE3o dos tipos de n\xF3s. Uma descri\xE7\xE3o mais detalhada pode ser encontrada no documento Mir CMS.

  • Set: altera uma vari\xE1vel usando uma express\xE3o
  • Define: altera uma var\xEDavel usando uma cadeia de caracteres
  • If: estrutura condicional
  • nodedefinition: define um n\xF3, funcionando como uma defini\xE7\xE3o de fun\xE7\xE3o ou macro
  • Log: registra uma mensagem no arquivo de log do produtor
  • Enumerate: armazena o resultado de uma consulta ao banco de dados
  • List: armazena o resultado de uma consulta ao banco de dados numa vari\xE1vel
  • Batch: executa um bloco de instru\xE7\xF5es para cada resultado de uma consulta ao banco
  • Generate: gera uma p\xE1gina a partir de um template
  • DeleteFile: apaga um arquivo
  • SetFileDate: altera a data de um arquivo
  • Resource: carrega uma mensagem de bundle
  • Execute: executa um script
  • ModifyContent: modifica um campo num artigo
  • MarkContent: marca um artigo como produzido

Vari\xE1veis internas

Como dito anteriormente, as vari\xE1veis definidas no producers.xml ou em outras se\xE7\xF5es do Mir podem ser acessadas com a express\xE3o ${variavel}, podendo tamb\xE9m ser ${secao.variavel}, onde secao designa a se\xE7\xE3o onde variavel foi definida, podendo ser:

  • config: se\xE7\xE3o do arquivo de configura\xE7\xE3o
  • articletype: tipo de artigo
  • topic: lista os t\xF3picos (assuntos)
  • utility: acessa fun\xE7\xF5es especificas do mir (mais fun\xE7\xF5es podem ser adicionadas via localizer)
  • commentstatus: pode ser usada para etiquetar comentarios (cria v\xE1rios "tipos" de coment\xE1rios)
  • languageCodeToId: possibilita convers\xE3o do nome de um idioma para o id do mesmo
  • bundles: arquivos na forma par\xE2metro = valor

Express\xF5es

Muitos atributos dos n\xF3s s\xE3o da forma de express\xF5es que podem ser dos tipos:

  • cadeia de caracteres: 'alow'
  • express\xE3o num\xE9rica: 1234
  • refer\xEAncia a uma vari\xE1vel: content.title
  • opera\xE7\xF5es sobre cadeias de caracteres: 'alow' ++ ' ' ++ 'Mir'
  • express\xF5es booleanas e comparativas: (content.id==3) or (content.id in (5,7,2,8) and (content.title!='alow')

Essas express\xF5es podem aparecer tanto como par\xE2metros diretos de um atributo quanto dentro de uma chamada de vari\xE1vel do tipo ${variavel}. Os n\xF3s, as vari\xE1veis internas e as express\xF5es formam a sem\xE2ntica do producers.xml e permitem que todo tipo de conte\xFAdo seja selecionado para produ\xE7\xE3o, n\xE3o importando o qu\xE3o distinto seja a sa\xEDda est\xE1tica (p\xE1gina inicial, arquivo de not\xEDcias, um artigo ou p\xE1gina de um t\xF3pico).

Exemplo

Como exemplo, descreveremos o funcionamento da gera\xE7\xE3o de uma p\xE1gina inicial de um s\xEDtio em Mir. Exemplos mais sofisticados podem ser encontrados no pr\xF3prio producers.xml ou nos templates espec\xEDficos de alguns s\xEDtios da rede Indymedia, cujos arquivos normalmente est\xE3o hospedados no codecoop.

  <producer name="startpage">
    <verbs>
      <verb name="generate" default="1" description="Generates the startpage"/>
    </verbs>

    <body>
      <List key="startspecial" table="content" limit="1"
        selection="is_published=true and to_article_type=${articletype.startspecial}"
        order="webdb_create desc"/>
                                        
      <List key="features" table="content" limit="10" 
        selection="is_published=true and to_article_type=${articletype.feature}"
        order="webdb_create desc"/>

      <List key="newswire" table="content" limit="30"
        selection="is_published=true and to_article_type=${articletype.newswire}"
        order="webdb_create desc"/>
        
      <List key="breakingnews" table="breakingNews" limit="10"
         order="webdb_create desc"/>
        
      <Language>
        <Generate 
            generator="/startpage.template" 
            destination="${config.storageRoot}/${pathprefix}/index.shtml"/>
      </Language>
    </body>
  </producer>  

Produzindo o conte\xFAdo atrav\xE9s de um script

A produ\xE7\xE3o de conte\xFAdo atrav\xE9s de um script externo n\xE3o faz parte das funcionalidades do Mir e por isso utilizaremos um pequeno truque, que \xE9 o acesso da fila de produ\xE7\xE3o da interface administrativa.

Para gerar o produtor articles com o verbo all, um usu\xE1rio que j\xE1 esteja autenticado na administra\xE7\xE3o precisa acessar o endere\xE7o

http://.../Mir?module=Producer&do=enqueue&producer=articles&verb=all

Criaremos um script produce.sh cujos argumentos ser\xE3o o nome do produtor e um verbo, de forma que seja poss\xEDvel em linha de comando agendar tarefas no Mir:

produce.sh <se\xE7\xE3o do site> <opera\xE7\xE3o>

O seguinte script em bash faz exatamente isso. Substitua servlet, login e pass pelos respectivos do seu s\xEDtio.

#!/bin/bash
servlet="http://localhost:8180/SITE_NAME/servlet/Mir"
login="script"
pass="dumbuser"
exec="module=Producer&do=produce&producer=$1&verb=$2"
echo -e \
"$servlet?login=$login&killsession=1&password=$pass&$exec\n-accept_all_cookies\n-dump\n" | \
lynx -

As op\xE7\xF5es do script s\xE3o as mesma permitidas na p\xE1gina de tarefas da interface administrativa, definidas no producers.xml. Para um s\xEDtio t\xEDpico em Mir, temos as seguintes op\xE7\xF5es poss\xEDveis para o produce.sh:

  • media new: gera os novos arquivos multim\xEDdia
  • articles changed: regenera os artigos modificados
  • startpage generate: regenera a p\xE1gina inicial
  • newswirearchive update: atualiza os arquivos de not\xEDcias
  • topicstartpage generate: regenera a p\xE1gina incial dos t\xF3picos
  • opentrasharchive update: atualiza o lixo aberto
  • syndication generate: gera um arquivo de clipping

Voc\xEA pode inclusive incluir numa crontab para que de tempos em tempos alguns produtores sejam executados ao inv\xE9s de delegar a produ\xE7\xE3o de todo o conte\xFAdo para os par\xE2metros Mir.Localizer.OpenPosting.ContentProducers e Mir.Localizer.OpenPosting.CommentProducers do arquivo de configura\xE7\xE3o.

Algumas se\xE7\xF5es do site que dependem de conte\xFAdo publicado n\xE3o precisam ser atualizadas toda a vez que um artigo ou coment\xE1rio \xE9 atualizdo, podendo ser executadas uma vez ao dia num script agendado no cron.

Como exemplo, suponha o seguinte dia.sh:

#!/bin/bash
producer="/home/SITE_NAME/bin/produce.sh"
$producer topicarchive new
$producer featurearchive update
$producer fullopenpostingarchive update
$producer topicstartpage generate

Uma entrada no cron pode ent\xE3o cham\xE1-lo uma vez ao dia:

0 3 * * * /home/SITE_NAME/bin/dia.sh &> /dev/null

Scripts mais sofisticados podem inclusive monitorar o arquivo de log do produtor e ir requisitando conte\xFAdo \xE0 medida que a fila de tarefas \xE9 executada. Como exemplo dessa sofistica\xE7\xE3o, veja o conjunto de scripts de produ\xE7\xE3o do CMI Brasil.

Arquivos de log

O MIR possui v\xE1rios arquivos de log (mensagens), que ficam em /var/www/SITE_NAME/mir/bin/mir/WEB-INF/log/, por exemplo:

  • database.log: log do banco de dados
  • localizer.log: guarda mensagens do localizer
  • media.log: guarda mensagens da produ\xE7\xE3o de arquivos de m\xEDdia
  • pdf.log: guarda mensagens da gera\xE7\xE3o de pdf
  • producer.log: guarda mensagens da fila de produ\xE7\xE3o
  • servlet.log: mensagens do servlet
  • template.log: mensagens relacionadas aos templates

Sempre que houver um problema com o s\xEDtio, mensagens de erro ser\xE3o enviadas para os arquivos de registro e por isso eles s\xE3o muito importantes para a detec\xE7\xE3o de bugs e falhas do MIR ou da m\xE1quina Java.

Espelhamento do conte\xFAdo

A principal funcionalidade de um s\xEDtio em MIR \xE9 a facilidade para a cria\xE7\xE3o de espelhos (c\xF3pidas do s\xEDtio em outros servidores). Na se\xE7\xE3o Criando um espelho do CMI-Brasil do Manual do Daileon h\xE1 um exemplo de como isso pode ser realizado usando um servidor de rsync na mesma m\xE1quina que o MIR estiver instalado e fazendo com que o espelho puxe a c\xF3pia do s\xEDtio via rsync.

Uma outra abordagem para a transfer\xEAncia de arquivos \xE9 fazer com que o servidor que roda o MIR envie os arquivos para o espelho usando rsync via ssh. Os scripts de produ\xE7\xE3o e sincroniza\xE7\xE3o do CMI Brasil d\xE3o exemplos de como isso pode ser feito.

Adicionando o captcha:

Para adicionar o captcha no MIR precisamos atualizar a versao que estavamos usando, voce pode olhar a parte desse tutorial sobre como fazer isso ou seguir os passos a seguir, que mostram de forma simplificada o processo:

  • backup/renomeando o diretorio etc do diretorio mir do site (antencao, nao eh o diretorio que hospeda conteudo de web/html)

cd /var/local/mir/SITE_NAME/mir/
mv etc etc.ok
cvs update -d -P
mv etc etc.cvs2
mv etc.ok etc

Neste ponto, \xE9 importante lembrar que o 'ant' deve ser executado pelo usu\xE1rio dono dos arquivos, geralmente o mesmo que SITE_NAME.

sudo -u SITE_NAME ant clean
sudo -u SITE_NAME ant

caso o ant de erro, as vezes mostrar o caminho correto pro tomcat pode solucionar esse problema, para fazer isso use o seguinte comando:

export TOMCAT_HOME=/usr/share/tomcat5/

Ou modifique o caminho para o caminho correto que o tomcat no seu servidor.

  • Adicione na template de publicacao de artigos o seguinte codigo para o captcha:

vi  /var/local/mir/site/mir/etc/open/editarticle.template

E adicione o seguinte codigo:

<tr>
  <td class="openpostingform">
    <if password>
      <div class="ppassword">
        <img src="${actionURL}&amp;do=captcha"/>

        <p>${lang("content.password")}</p>

        <p><input type="text" name="password" size="10">

        <call showErrors("password")>
    </if> 
  </td>
</tr>

Tambem antes da parte do codigo pro botao de 'submit' ou 'publique'.

  • rodar o ant - dentro da pasta de instalacao do mir /var/local/mir/site/mir faca:

sudo -u SITE_NAME ant clean
sudo -u SITE_NAME ant

Se tiver algum erro relacionado com build.xml - eh porque voce esta no lugar errado. Se nao compilar o mir corretamente, tente fazer o comando acima, que indica a direcao correta para aonde esta o TOMCAT5.

  • adicionar nos arquivos de traducoes o texto que vai entrar na part content.password da template

Esses arquivos estao dentro da parta /var/local/mir/site/mir/etc/bundles/ - seriam:

open_es.properties (espanhol) | open_en.properties (ingles) | open_pt.properties (portugues) | open_eo.properties (esperanto)

Para cada um deles, basta adicionar a seguinte linha:

content.password=Frase na lingua desejada

A frase recomendada eh: Escreva o codigo que aparece na imagem:

  • compilar o mir e atualizar as modificacoes pela pagina de administracao do site

Depois de ter adicionado o texto acima, para que ele possa aparecer no site voce precisa fazer o comando:

sudo -u SITE_NAME ant clean
sudo -u SITE_NAME ant

Lembre-se dos possiveis erros citados acima e tambem das dicas para soluncionar essos erros que podem ocorrer nessa parte.

Depois de ter feito isso, entre na pagina de administracao e em: Super-user functions (use com cuidado!)

E clique em: recarregar pacotes, registros e produtores

Para que o texto apareca nas templates.

Manuten\xE7\xE3o de um s\xEDtio que rode MIR

A instru\xE7\xF5es a seguir servem pra qualquer MIR que esteja rodando no servidor. No entanto, nestes exemplos consiramos que o site em quest\xE3o seja o do CMI Brasil. Basta trocar onde estiver escrito brasil pelo nome do IMC correspondente.

Problemas na p\xE1gina de administra\xE7\xE3o, publica\xE7\xE3o e/ou busca

Se acontecer das p\xE1ginas din\xE2micas do site travarem, \xE9 necess\xE1rio recarregar a aplica\xE7\xE3o do Mir correspondente ao site ou ent\xE3o reiniciar o Tomcat. Existem duas formas de se fazer isso, via web ou diretamente no servidor.

Via Web

Logando no servidor

Nesse caso, todos os sites que rodam Mir s\xE3o reinicializados. Primeiro de tudo reinicie o Tomcat:

/etc/init.d/tomcat4 restart

E espere uns 15 segundos ou mais. Tente acessar a p\xE1gina de administra\xE7\xE3o. Se der algum erro, mate o tomcat e todos os processos de java e reinicie o tomcat.

for pid in `pidof kaffe-bin` `pidof java`; do
  kill -9 $pid;
done

/etc/init.d/tomcat4 start

\xC0s vezes pode acontecer que, mesmo fazendo o procedimento acima, voc\xEA encontre problemas pra entrar na p\xE1gina de administra\xE7\xE3o (problemas do tipo 404 Not Found ou ent\xE3o a p\xE1gina carregar sem o layout vermelho). Se isso acontecer, tente o seguinte, a partir do diret\xF3rio do site:

cd mir
ant
sudo /etc/init.d/tomcat4 restart

Se, mesmo assim, continuar dando pau, repita o \xFAltimo procedimento (rodar o ant) mais vezes, at\xE9 que d\xEA certo.

ATEN\xC7\xC3O:

\xC9 importante que, ap\xF3s ter feito o procedimento, que a p\xE1gina de administra\xE7\xE3o carregue perfeitamente (com a decora\xE7\xE3o vermelha e tudo mais). Experimente entrar na administra\xE7\xE3o e regenerar a p\xE1gina principal e os \xFAltimos artigos publicados. Se algo der errado, recomece os procedimentos.

Usando um script

Voc\xEA tamb\xE9m pode utilizar um script para periodicamente checar se a p\xE1gina de administra\xE7\xE3o de um dos s\xEDtios est\xE1 funcionando. Este aqui serve como exemplo:

#!/bin/bash
LOCKFILE="/tmp/backuplock"

if [ ! -f "$LOCKFILE" ]; then # caso nao exista uma trava de backup
  if ! wget --timeout=10 -q -O - http://localhost:8180/daileon/servlet/Mir | grep -q English
  then
      echo `date` 'Mir is down' >> /var/log/mir/mir.log;
      /etc/init.d/tomcat4 stop 2>&1 > /dev/null
      sleep 5
      killall java 2>&1 > /dev/null # maquina java da sun
      killall kaffe-bin 2>&1 > /dev/null # maquina java kaffe
      /etc/init.d/tomcat4 restart 2>&1 > /dev/null
  # else echo `date` 'Mir is up' #>> /var/log/mir/mir.log;
  fi
fi

For\xE7ando sincroniza\xE7\xE3o

As novas publica\xE7\xF5es n\xE3o est\xE3o aparecendo no http://www.midiaindependente.org? O site n\xE3o se modifica j\xE1 faz muito tempo? A p\xE1gina inicial est\xE1 em branco? Isso tudo pode estar acontecendo por que a sincroniza\xE7\xE3o entre o servidor de publica\xE7\xE3o e o de acesso n\xE3o foi efetuada com sucesso.

Verifique se a sincroniza\xE7\xE3o esta travada, d\xEA:

tail -f /var/log/rsync/brasil/rsync-brasil-fast.log

Se aparecer um Locked! no fim do arquivo e n\xE3o houver nenhum rsync rodando, quer dizer que uma trava est\xE1 impedindo a sincronia de ocorrer. A trava \xE9 usada para impedir que v\xE1rios rsyncs rodem simultaneamente.

No caso do rsync-brasil-fast, a trava \xE9 /tmp/rsynclock-brasil-ahimsa. Simplesmente mate todos os processos de rsync do brasil e apague este arquivo.

Ent\xE3o \xE9 poss\xEDvel rodar o rsync manualmente e verificar se est\xE1 tudo funcionando:

sudo -u brasil /home/brasil/bin/rsync-brasil-fast

Problemas com a busca

A busca pode ter problemas relacionados ao \xEDndice do lucene. Quando na p\xE1gina de busca houver um erro do tipo

Problem with Search Index! : java.io.IOException: read past EOF

\xE9 necess\xE1rio refazer o \xEDndice de busca. Proceda ent\xE3o da seguinte forma:

1 - Verifique, no arquivo /var/www/brasil/mir/etc/config.properties qual \xE9 o IndexPath. Por exemplo:

IndexPath=/var/www/brasil/Mir/WEB-INF/index

2 - Verifique se o dono desse diret\xF3rio est\xE1 correto:

ls -l /var/www/brasil/mir/bin/mir/WEB-INF
drwxr-xr-x    2 www-data www-data     4096 Jun 26 17:05 index

Se estiver errado, modifique:

sudo chown www-data.www-data /var/www/brasil/mir/bin/mir/WEB-INF

3 - Entre no banco de dados e d\xEA um refresh:

psql brasil -U postgres
update content set is_produced='f';
\q

4 - Compile o MIR e reinicie o tomcat

cd /var/www/brasil/mir
sudo /usr/local/ant/bin/ant
sudo /etc/init.d/tomcat restart

E deixe que o daileon fa\xE7a sua parte... a busca n\xE3o voltar\xE1 imediatamente, pois o MIR n\xE3o reconstruir\xE1 a base da busca de uma vez, mas sim bem aos poucos. Talvez em uma semana a busca se normalize.

Fazendo uma busca "na m\xE3o"

Muito bem:

psql brasil -U postgres

Vamos supor que voc\xEA queira buscar mat\xE9rias cujo t\xEDtulo contenham a palavra "sem-terra":

SELECT title, date, id FROM content WHERE title LIKE '%sem-terra%';

O que deve resultar em algo do tipo

                                  title                                     |   date   |   id
----------------------------------------------------------------------------+----------+--------
 Romaria da Terra une sem-terra e crist\xE3os em Iaras                         | 20010822 |   5455
 Ex\xE9rcito espiona sem-terra desde 1998                                      | 20010815 |   5111
 Mais um sem-terra \xE9 assassinado no Paran\xE1                                  | 20030203 | 246928
 Um pouco sobre o M.S.T. (movimento dos sem-terra)                          | 20020902 |  35526
 Manuscritos de sem-terra orientam a revolu\xE7\xE3o                              | 20020712 |  31605
 Manuscritos de sem-terra orientam a revolu\xE7\xE3o                              | 20020712 |  31601
 Cerca de 200 sem-terra invadem sede do Incra no Mato Grosso                | 20020430 |  24721
 Bol\xEDvia: uma mulher sem-terra pede solidariedade pelo massacre e repress\xE3o | 20011121 |  11413
 A\xE7\xE3o de fazendeiros contra sem-terra que v\xE3o a S\xE3o Gabriel                 | 20030731 | 259859
 Den\xFAncia de a\xE7\xE3o dos fazendeiros contra sem-terra                          | 20030731 | 259858
 Um sem-terra morto e v\xE1rios feridos na Para\xEDba                             | 20030605 | 255918
 Todo apoio \xE0 jornada de lutas dos sem-terra em Abril                       | 20030324 | 250769
 Dois mil sem-terra acampam no Incra de Marab\xE1/PA                           | 20030317 | 249917
 Grupo armado ataca sem-terra em Minas Gerais                               | 20030312 | 249546
 MST no PR: sem-terra liberam pagamento de ped\xE1gio por 4hs                  | 20030228 | 248891
(15 rows)

Atualizar um site que rode MIR

Beleza. Se voc\xEA chegou at\xE9 aqui \xE9 porque voc\xEA conseguiu instalar o MIR ou conseguiu sobreviver alguns meses com uma instala\xE7\xE3o do MIR. Muito bem. Acredito que agora voc\xEA esteja desgostoso com a situa\xE7\xE3o atual do seu site e queira fazer uma atualiza\xE7\xE3o do software. Mas antes de come\xE7ar, leve em conta:

  • N\xE3o fa\xE7a a atualiza\xE7\xE3o por conta pr\xF3pria. Pe\xE7a ajuda a outros t\xE9cnicos e contate algu\xE9m na lista mir-coders@lists.indymedia.org

  • Antes de pensar em atualizar, fa\xE7a uma lista das fun\xE7\xF5es do MIR a serem atualizadas ou modificadas e veja se as novas vers\xF5es do MIR j\xE1 possuem essas caracter\xEDsticas. Em caso negativo, submeta essa lista pra lista de desenvolvedores do MIR, mir-coders@lists.indymedia.org

  • Converse com seus pais ou respons\xE1veis para saber se \xE9 isso mesmo que voc\xEA quer.

Se voc\xEA decidiu por atualizar, arregace as mangas, abra um terminal conectado ao servidor e siga as pr\xF3ximas instru\xE7\xF5es. No exemplo a seguir, consideramos que o nome do site \xE9 SITE (no seu caso pode ser brasil, por exemplo) e DATA \xE9 a data atual.

OBSERVA\xC7\xC3O: Os comandos aqui n\xE3o s\xE3o rigorosos. Alguma coisa pode mudar e alguma pode ser mudada. O importante \xE9 que voc\xEA saiba o que est\xE1 fazendo. O procedimento de atualiza\xE7\xE3o em geral envolve os seguintes passos:

  • 0 - Backup do banco de dados
  • 1 - Atualizando o c\xF3digo fonte do MIR
  • 2 - Atualiza\xE7\xE3o do config.properties
  • 3 - Scripts de convers\xE3o e compila\xE7\xE3o

0. Backup do banco de dados

Primeiro, pare o tomcat:

sudo /etc/init.d/tomcat stop

Depois, fa\xE7a o backup do banco de dados do site:

cd

export PGUSER=postgres
export PGPASSWORD=senha-do-banco-de-dados
pg_dump -F t nome-do-banco-de-dados > backup-SITE-DATA.tar

Em seguida, existem duas op\xE7\xF5es para proceder:

  • 1.1 - Atualizando o c\xF3digo fonte via CVS
  • 1.2 - Pegando um c\xF3digo fonte novo

Execute apenas um desses procedimentos antes de passar para o \xEDtem 2.

1.1 - Atualizando o c\xF3digo fonte via CVS

cd /var/www/brasil
cp -Rp mir mir.old
cd mir && cvs update -d -P

1.2 - Pegando um c\xF3digo fonte novo

Agora fa\xE7a um backup da configura\xE7\xE3o do site:

cd /var/www/brasil
mv mir mir.old

IMPORTANTE: Lembre-se tamb\xE9m de submeter as modifica\xE7\xF5es que voc\xEA fez nas configura\xE7\xF5es do site pro CVS do CMI Brasil (o site de testes).

Em seguida baixe a nova vers\xE3o do MIR no CVS:

cvs -d :pserver:anonymous@mir.indymedia.org:/var/lib/cvs login
cvs -d :pserver:anonymous@mir.indymedia.org:/var/lib/cvs co -r MIR_1_1 mir

Quando terminar de baixar, mude a configura\xE7\xE3o padr\xE3o do MIR com a do CMI Brasil, baixando-a diretamente do site de testes. Vou omitir o uso do sudo, mas fica impl\xEDcito que ele dever\xE1 ser usado quando necess\xE1rio.

cd mir
mv etc etc.old
cvs -d :pserver:anonymous@cvs.codecoop.org:/cvsroot/imc-brasil co cmi-brasil
mv cmi-brasil etc
cd etc
cp ../../mir.old/etc/config.properties .
cp ../../mir.old/etc/web.xml .
cp ../etc.old/log4j.properties .

2 - Atualiza\xE7\xE3o do config.properties

Agora talvez voc\xEA precise editar o config.properties:

vi config.properties

3 - Scripts de convers\xE3o e compila\xE7\xE3o

Agora estamos prontos pra rodar o script de convers\xE3o. Verifique se existem scripts de convers\xE3o em /var/www/brasil/mir/dbscripts/updates/ e execute-os.

Em seguida, rode o ant:

cd /var/www/brasil/mir
ant

E agora um truquezinho maroto:

cd /var/www/brasil/mir/bin/mir/WEB-INF/etc/open
ln -s /var/www/brasil/site site

D\xEA uma conferida, restarte o tomcat e fa\xE7a os testes na administra\xE7\xE3o e na publica\xE7\xE3o.

Templates e internacionaliza\xE7\xE3o

Esta se\xE7\xE3o \xE9 uma extens\xE3o da anterior e cont\xE9m instru\xE7\xF5es um pouco mais espec\xEDficas ao site do CMI Brasil. A edi\xE7\xE3o dos arquivos de configura\xE7\xE3o a partir das dicas aqui descritas tamb\xE9m funcionar\xE3o para outros sites que rodem MIR, mas o modo como essa edi\xE7\xE3o \xE9 feita no CMI Brasil atualmente \xE9 diferente do modo como \xE9 feita para os outros sites que est\xE3o no servidor.

Se voc\xEA quiser aplicar tais instru\xE7\xF5es para outros sites de MIR, simplesmente ignore qualquer coment\xE1rio ou comando referente ao CVS: apenas edite os arquivos do site e rode o ant.

Templates do CMI Brasil

Os templates do CMI Brasil definem como o conte\xFAdo armazenado no CMI \xE9 exibido assim como d\xE1 a "cara" que o site tem. Os templates s\xE3o desenvolvidos no projeto http://imc-brasil.codecoop.org/ atrav\xE9s da ferramenta CVS. Isso quer dizer que cada administrador que queira modificar a apar\xEAncia do site precisa baixar uma c\xF3pia de todos os templates, edit\xE1-los e depois envi\xE1-los novamente para o resposit\xF3rio onde o projeto est\xE1 localizado. Ent\xE3o basta atualizar os templates hospedados no servidor baixando-os do reposit\xF3rio.

A seguir algumas instru\xE7\xF5es pr\xE1ticas no uso do CVS. Para mais detalhes, consulte o Manual do CVS.

Desenvolvendo os templates

Os templates de mais configura\xE7\xF5es do CMI Brasil residem, no servidor, em /var/www/brasil/mir/etc. O arquivo de configura\xE7\xE3o do site \xE9 o /var/www/brasil/mir/etc/config.properties e os arquivos referentes \xE0 internacionaliza\xE7\xE3o e \xE0 "cara" do site est\xE3o nas subpastas.

Se voc\xEA quiser mexer nos templates para uso pr\xF3prio, basta baix\xE1-los do CVS de acordo com os comandos da se\xE7\xE3o Baixando ou atualizando os templates.

Agora, se voc\xEA quiser mexer nos templates para depois envi\xE1-los ao site do CMI, primeiro ter\xE1 de registrar um us\xE1rio em http://codecoop.org e em seguida inscrever-se como desenvolvedor do projeto http://imc-brasil.codecoop.org/. Depois que voc\xEA for aprovado como desenvolvedor, voc\xEA far\xE1 o seguinte:

Baixando ou atualizando os templates

Para baixar ou atualizar os templates, fa\xE7a o seguinte:

cvs -d :pserver:anonymous@cvs.codecoop.org:/cvsroot/imc-brasil login
cvs -d :pserver:anonymous@cvs.codecoop.org:/cvsroot/imc-brasil checkout cmi-brasil

Quando aparecer um prompt para senha, apenas tecle ENTER.

Enviando suas modifica\xE7\xF5es para o reposit\xF3rio

Primeiro identifique-se ao reposit\xF3rio. Considerando que seu-usuario \xE9 o seu nome de usu\xE1rio no reposit\xF3rio, use o comando

export CVS_RSH=ssh
cvs -d :pserver:seu-usuario@cvs.codecoop.org:/cvsroot/imc-brasil login                            

Ent\xE3o d\xEA um update,

 
cvs -d :pserver:seu-usuario@cvs.codecoop.org:/cvsroot/imc-brasil update

Em seguida, adicione os novos arquivos que voc\xEA criou na c\xF3pia local:

 
cvs -d :pserver:seu-usuario@cvs.codecoop.org:/cvsroot/imc-brasil add novo-arquivo

onde novo-arquivo \xE9 o nome do arquivo que voc\xEA criou. Se tudo estiver ok, \xE9 s\xF3 mandar suas modifica\xE7\xF5es pro reposit\xF3rio:

 
cvs -d :pserver:seu-usuario@cvs.codecoop.org:/cvsroot/imc-brasil commit

Atualizando os templates no servidor

Para baixar ou atualizar os templates do site do CMI, fa\xE7a o seguinte no servidor:

cd /var/www/brasil/mir/etc && cvs update
cd .. ; ant

Confirme se o config.properties est\xE1 ok (incluindo suas permiss\xF5es) e depois v\xE1 at\xE9 a p\xE1gina de administra\xE7\xE3o para atualizar as p\xE1ginas correspondentes \xE0s mudan\xE7as no template. Por exemplo, se houve uma mudan\xE7a nos templates pra coluna da direita, atualize o "navigation bar" e assim por diante.

Edi\xE7\xE3o dos templates

Uma vez que voc\xEA tenha baixado os templates do reposit\xF3rio, \xE9 tempo de edit\xE1-los. Os templates ficam em mir/etc/open e mir/etc/producer e s\xE3o arquivos *.template. Os que est\xE3o na pasta open referem-se \xE0 p\xE1gina de publica\xE7\xE3o e os da producer s\xE3o do resto do site est\xE1tico. Os templates est\xE3o no formato do FreeMarker.

A configura\xE7\xE3o geral dos templates \xE9 feita no arquivo etc/producer/producers.xml, cujo conte\xFAdo permite, por exemplo, controlar quantas publica\xE7\xF5es ser\xE3o listadas na coluna da direita ou na coluna do meio, etc.

Internacionaliza\xE7\xE3o

As tradu\xE7\xF5es do site em v\xE1rias l\xEDnguas encontram-se em etc/bundles, e os arquivos s\xE3o, para o caso do site est\xE1tico:

  • Portugu\xEAs: producer_pt.properties
  • Ingl\xEAs: producer_en.properties
  • Espanhol: producer_sp.properties
  • Esperanto: producer_eo.properties

Para a p\xE1gina de publica\xE7\xE3o, os arquivos come\xE7am com open ao inv\xE9s de producer, e para a p\xE1gina de administra\xE7\xE3o eles come\xE7am com adminlocal.

Ap\xF3s efetuar quaisquer altera\xE7\xF5es neles, \xE9 preciso regenerar o conte\xFAdo do site (ao menos a p\xE1gina inicial e as colunas). Se aparecer, ao inv\xE9s das strings, algo como ??general.readmore??, fa\xE7a isso:

cd etc/bundles
sudo cp producer_pt.properties producer.properties
cd ../.. && sudo ant

E depois regenere a navigation bar e a p\xE1gina inicial.

Templates da p\xE1gina de administra\xE7\xE3o

Os templates da p\xE1gina de administra\xE7\xE3o ficam em /var/www/brasil/mir/templates/admin e ele n\xE3o est\xE1 no CVS do projeto imc-brasil.

Aplicando as altera\xE7\xF5es

Depois que voc\xEA efetuou qualquer modifica\xE7\xE3o nos templates, o site n\xE3o ser\xE1 automaticamente atualizado. Para que isso ocorra, \xE9 preciso que voc\xEA recompile o MIR atrav\xE9s dos seguintes comandos:

cd /var/www/brasil/mir
export TOMCAT_HOME="/usr/share/tomcat4"
/usr/bin/ant

Arquivos de inclus\xE3o

O s\xEDtio do CMI \xE9 composto por p\xE1ginas "quebradas" numa s\xE9rie de arquivos diferentes. Em geral uma p\xE1gina do site \xE9 composta dessa forma:

 ________________________________________________________
|                                                        |
|                       banner.shtml                     |
|________________________________________________________|
|                    |                                   |
|  navigation.shtml  |                                   |
|   _______________  |          corpo da p\xE1gina          |
|  | coletivos.inc | |                                   |
|  | cities.inc    | |   _____________________________   |
|   ---------------  |  | openpostingcopyright.pt.inc |  |
|                    |   -----------------------------   |
|____________________|___________________________________|  

Existem duas formas de inclus\xE3o:

  • Via Server Side Includes (Apache SSI): usado para incluir arquivos .shtml numa mesma p\xE1gina. Ocorre no momento em que o usu\xE1rio requisita uma p\xE1gina do servidor.
  • Via template: inclui arquivos .inc ou .shtml na hora em que o software gera o .shtml.

Cada arquivo .shtml \xE9 gerado por um ou mais arquivos de template diferentes, mas os .inc s\xE3o editados manualmente ou ent\xE3o pela p\xE1gina de administra\xE7\xE3o.

Os arquivos de inclus\xE3o .inc s\xE3o aqueles que cont\xE9m textos explicativos sobre o funcionamento do site e que s\xE3o pass\xEDveis de edi\xE7\xE3o a partir da interface de administra\xE7\xE3o do site.

A maioria dos arquivos de inclus\xE3o .inc se encontra em ${config["Producer.StorageRoot"]}/inc e s\xE3o, por exemplo:

  • openpostingcopyright.{en,eo,es,pt}.inc
  • openpostingpolicy.{en,eo,es,pt}.inc
  • opentrashpolicy.inc

Problemas com os arquivos de inclus\xE3o

Se as p\xE1ginas n\xE3o estiverem incluindo alguns arquivos, como por exemplo a nota de rodap\xE9 do site ou ent\xE3o a p\xE1gina de publica\xE7\xE3o est\xE1 sem cabe\xE7alho ou coluna da esquerda, \xE9 preciso criar um link simb\xF3lico dentro da pasta de trabalho dos servlets, como por exemplo:

cd mir/bin/mir/WEB-INF/etc/open && ln -s CAMINHO_DO_SITE
cd mir/bin/mir/WEB-INF/etc/producer && ln -s CAMINHO_DO_SITE/inc

Esses links simb\xF3licos podem desaparecer quando o software \xE9 atualizado. Basta recriar esses links que a inclus\xE3o volta a ocorrer.

Criando um arquivo de inclus\xE3o

Um novo arquivo de inclus\xE3o pode ser criado da seguinte forma:

cd CAMINHO_DO_SITE/inc; touch arquivo.inc && chown www-data.www-data arquivo.inc

Este arquivo j\xE1 pode ser inclu\xEDdo como refer\xEAncia nos templates e sua edi\xE7\xE3o pode ser feita pela interface administrativa do site.

Refer\xEAncias

Sobre este manual

Este manual foi escrito por Rhatto (rhatto@riseup.net).

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 Brazil License.

-- SilvioRhatto - 25 Dec 2006

-- GusG - 05 Feb 2008
Topic attachments
I Attachment Action Size Date Who Comment
article-generation-example.pngpng article-generation-example.png manage 72 K 15 Sep 2005 - 02:21 UnknownUser Exemplo de produ\xE7\xE3o de artigo
arvore-mir.pngpng arvore-mir.png manage 81 K 22 Feb 2004 - 18:46 UnknownUser Estrutura de diret\xF3rios de um site rodando MIR
mir-architecture-mirrored.pngpng mir-architecture-mirrored.png manage 111 K 15 Sep 2005 - 02:00 UnknownUser Arquitetura com espelhamento
mir-architecture-singlehost.pngpng mir-architecture-singlehost.png manage 82 K 15 Sep 2005 - 01:59 UnknownUser Arquitetura com apenas um servidor
producer-node-tree-example.pngpng producer-node-tree-example.png manage 76 K 15 Sep 2005 - 02:22 UnknownUser \xC1rvore de produ\xE7\xE3o
Topic revision: r45 - 09 Feb 2008, DrebS
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback