Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFe, ACBrNFSe, ACBrCTe e etc... Funcionando no Linux 64 bits


  • Este tópico foi criado há 2571 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá comunidade!

É com imenso prazer que venho comunicar-lhes a compatibilidade dos componentes ACBrNFe, ACBrCTe e etc... em ambientes Linux 64btis.

Sim. Agora é possível!

Depois de um longo tempo de tentativas, resolvi, neste fim de semana, remover dotas as chamadas estáticas que haviam nas unidades: libxmlsec.pas, libxml2.pas, libxslt.pas e libexslt.pas e reconstruir apenas as necessárias com implementações que realizam chamadas dinâmicas às bibliotecas.

Nenhuma modificação foi realizadas em unidades "específicas do projeto ACBr" e sim apenas nos quatro arquivos citados acima.

A princípio, percebi que era possível recriar a LCL (Lazarus) se não fosse realizado nenhum vínculo estático com libs 64bits (ou universais - caso MacOS). Logo resolvi reimplementar todos os métodos existentes nessas bibliotecas com chamadas dinâmicas. No entanto, qual foi minha surpresa, existem milhares (sem exagero) de métodos com vinculação estáticas nesses arquivos. Só no libxml2, para se ter uma ideia, depois de criar um pequeno automatizador para me auxiliar na conversão, o arquivo ficou com mais de 35 000  linhas :o  e alguns erros em funções desnecessárias ao funcionamento dos componentes do ACBr. Logo, eu resolvi recriar apenas aquelas que eram necessárias (algumas dezenas). ;)

Feito isso, consegui compilar, recriar a IDE e fazer funcionar o componente ACBrNFe (acredito que outros também funcionarão, já que não houve nenhuma modificação ao nível deles).

Reforçando: Todas as modificações se deram nos quatro arquivos já citados acima que fazem parte do pacote ACBrOpenSSL.

As unidades modificadas podem ser encontradas em https://github.com/messiashenrique/xmlsec4pascal e em anexo nesse post.

Gostaria de salientar que estou fazendo testes em ambiente Linux 32 e 64bits (usando Ubuntu 15.10). Portanto, ficaria muito grato se alguém pudesse testar no Windows tanto com Delphi como com o próprio Lazarus.

Obs.:

Tentei postar aqui os prints de tudo funcionando e as próprias unidades modificadas, mas aparece um janelinha dizendo que só posso fazer upload de 1024kb, sendo que as unidades zipadas medem 83kb e os prints também são pequenos.

Qualquer dúvida quanto a instalação,, ou outra qm que eu puder ajudar, coloco-me a disposição.

 

Att.

Messias Henrique

  • Curtir 5
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Oi Messias,

Parabéns pela iniciativa... vou analisar em breve...

No caso da carga dinâmica, as Libs não precisarão ser lidas, quando a IDE for carregada, ou a aplicação iniciada...

Porém, quando formos usar o componente ACBrNFe, a leitura das Libs precisarão ser efetuadas... nesse caso, isso funcionará ?

Digo, se o problema é carregar as Libs, essa modificação não está apenas adiando o problema  ?

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Olá Daniel, bom dia e obrigado.

Então, Daniel, antes cheguei a pensar isso também...

Mas fiz um pequeno teste e vi que o problema não é ao carregar a Lib e sim ao criar a parte gráfica com lib carregada.

Da forma que está, a lib é carregada em um handle no início da execução do método e logo depois é liberada.

Fiz esse teste em um form mesmo e vi que dava certo. Então acreditei que ia funcionar também com o componente.

Veja as imagens em anexo
 

Att.

Messias Henrique

1.png

2.png

3.png

4.png

Agora precisamos testar em outros ambientes (principalmente Windows com Delphi  - que não tenho aqui).

Acredito que funcione, mas é bom testar!

Att.

Messias Henrique

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Estou com muito pouco tempo para a analise...

Acredito que o ideal seria criar novas Units baseadas nas modificações, mas com um nome próprio "ACBr_*.pas" e remover todo o código que foi comentado...

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Fundadores

Fiz um teste rápido, no Windows 10, com as novas Units, mas comecei a receber SIGSEGV (A.V.) na inicialização das Libs

Por enquanto vou manter as Libs atuais (originais do projeto libxml2-pas, com carga estática)

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Se ela é baseada no projeto libxml2-pas, o @messiashenrique poderia enviar um push-request diretamente para eles. O que acha  messiashenrique?

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Olá Amigos

Conforme o post acima só consegui instalar o ACBrOpenSSL no Linux64 usando as libs que o Messias Henrique disponibilizou no git https://github.com/messiashenrique/xmlsec4pascal

Precisei fazer alguns ajustes nas units para prosseguir um pouco mais, pois na procedure IntXmlSec da unit ACBrDFeOpenSSL.pas foram encontrados alguns problemas. Os ajustes em geral foram:

1) Adicionar a referencia da use DynLibs nos métodos SafeLoadLibrary e LoadLybrary, pois no meu caso, os métodos estavam sendo chamados da unit sysutilh.inc e por algum motivo o método da sysutilh.inc não foi capaz de fazer o "load" das bibliotecas .so, as alterações foram as seguintes

DynLibs.SafeLoadLibrary
DynLibs.LoadLibrary

2) Em algumas chamadas GetProcAddress havia um espaço na string do segundo parâmetro, por exemplo

GetProcAddress(lHandle, '__xmlIndentTreeOutput ')

Desta forma o método GetProcAddress retornava sempre um Handle nulo, então eu alterei as chamadas retirando o espaço no final da string e mais um passo foi conquistado.

GetProcAddress(lHandle, '__xmlIndentTreeOutput')

Estou anexando as units alteradas caso o Messeias julgue necessário alterar no Git

Agora estou enfreando um problema e não por onde começar na linha abaixo

if (xmlSecCryptoDLLoadLibrary('openssl') < 0) then

Sempre recebo a exceção de que não foi possivel carregar a xmlsec-crypto. Já tentei configurar o LD_LIBRARY_PATH e rever a instalação do xmlsec. Inclusive, tentei também baixar os fontes das libs e compilar na tentativa de sucesso, mas não obtive. Se alguém tiver alguma ideia ou já passou por isso, toda ajuda é bem vinda. Estou usando Estou usando ubuntu 15.10 64-bits, Lazarus 1.4.0+dfsg-5, FPC 2.6.4.

Abraços,

 

libexslt.pas

libxml2.pas

libxmlsec.pas

libxslt.pas

André Medeiros

Link para o comentário
Compartilhar em outros sites

Em 03/11/2015 at 11:49, messiashenrique disse:

Olá Daniel, bom dia e obrigado.

Então, Daniel, antes cheguei a pensar isso também...

Mas fiz um pequeno teste e vi que o problema não é ao carregar a Lib e sim ao criar a parte gráfica com lib carregada.

Da forma que está, a lib é carregada em um handle no início da execução do método e logo depois é liberada.

Fiz esse teste em um form mesmo e vi que dava certo. Então acreditei que ia funcionar também com o componente.

Veja as imagens em anexo
 

Att.

Messias Henrique

1.png

2.png

3.png

4.png

Agora precisamos testar em outros ambientes (principalmente Windows com Delphi  - que não tenho aqui).

Acredito que funcione, mas é bom testar!

Att.

Messias Henrique

Olá Messias, tudo bem ?

Estou usando um ambiente similar ao seu

Ubuntu 15.10 64, Lazarus 1.4.4, FPC 2.6.4, e ACBr do Trunk2.

Substitui as libs do ACBrSSL pelas suas, e cheguei no mesmo resultado que o seu. Porém no momento de assinar a nota, encontro um problema na function xmlSecCryptoDLLoadLibrary, quando passamos pela linha Result := DoGetxmlSecCryptoDLLoadLibrary(crypto); recebemos uma exceção 'External: SIGSEGV';

Infelizmente não consigo passar deste ponto, também não temos como debugar isso.

Uma curiosidade é que quando usamos as bibliotecas baixando os fontes e compilando localmente, não é gerada exceção mas a função retorna (-1).

Você consegue assinar a nota? Você poderia me dar uma dica de como continuar a partir daqui ?

Abraços

Abraços,

 

 

André Medeiros

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
Em 29/12/2015 at 16:54, almp1 disse:

Olá Messias, tudo bem ?

Estou usando um ambiente similar ao seu

Ubuntu 15.10 64, Lazarus 1.4.4, FPC 2.6.4, e ACBr do Trunk2.

Substitui as libs do ACBrSSL pelas suas, e cheguei no mesmo resultado que o seu. Porém no momento de assinar a nota, encontro um problema na function xmlSecCryptoDLLoadLibrary, quando passamos pela linha Result := DoGetxmlSecCryptoDLLoadLibrary(crypto); recebemos uma exceção 'External: SIGSEGV';

Infelizmente não consigo passar deste ponto, também não temos como debugar isso.

Uma curiosidade é que quando usamos as bibliotecas baixando os fontes e compilando localmente, não é gerada exceção mas a função retorna (-1).

Você consegue assinar a nota? Você poderia me dar uma dica de como continuar a partir daqui ?

Abraços

Olá @almp1, tudo bem sim e você?

Então, desculpe-me pela demora... Estes dias estive ausente desse universo... (rsrsr). Só agora vi suas mensagens.

Vou voltar a mexer nesse projeto a partir da semana que vem.

Quem sabe a gente consegue descobrir o que se passa...

Em um passado não muito distante, eu tive que improvisar nesse projeto e fiz uma gambiarra (argh!) onde eu gerava o xml pelo ACBr e depois validava e assinava pela através dos executáveis xmlsec1 e openssl (usando o TProcess) . Mas isso é horrível e acredito que é possível fazer tudo pela lib mesmo. No entanto, não cheguei a tentar dessa última vez... Embora, provavelmente, irei esbarrar no mesmo problema que você.

Dessa vez estou mais otimista... Assim que tiver iniciado os testes volto aqui para dar um parecer, ok?

Att.

 

Messias Henrique

Em 24/11/2015 at 12:32, EMBarbosa disse:

Se ela é baseada no projeto libxml2-pas, o @messiashenrique poderia enviar um push-request diretamente para eles. O que acha  messiashenrique?

Olá @EMBarbosa, tudo bem, né?

Desculpe-me pela demora ao responder... Estive ausente alguns dias...

Então, acho que ainda temos que ajustar algumas coisinhas.... Assim que conseguirmos corrigir alguns detalhes, vou sim tentar entrar em contato com o pessoal do libxml2-pas para sugerir as mudanças... (embora tenho a impressão - só a impressão mesmo - que o projeto está meio parado).

Enfim, não custa nada tentar!

Att.

Messias Henrique

Editado por messiashenrique
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderadores

O problema que ocorre é com o Lazarus e o código que faz a parte do openssl em 64!

tem que ser corrigido nele se for o ACBr vai compilar e funcionar sem problemas! mas o problema está nas units do lazarus com openssl em 64 bits ;) terá que enviar uma correção ou sugerir a mesma para ser acatada pela comunidade Lazarus

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 6 meses depois ...

Olá Amigos,

Estou retomando este assunto, pois o uso da NFe em ambiente Linux64 me interessa muito, e acredito que deva interessar a outros colegas que usam o ACBr.

Entrei em contato com o Petr que desenvolveu a libxml2-pascal https://sourceforge.net/projects/libxml2-pas/ e a resposta dele foi a seguinte. 

Hello Andre,

I stopped maintenance of the libxml2-pas library for about 12 years ago, and I myself do no longer work neither actively use any flavor of Pascal.
Actually, it would be surprising for me if the code was still usable....

I am afraid that there is only one thing you can do - your own research :(

Anyway, thanks for contacting me.
Good luck,
Petr

Ai entendi o motivo do pacote ACBrOpenSSL ter o seu próprio fonte libxml2.pas, já que ele é uma peça fundamental para o uso do ACBr com OpenSSL. Sei que já houve um avanço nas DLLs para Windows usando a Libxml2-2. ftp://xmlsoft.org/libxml2/win32/64bit/ 

Vou fazer alguns testes usando a codificação do Messias Henrique https://github.com/messiashenrique/xmlsec4pascal e atualizando os pacotes da biblioteca para ultima versão da libxml que é a 2.9.4. Percebi que a libxml2.pas foi criada baseada na versão 2.7.3 que é de 2009. (já foram 7 anos). Também foram disponibilizados as versões 1.6 do Lazarus e 3.0 da FPC. Acho que já houve alguma evolução ;-)

Se alguém tiver alguma ideia, duvida, sugestão fico a disposição para podermos usar também a assinatura da NFe em Linux64

Abraços,

André Medeiros

Link para o comentário
Compartilhar em outros sites

Legal o mantenedor original do projeto ter respondido! Mas é deprimente quando ele diz que não atualiza a 12 anos e nem utiliza mais Pascal.
Isso é um grande problema. Qualquer alteração na libxml2 não será replicada para a versão Pascal, pois o projeto morreu (caso ninguém tenha assumido).

A primeira coisa a fazer é procurar um fork do projeto no SorceForge ou Git e saber se alguém continuou o projeto.

Ou se o pessoal do ACBr assumiu ou irá assumir esse fork. ;-)

Marcos Douglas B. Santos
www.ObjectPascalProgramming.com

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Na verdade usamos poucas funções da LibXmlSec... e para o que precisamos, ela parece estar se comportando bem...

Acho que o ideal, seria criar um novo .PAS, nosso, carregando de forma dinâmica (e não estática), apenas os métodos que precisamos...

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Olá Daniel, 

Gosto desta linha de pensamento,

A principio, se não houver, vou mapear apenas as funções que são necessárias para o ACBr para "enxugar" os fontes libxmlsec, libxml2, libxslt.

Vou tentar esboçar alguma coisa pensado em economia e compatibilidade no Linux 64 e vou postando aqui.

Abraços,

  • Curtir 1

André Medeiros

Link para o comentário
Compartilhar em outros sites

  • Consultores
1 hora atrás, mdbs99 disse:

A primeira coisa a fazer é procurar um fork do projeto no SorceForge ou Git e saber se alguém continuou o projeto.

Se procurar talvez até encontramos...

https://github.com/ak47morozov/Delphi-Libxml2

27 minutos atrás, almp1 disse:

Olá Daniel, 

Gosto desta linha de pensamento,

A principio, se não houver, vou mapear apenas as funções que são necessárias para o ACBr para "enxugar" os fontes libxmlsec, libxml2, libxslt.

Vou tentar esboçar alguma coisa pensado em economia e compatibilidade no Linux 64 e vou postando aqui.

Abraços,

Talvez isso nos leve a conseguirmos uma alternativa em que nem precisemos da dll.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Consultores
Agora, mdbs99 disse:

Legal. Mas não esqueçam do FreePascal!

Não esqueci, só citei um exemplo. Nem comparei com o fonte do Messias Henrique citado no tópico...
Na verdade, ACBrMonitorPlus é compilado atualmente em Lazarus. Qualquer quebra neste respeito não poderá ser tolerada.

  • Curtir 2

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Em 21/07/2016 at 14:18, mdbs99 disse:

Legal. Mas não esqueçam do FreePascal!

De qualquer forma já é um bom começo.

Olá amigos,

Só para dar um report, testei a biblioteca  https://github.com/ak47morozov/Delphi-Libxml2 no DelphiX2 foi tranquilo, mas no Lazarus 1.4.4 fom FPC 2.6.4 No Windows deu muito problema, nem me estendi para testes no Linux.

Porém fiz algumas alterações no ACBrOpenSSL e o funcionamento tanto no Delphi quanto Lazaus Windows funcionaram perfeitamente, vou fazer testes no Linux para ver o comportamento e se tudo der certo posto os resultados aqui.

Abraços

André Medeiros

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Aparentemente esse projeto está sem manutenção...

Citar

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2571 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.