Skip to content

Instalação do PostgreSQL 9.0 e do PostGIS 1.5 no CentOS 5

qui, 2011/09/01

Final de maio desse ano fiz a implementação do p.mapper 4.1.1 no CentOS 5, como descrevi aqui no blog. Mas para o p.mapper funcionar com um mapa particular, é necessário criar um banco de dados com suporte a objetos geográficos. O PostGIS é um complemento para o PostgreSQL que o habilita a fazer isto.

No meu local de trabalho fiz a implementação do p.mapper no servidor de aplicações web e a implementação do banco de dados no servidor de bancos de dados. Mas antes disso fiz alguns testes em uma máquina virtual isolada, implementando os dois em um só servidor virtual. Tive uma enorme dor de cabeça para conseguir implementar o banco de dados depois de já haver implementado o p.mapper. Por isso, se você for fazer a implementação de ambos no mesmo servidor, recomendo que comece pelo banco de dados.

Repositórios Adicionais

Para instalar o PostgreSQL 9.0 no CentOS é necessário adicionar os repositórios PostgreSQL Global Development Group (PGDG) e Extra Packages for Enterprise Linux (EPEL).

Instalação dos repositórios PGDG:

wget 'http://yum.pgrpms.org/9.0/redhat/rhel-5-i386/pgdg-centos-9.0-2.noarch.rpm'
rpm -Uvh pgdg-centos-9.0-2.noarch.rpm

Instalação dos repositórios EPEL:

wget 'http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm'
rpm -Uvh epel-release-5-4.noarch.rpm

Instalação dos Pacotes

Instale o PostgreSQL 9.0 Server, o PostGIS, o GEOS e o PROJ em um sistema operacional de 64 bits (arquitetura x86_64) usando o gerenciador de pacotes:

yum install postgresql90-contrib.x86_64 postgresql90-devel.x86_64 postgresql90-docs.x86_64 postgresql90-server.x86_64 postgis90 postgis90-docs postgis90-utils proj-devel.x86_64 geos-devel.x86_64 -y

Para um sistema operacional de 32 bits (arquitetura i386), instale os pacotes da seguinte maneira:

yum install postgresql90-contrib postgresql90-devel postgresql90-docs postgresql90-server postgis90 postgis90-docs postgis90-utils proj-devel geos-devel -y

Configuração do PostgreSQL 9.0

Crie uma senha para a conta de usuário postgres do sistema operacional, criada pelo serviço do PostgreSQL, através do comando abaixo. Esta senha é importante para garantir a segurança do sistema:

passwd postgres

Inicialize a base de dados do PostgreSQL com o comando abaixo:

service postgresql-9.0 initdb

Caso o banco de dados for acessado por outras máquinas numa rede e não apenas na máquina local (localhost) o arquivo /var/lib/pgsql/9.0/data/postgresql.conf deverá ser editado modificando as linhas descritas abaixo:

  • Habilite os endereços de escuta:

Localizar linha:

#listen_addresses = 'localhost'

Substituir por:

listen_addresses = '*'
  • Habilite a porta de escuta:

Localizar linha:

#port = 5432

Substituir por:

port = 5432

Facilitando sua vida, edite este arquivo apenas executando o comando abaixo:

sed -i -e '/listen_addresses/s/localhost/*/' -e '/listen_addresses/s/^#//' -e '/^#port/s/^#//' /var/lib/pgsql/9.0/data/postgresql.conf

Como uma forma de segurança, já que o banco de dados está apto a ser acessado por outras máquinas, o arquivo /var/lib/pgsql/9.0/data/pg_hba.conf deverá ser editado para que possa ser informado quais máquinas e/ou usuários poderão acessar todas e/ou determinadas bases de dados criadas no PostgreSQL com determinados métodos de acesso. Como exemplo de alteração, editamos este arquivo com as seguintes regras:

local all all               trust
host  all all 127.0.0.1/32  trust
host  all all 172.29.0.0/16 trust

Neste exemplo, a máquina local e todas as máquinas que possuem o IP dentro da faixa 172.29.0.0/16 podem acessar todas as bases de dados, com todos os usuários com o método de acesso trust (acesso sem a solicitação de senha).

Quaisquer dúvidas sobre os métodos de acesso, favor pesquisar na documentação do PostgreSQL disponível no site http://www.postgresql.org.

Para executar automaticamente as edições deste arquivo, use os comandos abaixo como modelo, mas não esqueça de fazer as modificações necessárias para a sua realidade. Observe principalmente o endereço de rede da última linha de comando:

sed -i -e '/^local/s/ident/trust/' -e '/127.0.0.1\/32/s/ident/trust/' /var/lib/pgsql/9.0/data/pg_hba.conf
echo '' >> /var/lib/pgsql/9.0/data/pg_hba.conf
echo '# Libera o acesso para as maquinas da rede 172.29.0.0/16' >> /var/lib/pgsql/9.0/data/pg_hba.conf
echo 'host all all 172.29.0.0/16 trust' >> /var/lib/pgsql/9.0/data/pg_hba.conf

Habilite a inicialização do serviço do PostgreSQL junto com a inicialização do sistema operacional com o comando abaixo:

chkconfig postgresql-9.0 on

Inicie o serviço do PostgreSQL com o comando abaixo:

service postgresql-9.0 start

Crie uma senha para o usuário postgres interno ao banco de dados padrão do PostgreSQL, através do comando abaixo, substituindo a palavra senha pela senha desejada. Esta senha é importante para a segurança, já que será necessária para acessar os bancos de dados:

psql -h localhost -U postgres -c "ALTER USER postgres WITH PASSWORD 'senha';"

Template PostGIS

Vamos agora criar um banco de dados que servirá de modelo para criar bancos de dados habilitados espacialmente, como é o caso do banco de dados necessário para o p.mapper. Crie o banco de dados postgis_template com os comandos abaixo:

createdb -h localhost -U postgres -E UTF8 -T template0 postgis_template
createlang -h localhost -U postgres -d postgis_template plpgsql
psql -h localhost -U postgres -d postgis_template -f /usr/pgsql-9.0/share/contrib/postgis-1.5/postgis.sql
psql -h localhost -U postgres -d postgis_template -f /usr/pgsql-9.0/share/contrib/postgis-1.5/spatial_ref_sys.sql
psql -h localhost -U postgres -d postgis_template -c "GRANT ALL ON geometry_columns TO PUBLIC;"
psql -h localhost -U postgres -d postgis_template -c "GRANT ALL ON geography_columns TO PUBLIC;"
psql -h localhost -U postgres -d postgis_template -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
psql -h localhost -U postgres -d postgis_template -c "VACUUM FULL;"
psql -h localhost -U postgres -d postgis_template -c "VACUUM FREEZE;"
psql -h localhost -U postgres -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='postgis_template';"
psql -h localhost -U postgres -d postgres -c "UPDATE pg_database SET datallowconn='false' WHERE datname='postgis_template';"

Banco de Dados da Aplicação

Para finalizar, criamos o banco de dados da aplicação, que no nosso caso é o p.mapper, mas pode ser qualquer aplicação que use bancos de dados habilitados espacialmente. Nos comandos SQL abaixo, entre aspas duplas, substitua a expressão nome_dono pelo nome do usuário que será o dono do banco de dados. Substitua também a expressão nome_banco pelo nome do banco de dados que você deseja criar:

psql -h localhost -U postgres -d postgres -c "CREATE ROLE nome_dono WITH createdb createrole login;"
psql -h localhost -U postgres -d postgres -c "CREATE DATABASE nome_banco WITH owner=nome_dono template=postgis_template;"

Pronto! Agora você tem o banco de dados habilitado espacialmente, no ponto de ser povoado com as informações dos seus mapas para uso do p.mapper.

Script Para Instalação Automática

Segue abaixo um script que realiza de uma vez só todo o trabalho descrito nos passos anteriores de forma automática:

#!/bin/bash

#Definindo variáveis
echo -n "Digite a senha do usuario 'postgres' do sistema operacional: " ; read PWSO
echo -n "Digite a senha do usuario 'postgres' interno ao banco de dados padrão do PostgreSQL: " ; read PWDB
echo -n "Digite o endereco da sua rede no formato IP/Mask: " ; read NETWORK
echo 'Adicione mais redes editando o arquivo /var/lib/pgsql/9.0/data/postgresql.conf'

#Instalacao dos repositorios
wget -q 'http://yum.pgrpms.org/9.0/redhat/rhel-5-i386/pgdg-centos-9.0-2.noarch.rpm'
wget -q 'http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm'
rpm -U pgdg-centos-9.0-2.noarch.rpm epel-release-5-4.noarch.rpm

#Instalacao dos pacotes
if [ `uname -i` = 'i386' ] ; then
	yum install postgresql90-contrib postgresql90-devel postgresql90-docs postgresql90-server postgis90 postgis90-docs postgis90-utils proj-devel geos-devel -y
else
	yum install postgresql90-contrib.x86_64 postgresql90-devel.x86_64 postgresql90-docs.x86_64 postgresql90-server.x86_64 postgis90 postgis90-docs postgis90-utils proj-devel.x86_64 geos-devel.x86_64 -y
fi

#Configuracao do PostgreSQL
echo $PWSO | passwd --stdin postgres
service postgresql-9.0 initdb
sed -i -e '/listen_addresses/s/localhost/*/' -e '/listen_addresses/s/^#//' -e '/^#port/s/^#//' /var/lib/pgsql/9.0/data/postgresql.conf
sed -i -e '/^local/s/ident/trust/' -e '/127.0.0.1\/32/s/ident/trust/' /var/lib/pgsql/9.0/data/pg_hba.conf
echo '' >> /var/lib/pgsql/9.0/data/pg_hba.conf
echo "# Libera o acesso para as maquinas da rede $NETWORK" >> /var/lib/pgsql/9.0/data/pg_hba.conf
echo "host all all $NETWORK trust" >> /var/lib/pgsql/9.0/data/pg_hba.conf
chkconfig postgresql-9.0 on
service postgresql-9.0 start
psql -h localhost -U postgres -c "ALTER USER postgres WITH PASSWORD '""$PWDB""';"

#Template PostGIS
createdb -h localhost -U postgres -E UTF8 -T template0 postgis_template
createlang -h localhost -U postgres -d postgis_template plpgsql
psql -h localhost -U postgres -d postgis_template -f /usr/pgsql-9.0/share/contrib/postgis-1.5/postgis.sql
psql -h localhost -U postgres -d postgis_template -f /usr/pgsql-9.0/share/contrib/postgis-1.5/spatial_ref_sys.sql
psql -h localhost -U postgres -d postgis_template -c "GRANT ALL ON geometry_columns TO PUBLIC;"
psql -h localhost -U postgres -d postgis_template -c "GRANT ALL ON geography_columns TO PUBLIC;"
psql -h localhost -U postgres -d postgis_template -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
psql -h localhost -U postgres -d postgis_template -c "VACUUM FULL;"
psql -h localhost -U postgres -d postgis_template -c "VACUUM FREEZE;"
psql -h localhost -U postgres -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='postgis_template';"
psql -h localhost -U postgres -d postgres -c "UPDATE pg_database SET datallowconn='false' WHERE datname='postgis_template';"

#Banco de Dados da Aplicacao
psql -h localhost -U postgres -d postgres -c "CREATE DATABASE database WITH owner=postgres template=postgis_template;"

Este script, ao ser executado em um sistema operacional CentOS 5 GNU/Linux, configura os repositórios necessários, instala os requisitos de software, configura o PostgreSQL, cria o template do PostGIS e cria um banco de dados habilitado espacialmente chamado database com o usuário postgres como dono, permitindo o povoamento do banco com as informações de mapas.

Copie todo o código do script para um arquivo de texto e salve com nome postgis.sh. Entre no diretório onde se encontra o script e digite os comandos abaixo para executá-lo:

chmod +x postgis.sh
./postgis.sh

Após a execução do script, o banco de dados com nome database está pronto para ser povoado.

Finalizando

Estamos mais um passo a frente para o uso do p.mapper pelos usuários/clientes. Esta novela inda levará ao menos dois capítulos para concluir esta implementação. Novamente espero que meu trabalho possa ajudar outras pessoas. Até o próximo post!

Anúncios

From → CentOS 5, GNU\Linux

4 Comentários
  1. Gostei do post, tem continuação?

    Grato

    • germanodlf permalink

      Pretendo continuar sim, mas estou dependendo da documentação dos meus colegas de trabalho. Do desenvolvedor, estou esperando a configuração do p.mapper, e do DBA quero a documentação do banco de dados utilizado pelo p.mapper. Tens alguma dúvida? Fique a vontade para perguntar.

  2. Olá germanodlf, tenho interesses justamente no p.mapper, porém não encontro muita coisa em pt_BR, para dar os primeiros passos. Se souber de alguma coisa me dê um toque. Abraço.

  3. Minha dúvida seria realmente o próximo passo, uma vez que esta etapa já estaria superada. Estou voltando a ver o pmapper procurando saber como configurá-lo.
    O script acima é seu? Parabéns!!!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: