TUTORIAL - SERVIDOR DE MAPAS INTRODUÇÃO Os passos descritos nesse tutorial são fruto da experiência obtida na realização de tais procedimentos para instalação de um Servidor de Mapas, sendo que tais procedimentos podem variar de acordo com o sistema operacional, distribuição, e versão dos pacotes utilizados. Os passos seguidos foram aplicados na distribuição linux Slackware 10.0. Este tutorial não inclui passos de instalação do Linux, para tais detalhes consulte a documentação da sua distribuição. No Servidor de Mapas, podem ser utilizados diversos recursos, como customização da interface, utilizando recursos de JavaScript, PHP, entre outras recursos dinâmicos, além da disponibilização dos dados geográficos, fazendo a opção de utilização de consulta em arquivos shape ou banco de dados robustos, como o PostGreSql. Neste projeto, um primeiro passo foi a realização de teste de conceito, apenas com consulta de arquivos shapes e customização de interface gráfica, estendendo-se a consulta e alimentação de banco de dados. As informações contidas neste tutorial incluem, ainda que superficialmente, a utilização de banco de dados. INSTALAÇÃO E CONFIGURAÇÃO É sabido que para a instalação e configuração é necessária autenticação como usuário com privilégios de administrador (root). Pacotes são necessários para instalação e configuração do Servidor de Mapas: - Apache 1.3.31 - GD 2.0.33 - Geos 2.1.1 - MapServer 4.4.1 - Php 4.3.10 - PhpPgAdmin 3.5.1 - PostGis 0.9.1 - PostGreSql 7.4.6 - Proj 4.4.9 Estes pacotes podem ser facilmente na Internet, no entanto pode-se consultar os sites listados na referencia deste. Uma vez feito download dos pacotes, iremos proceder a instalação. PACOTES - INSTALAÇÃO E VERIFICAÇÃO Apache O primeiro pacote a ser instalado é do Apache. Ele constitui o servidor Web. O primeiro passo é saber se, na instalação da distribuição, o apache foi instalado corretamente. Para tanto, deve abrir o navegador e digitar: http://localhost/ 1
Uma página semelhante a Figura 1 deve ser mostrada no navegador, caso o apache esteja instalado, e sendo executado. Figura 1 Tela inicial do apache Algumas linhas deverão estar incluídas no arquivo de configuração do apache httpd.conf, para isso: Edite o arquivo de configuração: # vim /etc/apache/httpd.conf Neste arquivo deve ser incrementado a linha de comando: Include /etc/apache/mod_php.conf A linha DocumentRoot destina-se a colocar o endereço de onde serão alocados as pastas e arquivos disponibilizados. Como sugestão mantenha /var/www/htdocs Modificar Options, logo abaixo a linha do ScriptAlias, de None. para ExecCGI. Esta configuração do CGI-Bin permitirá, ao final dos processos, a execução do MAPSERVER. Por último deve ser acrescentado na linha DirectoryIndex a opção index.php Proj-4 Este pacote oferta possibilidade de se trabalhar com vários sistemas de projeção compatibilizando assim visualizar no navegador dados em sistemas diferentes. Descompacte o Proj4 utilizando: # tar -xzvf proj-4.4.9.tar.gz Para instalação deste pacote proceda: #./configure 2
Geos Este pacote assemelha-se a ferramenta "Geoprocessing Wizard" que a ESRI implementou. Dá suporte a Cliping, Union, Merge... Descompacte o Geos utilizando: # tar -xjvf geos-2.1.1.tar.bz2 Para instalação deste pacote proceda: #./configure Agora, será instalado o primeiro pacote que faz referencia ao banco de dados: PostgreSql Descompacte o PostgreSql utilizando: # tar -xzvf postgresql-7.4.6.tar.gz Para instalação deste pacote proceda: #./configure Configuração: Configure o PostgreSql, para ser executado na inicialização do sistema. Para a distribuição Slackware os passos são os seguintes: Crie um usuário postgres: # adduser postgres Obs.: Na criação do usuário postgres, é importante lembrar que este usuário e senha, serão utilizados posteriormente para criação, edição e visualização do seu banco de dados através do pacote Phppgadmin. Crie uma pasta de dados para o banco, e mude o usuário do diretório: # mkdir /usr/local/pgsql/data # chown postgres /usr/local/pgsql/data Mude para usuário postgres: # su - postgres Vincule o DB a esta pasta: # /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data Crie um arquivo rc.postgres, dentro do diretório /etc/rc.d/ com o seguinte conteúdo: #!/bin/sh # Script para inicializar e terminar o PostgreSQL SERVER=/usr/local/pgsql/bin/postmaster PGCTL=/usr/local/pgsql/bin/pg_ctl PGDATA=/usr/local/pgsql/data OPTIONS=-i LOGFILE=/usr/local/pgsql/data/postmaster.log 3
case "$1" in start) echo -n "Inicializando o PostgreSQL..." su - postgres -c "nohup $SERVER $OPTIONS -D $PGDATA >$LOGFILE 2>&1 &" ;; stop) echo -n "Finalizando PostgreSQL..." su - postgres -c "$PGCTL -D $PGDATA stop" ;; *) echo "Sintaxe: $0 {start stop}" exit 1 ;; esac exit 0 Mude a permissão deste arquivo para ser utilizado pelo usuário postgres: # chmod 755 rc.postgres Edite o /etc/rc.d/rc.m: # vim /etc/rc.d/rc.m Adicione no final do script essas linhas # Inicializa Servidor de Dados PostgreSql if [ -x /etc/rc.d/rc.postgres ]; then. /etc/rc.d/rc.postgres start fi Edite o /etc/rc.d/rc.0: # vim /etc/rc.d/rc.0 Localize o local de descrição dos serviços dos servidores e adicione: # Finalizar o Servidor PostgreSql if [ -x /etc/rc.d/rc.postgres ]; then. /etc/rc.d/rc.postgres stop fi Edite o /etc/rc.d/rc.6: # vim /etc/rc.d/rc.6 Localize o local de descrição dos serviços dos servidores e adicione: # Finalizar o Servidor PostgreSql if [ -x /etc/rc.d/rc.postgres ]; then. /etc/rc.d/rc.postgres stop fi Edite o /etc/rc.d/rc.k: # vim /etc/rc.d/rc.k Localize o local de descrição dos serviços dos servidores e adicione: 4
# Finalizar o Servidor PostgreSql if [ -x /etc/rc.d/rc.postgres ]; then. /etc/rc.d/rc.postgres stop fi Depois de concluído essas operações, você deve verificar se está tudo de acordo. -Reinicie o computador. Lá deverá constar na inicialização a mensagem "Inicializando o PostgreSQL...". - uma vez iniciado, verifique no arquivo /usr/local/pgsql/data/postmaster.log se o servidor foi iniciado corretamente. Deverá constar mensagem "database system is ready". Caso alguns destes passos não estejam de acordo, verifique a instalação, ou consulte a documentação do PostgreSql. Obs.: De modo a facilitar a operação deve-se criar um banco de dados teste para dar continuidade a instalação dos outros pacotes. Proceda a seguinte operação para criação do banco teste: Primeiro mude para o usuário postgres # su postgres Digite para criação do banco: # /usr/local/pgsql/bin/createdb test Deverá aparecer uma mensagem informando que o banco foi criado. Utilize desse comando para verificação: # /usr/local/pgsql/bin/psql test Nessa linha de comando poderá realizar as funções manualmente. Digite: "\q" para sair. Uma vez criado o banco "test" prosseguiremos com a instalação do pacote PostGis. PostGis Retorne ao usuário root: # exit Descompacte o PostGis dentro da pasta contrib, criada na descompactação do PostGreSql. No nosso caso acessamos a pasta contrib: # cp postgis-0.9.1.tar.gz postgresql-7.4.6/contrib/ # cd /root/downloads/postgresql-7.4.6/contrib # tar -xzvf postgis-0.9.1.tar.gz Dentro da pasta contrib, acesse o diretório postgis-0.91 criado: # cd postgis-0.9.1 Edite o arquivo Makefile com algum editor: # vim Makefile Confirme que as variáveis USE_PROJ e USE_GEOS estejam setadas para 1(true). Confirme que as variáveis PROJ_DIR e GEOS_DIR estejam setadas para /usr/local/. 5
Para instalação destes pacotes proceda: Configuração do PostGis: Mude para usuário postgres: # su postgres Digite essas linhas de comando: # /usr/local/pgsql/bin/createlang plpgsql test # /usr/local/pgsql/share$ /usr/local/pgsql/bin/psql -f /usr/local/pgsql/share/postgis.sql -d test Obs.: Ao finalizar deverão aparecer diversas informações de criação de tabelas e funções associadas ao PostGis. Até o momento os pacotes relativos a banco de dados já foram instalados. Os pacotes que se seguirão, ditos pacotes básicos, serão de fundamental importância, pois caso se faça a opção de um servidor de mapas apenas com consulta de arquivos shape, eles deverão estar instalados. GD Este pacote é uma biblioteca gráfica e é utilizada pelo PHP, para criação de imagens e do MAPSERVER, no nosso caso para a criação dos mapas. Compilaremos a GD, com possibilidade de imagens nos formatos Jpeg, Png, Tiff e com a Freetype para inserção de textos utilizando fontes TrueType nas imagens. Descompacte: # tar -xzvf gd-2.0.33.tar.gz Dentro do diretório gd-2.0.33 criado: # cd gd-2.0.33 Informe as diretivas de compilação necessárias: #./configure --with-ttf=/usr --with-jpeg=/usr/lib --with-tiff=/usr/lib --with-png=/usr/lib Para compilação deste pacote proceda: PHP Caso haja um pacote do PHP previamente instalado pela distribuição, deve-se removê-lo. Isto é necessário para que não haja conflitos e problemas futuros. Há necessidade de recompilação do pacote PHP para que se faça uso do PHPPgAdmin. Continuando, Descompacte: # tar -xzvf php-4.3.10.tar.gz Dentro do diretório php-4.3.10 criado: # cd php-4.3.10 Informe as diretivas de compilação necessárias: #./configure '--prefix=/usr' '--disable-static' '--sysconfdir=/etc' '--enable-discard-path' '--with-config-file-path=/etc/apache' '--enablesafe-mode' '--with-openssl' '--with-mhash' '--enable-bcmath' '--with-bz2' '--with-pic' '--enable-calendar' '--enable-ctype' '--with-gdbm' '-- with-db3' '--enable-dbase' '--enable-ftp' '--with-iconv' '--with-exif' '--with-gd' '--enable-gd-native-ttf' '--with-jpeg-dir=/usr' '--with-png' '-- with-gmp' '--with-mysql=shared,/usr' '--with-gettext=shared,/usr' '--with-expat-dir=/usr' '--with-xml' '--enable-wddx' '--with-mm=/usr' '-- enable-trans-sid' '--enable-shmop' '--enable-sockets' '--with-regex=system' '--enable-sysvsem' '--enable-sysvshm' '--enable-yp' '--enable- 6
memory-limit' '--with-tsrm-pthreads' '--enable-shared' '--disable-debug' '--with-zlib=/usr' '--with-freetype-dir=/usr' '--enable-gd-imgstrttf' '--with-pgsql=/usr/local/pgsql' Para compilação deste pacote proceda: Obs.: Note que há necessidade de recompilar o PHP para que ele reconheça os outros requisitos, como o pacote do PHPpgAdmin e do PostgreSql. O mapserver funciona como uma aplicação CGI. Caso fizesse a opção de desinstalar o pacote, o que não é recomendável, deve-se recompilar além do PHP também o Apache, com algumas diretivas, o que torna uma opção complexa para iniciantes. PhpPgAdmin Copie o arquivo phppgadmin-3.5.1.tar.gz para o diretório que foi escolhido como "DocumentRoot", configurado no Apache. No nosso caso foi utilizado o diretório padrão do Slackware - /var/www/htdocs. Copiando: # cp phppgadmin-3.5.1.tar.gz /var/www/htdocs Descompactando # tar -xzvf phppgadmin-3.5.1.tar.gz Você pode testar o funcionamento pelo navegador, acessando: http://localhost/phppgadmin/ Figura 2 Tela inicial do phppgadmin Caso os procedimentos tenham sido executados com êxito, a tela da Figura 2 deve ser mostrada no navegador. 7
Obs.: Por motivos de segurança, o usuários root e postgres não terão permissão de acessar utilizando do recurso do phppgadmin. Para acessos deverá fazer uma das duas opções 1 - Poderá modificar as permissões de segurança a fim de que usuários root e postgres possam autenticar: edite o arquivo "config.inc.php" contido na pasta "/var/www/htdocs/phppgadmin/conf" # vim /var/www/htdocs/phppgadmin/conf/config.inc.php Sete a opção false na variavel $conf['extra_login_security']. 2 Pode-se criar usuários diferentemente do root ou postgres para que estes autentiquem no phppgadmin e execute as tarefas. Mapserver Descompacte: # tar -xzvf mapserver-4.4.1.tar.gz Dentro do diretório mapserver criado: # cd mapserver-4.4.1 Informe as diretivas de compilação necessárias: #./configure --with-proj=/usr/local --with-postgis=/usr/local/pgsql/bin/pg_config --enable-force-freetype1 Para compilação deste pacote proceda: Ao finalizar a instalação copie o binário "mapserv" criado para o diretório cgi-bin da distribuição, em nosso caso: # cp mapserv /var/www/cgi-bin/ Acesse o endereço abaixo no seu navegador para verificar se a instalação ocorreu com sucesso: http://localhost/cgi-bin/mapserv? A mensagem a seguir deverá ser mostrada: No query information to decode. QUERY_STRING is set, but empty. Há uma aplicação de demonstração na seção de download do site do MAPSERVER, que para verificação de recursos básicos se apresenta eficiente. CONSIDERAÇÕES O uso da linguagem PHP como ferramenta de customização, no início do projeto, apresentava-se como uma opção clara e facilitadora do processo, porém segundo os estudos e pesquisas realizados existe um bug ao utilizar no MAPSERVER, o PHP como módulo do Apache. Além deste fato, o uso de JavaScript, como ferramenta de customização, mostrou-se mais eficiente que PHP/MapScript. 8
SÍTIOS CONSULTADOS Slackware Distribuição LINUX www.slackware.org Apache http://www.apache.org/ PHP Download e Documentação www.php.net MAPSERVER Brasil http://mapserver.cttmar.univali.br/ MAPSERVER - University of Minnesota http://mapserver.gis.umn.edu/ GD http://www.boutell.com/gd/ Proj http://www.remotesensing.org/proj MapLab Editor de Arquivos MAP http://www.maptools.org/maplab/ Lista de Usuários MAPSERVER http://lists.gis.umn.edu/mailman/listinfo/mapserver-users Lista de Desenvolvedores MAPSERVER http://lists.gis.umn.edu/mailman/listinfo/mapserver-dev FreeGis http://freegis.org/ MapTools http://www.maptools.org/ PostGis http://postgis.refractions.net/ PostgreSql Brasil http://www.postgresql.org.br/ 9