Protheus no Linux – Parte 04

Introdução

No post anterior, preparamos um banco MySQL 5.5 e a UnixODBC na VM do Ubuntu 64. Agora, vamos instalar um DBAccess 64 bits no Linux e configurá-lo para usar o MySQL.

Instalação

Basicamente, precisamos de um arquivo contendo a distribuição 64 bits Linux do DBAccess. No exemplo de instalação, usei a versão disponível no portal da Totvs ( 16-03-15-DBACCESS_LINUX64_20141119.TAR.GZ )

Após subir a VM, usamos um WINSCP para criar dentro na estrutura de diretórios proposta para a aplicação (Post – Parte 01), uma pasta para a build do DBAccess que vamos instalar. A partir da pasta /totvs, criamos a pasta /dbaccess, e dentro dela a pasta 20141119 (referente a build em uso), e copiamos o arquivo mencionado para ela.

Usando um Putty, acessamos a VM pelo terminal e descompactamos o arquivo, usando os comandos:

cd /totvs/dbaccess/20141119/
tar zxvf 16-03-15-DBACCESS_LINUX64_20141119.TAR.GZ

Feito isso, vamos subir o DBAccess em modo “console”. A distribuição Linux 64 do DBAccess possui 2 executáveis : dbaccess64opt (Build Release) e dbaccess64dbg (Build Debug). A pasta “multi” significa que a versão de DBAccess dentro dela foi feita para conectar com múltiplos bancos de dados. Para subir esta versão em modo console, usamos os seguintes comandos :

cd multi
export LD_LIBRARY_PATH=./
./dbaccess64opt

DBAccess Linux64

Configurar conexão do MySQL no DBAccess

Você pode utilizar um DBAccess Monitor instalado no Windows, por exemplo, para conectar no DBAccess Server da máquina Linux, e proceder com a configuração da conexão com o MySQL.

Ao entrar na aba MySQL, e clicar em “Novo”, crie uma configuração com o mesmo nome de DSN no Linux que criamos no post anterior – no caso do exemplo, envp11mysql. Preencha os campos “usuário” e “senha” com o usuário e senha que criamos no MySQL durante a criação do banco de dados envp11mysql.

Testar a conexão

Usando o próprio DBAccess Monitor, na pasta “Assistentes”, usamos o recurso de Validação de Conexão, informamos o banco MySQL, depois informamos o nome da conexão (envp11mysql), e devemos receber a mensagem abaixo:

DBAccess Falha Conexão

Para ver o que houve, vamos olhar o console do DBAccess no terminal do Linux. Deve haver uma mensagem de erro parecida com a mensagem abaixo:

Begin TopClient Thread (3256297216,192.168.1.63,MYSQL/envp11mysql,DBMonitor,julio.wittwer,NOTE-AUTOMAN)
BEGINLOG]
Connection [MYSQL/envp11mysql] could not load database client library [libmyodbc3_r.so]
[ENDLOG]
[BEGINLOG]
libmyodbc3_r.so: cannot open shared object file: No such file or directory
[ENDLOG]
Exit TopClient Thread (3256297216) [ERROR -35]

O DBAccess está procurando uma lib client antiga do MySQL, para tentar conectar com ele, e não vai encontrá-la. Após instalar o DBAccess e configurar a conexão, precisamos editar o arquivo dbaccess.ini, e informar ao DBAccess que ele deve carregar a UnixODBC para acessar o MySQL. Para isso, usamos a chave clientlibrary na seção [MYSQL].

Primeiro, finalize o DBACcess, usando Control+C no console. Agora, vamos localizar o driver da UnixODBC. Normalmente ele está em alguma pasta da lib gnu Linux, em /usr/lib. Para verificar onde exatamente ela está, usamos o comando abaixo:

find /usr/lib -name 'libodbc.so*'

No meu ambiente, foram localizados os seguintes arquivos:

/usr/lib/x86_64-linux-gnu/libodbc.so.1.0.0
/usr/lib/x86_64-linux-gnu/libodbc.so.1

No dbaccess.ini, dentro da seção [mysql], colocamos a chave abaixo:

clientlibrary=/usr/lib/x86_64-linux-gnu/libodbc.so.1

DBACcess Ini

Após salvar o arquivo e subir o DBAccess novamente, vamos testar a conexão usando o assistente do DBAccess Monitor. E, se tudo estiver de acordo, devemos visualizar a mensagem abaixo:

DBAccess Conexão Ok

Subindo o DBAccess em modo “daemon”

Haja visto que o Banco de Dados MYSQL já está no ar, e o DBAccess está funcionando, podemos subir ele em modo “daemon”, sem deixar ele preso ao terminal. Para isso, usando o próprio terminal atual, finalizamos o DBAccess em modo console usando Control+C, e subimos ele em modo “daemon” usando o seguinte comando:

nohup ./dbaccess64opt -daemon

Para verificar se o processo do DBAccess está realmente no ar, podemos rodar uma instrução do Linux para listar os processos, filtrando o resultado por aqueles que contém a string “dbaccess”, usando o comando abaixo:

ps -ef | grep dbaccess

O retorno deste comando deve ser algo parecido com:

siga0984   1568      1  0 08:54 pts/0    00:00:00 ./dbaccess64opt daemon
siga0984   1591   1410  0 08:58 pts/0    00:00:00 grep --color=auto dbaccess

O que nos interessa é a primeira linha, pois informa o número do processo pelo qual o sistema operacional subiu o DBAccess64 – no nosso exemplo, 1568.

Para baixar o processo do DBAccess de forma controlada, usamos um terminal do Linux, e usamos o comando kill, informando como parâmetro o número do processo a ser finalizado. Por exemplo:

kill 1568

Para verificar se o processo está no ar, podemos usar novamente o comando “ps”. As mesmas regras se aplicam ao processo do Protheus Server. Ele pode ser colocado em modo “daemon” usando a mesma sintaxe, e verificado da mesma forma, usando o comando “ps”.

Conclusão

Com o DBAccess instalado e funcionando na própria máquina Linux, basta editar o arquivo appserver.ini da instalação do Protheus Server feita no segundo post desta sequência, para apontar para o banco MYSQL em localhost, para o alias “envp11mysql”, e agora temos um ambiente mínimo e operacional do Protheus 11 em uma máquina Linux 64.

Entre uma distribuição e outra de Linux, pode haver mudança nos comandos, a configuração de alguns itens pode ser manual e dar um pouco mais de trabalho, algumas distribuições vem com Firewall habilitado e requer mais passos de setup para abrir as exceções, alguns arquivos podem estar em outro lugar, ou ter um nome diferenciado, o gerenciador de pacotes é diferente, e assim por diante.

Estes primeiros posts foram apenas para “abrir o apetite”, temos muito a abordar ainda sobre isso nos próximos posts deste assunto 😀

Enquanto isso, agradeço novamente a audiência, e desejo a todos TERABYTES de SUCESSO 😉

 

14 respostas em “Protheus no Linux – Parte 04

  1. Um pequeno detalhe, onde vc escreve `xport LD_LIBRARY_PATH=./` o comando deveria ser `export`.

    Eu costumo criar um arquivo para configuração do LD_LIBRARY_PATH, que evita eu ter que usar o `export` a cada chamada no comando, e acho que fica mais organizado, mas isso vai de cada um claro.

    Eu faço isso :

    echo “/totvs/dbaccess/20141119/multi/” > /etc/ld.so.conf.d/dbaccess64-libs.conf
    /sbin/ldconfig

    Isso funciona no Ubuntu, onde os arquivos *.conf encontrados na pasta /etc/ld.so.conf.d/ são carregados pelo ldconfig.

    Desta forma, o ldconfig irá adicionar a pasta onde estão as bibliotecas do dbacces no ambiente padrão, e bastaria chamado o ./dbaccessopt, sem precisar do export.

    Curtido por 1 pessoa

  2. Primeiro, obrigado por compartilhar!
    Agora uma dúvida, dbmonitor, sem chance rodar em linux? Observei que você comentou que a configuração é via windows.
    Valeu!

    Curtido por 1 pessoa

    • Fala Marcelo, beleza ? Seguinte …. No exemplo que eu usei, eu parti de um Linux 64 bits, sem nenhuma interface gráfica. É possível rodar o DBMonitor em Linux, desde que você tenha uma interface gráfica ou X11, e o pacote de compatibilidade de aplicações 32 bits — ou a versão 32 “pura” msm 😀

      Curtir

  3. Pingback: Ubuntu Server 16.04 + PostgreSql + Totvs DbAccess - Ruann Carlos

  4. O que pode estar acontecendo de errado quando eu uso o DBMonitor para criar um novo ambiente e aconexão fica OK mas, ao reiniciar o DBAccess o ambiente não está mais configurado no DBMonitor?

    Curtido por 1 pessoa

    • Opa, beleza ? Verifica no log de console do dbaccess, se não está havendo alguma falha de gravação no arquivo dbaccess.ini — pode ser direitos na pasta … Confirma após a criação do ambiente o arquivo dbaccess.ini foi atualizado — manda um “cat” nele !

      😀

      Curtir

      • Beleza! E aí? Agradeço muito pela sua resposta e pela sua ajuda! Todas as pastas tiveram permissão dada via “chmod -R 777”. DBAccess e DBMonitor são executados como “su”. Mas, cara, estou observando o log do DBAccess e o que acontece é que, no momento da criação do novo ambiente não há nenhuma informação sobre a criação retornada no DBAccess e o arquivo dbaccess.ini não salva a informação criada. Outro teste que fiz foi editar o ip do licenseServer diretamente no dbaccess.ini para verificar se o DBAccess lê ele, mas a licensa não aparece no console do DBAccess. Alguma ideia do que pode estar ocorrendo?

        Curtido por 1 pessoa

      • Rapaz … que estranho … Se você baixar e subir o DBaccess, ele lê a informação do ini ? Estranho falhar a escrita sem nenhuma mensagem… É um comportamento bem atípico, neste caso recomendo abrir um chamado na Totvs para verificar o que e por que ocorre 😀

        Curtir

Deixar mensagem para Siga0984 Cancelar resposta