Ir para conteúdo
  • Cadastre-se

dev botao

ACBrLib linux


Ver Solução Respondido por Daniel InfoCotidiano,

Recommended Posts

  • Consultores

Bom dia @Gandalf
Infelizmente não consegui fazer rodar sua aplicação em seu ambiente.
Talvez por não dominar sua linguagem e o docker.
Mas observando no gerenciador de arquivos, lá na pasta da sua aplicação existem algumas dll não sei se é normal da sua linguagem isso, geralmente Linux é .so. mas não sei se existe alguma compatibilidade com estas dlls.
Basicamente quando vc utiliza a ACBrLib no Linux, vc precisa instalar as dependências conforme este manual: https://acbr.sourceforge.io/ACBrLib/ComoInstalarDistribuir.htm

A Biblioteca ACBrLibNFe.so (64 MT), vc salva em /usr/lib64
lembre-se quando não usamos ambiente gráficos no linux, precisamos usar o xvfb (https://www.geeksforgeeks.org/how-to-install-xvfb-on-ubuntu/)
dar o start no XVFB
xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1
e rodar sua aplicação.

Você precisa dar permissão de leitura e gravação nas pastas para salvar o arquivo INI, XML, PDF, etc
Quando a biblioteca é inicializada corretamente, ela gera o arquivo.ini automaticamente.
É importante vc configurar a pasta de log e controlar o retorno dos metodos.
Exemplo:
Quando for inicializar a biblioteca NFE_Inicializar([eArqConfig, eChaveCrypt])
veja o que está retornando:

 

0

Indica que a biblioteca foi inicializada corretamente.

-1

Indica que houve falhas na inicialização da biblioteca.

-5

Indica que não foi possível localizar o arquivo INI informado.

-6

Indica que não foi possível encontrar o diretório do arquivo INI.

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Obrigado pelo esforço, Daniel. Eu já coloco a biblioteca em /usr/lib64 e, mesmo assim, não funciona. Não há ninguém mais no suporte que entenda de docker? Ou alguma consultoria que pudessem me indicar para fazer isso funcionar? Toda a minha estrutura de microserviços está no linux e eu não gostaria de ter de criar outro plano no Azure somente para isso.

Link para o comentário
Compartilhar em outros sites

  • Consultores
13 minutos atrás, Gandalf disse:

Eu já coloco a biblioteca em /usr/lib64 e, mesmo assim, não funciona.

Quando vc pede para inicializar, qual o erro está retornando?
Consegue capturar este código?
Se as pastas da aplicação estiver com as permissões, ele inicializa a biblioteca, e gera o ACBrLib.ini

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

A única mensagem que retorna é que a biblioteca não pode ser carregada. Se houver alguém que já conseguiu fazer funcionar, podemos negociar. Eu preciso disso funcionando.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Meu dockerfile está assim:

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER root
WORKDIR /app
EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["NFEsAPI/NFEsAPI.csproj", "NFEsAPI/"]
COPY ["NFEs.App/NFEs.App.csproj", "NFEs.App/"]
COPY ["ACBrTrunk2/trunk2/Projetos/ACBrLib/Demos/C#/NFe/Imports/Dinamico/MT/ACBrLib.NFe.csproj", "ACBrTrunk2/trunk2/Projetos/ACBrLib/Demos/C#/NFe/Imports/Dinamico/MT/"]
COPY ["ACBrTrunk2/trunk2/Projetos/ACBrLib/Demos/C#/Shared/ACBrLib.Core/ACBrLib.Core.csproj", "ACBrTrunk2/trunk2/Projetos/ACBrLib/Demos/C#/Shared/ACBrLib.Core/"]
COPY ["GAFNETLibrary/GAFNETLibrary/GAFNETLibrary.csproj", "GAFNETLibrary/GAFNETLibrary/"]
COPY ["NFEs.Domain/NFEs.Domain.csproj", "NFEs.Domain/"]


RUN dotnet restore "./NFEsAPI/NFEsAPI.csproj"
COPY . .
WORKDIR "/src/NFEsAPI"

RUN dotnet build "./NFEsAPI.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./NFEsAPI.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

COPY ACBrLib /app/ACBrLib
COPY ACBrLib/x64/libacbrnfe64.so /usr/lib/x86_64-linux-gnu/libacbrnfe64.so

# Atualiza a lista de pacotes e instala as ferramentas necessárias
RUN apt-get update \
    && apt-get install -y \
       apt-utils \
       wget \
       unzip \
       software-properties-common

RUN apt-get download \
       libxml2 \
       libxslt1.1 \
       libcurl4 \
       libssl-dev \
       uuid-dev \
       libudev-dev \
    && mv *.deb /usr/lib64

# Atualiza a lista de pacotes e instala as dependências
RUN apt-get update \
    && apt-get install -y \
       openssl \
       libxml2 \
       libxslt1.1 \
       libcurl4 \
       libssl-dev \
       uuid-dev \
       libudev-dev \
       gcc \
       g++ \
       make \
    && rm -rf /var/lib/apt/lists/*

USER app

ENTRYPOINT ["dotnet", "NFEsAPI.dll"]

Link para o comentário
Compartilhar em outros sites

  • Consultores
20 horas atrás, Gandalf disse:

Meu dockerfile está assim:

Bom dia !
vc pode anexar o arquivo para melhor visualização.
Olhando o seu script onde estão as dependências da biblioteca que eu anexei o link em post anteriores?
é instalado posteriormente ?
Exemplo:
onde vc executa a instalação no linux do xvfb ? (nao encontrei no seu script)
tbm não encontrei o comando de instalação libgtk2.0-0 ttf-mscorefonts-installe
lembre-se que a acbrlibnfe.so vai ser copiada para
/usr/lib64, no seu script esta assim: (está correto?)
image.png

Aqui neste link tem as dependências necessárias:
https://acbr.sourceforge.io/ACBrLib/ComoInstalarDistribuir.html

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia,

Acrescentei as dependências e agora estou recebendo a mensagem Gtk-WARNING **: 12:53:38.689: cannot open display:

Acrescentei as seguintes linhas no dockerfile (antes de acrescentá-las também estava dando esse erro):

RUN Xvfb :1 -screen 0 1024x768x16 &> xvfb.log  &
RUN DISPLAY=:1.0
RUN export DISPLAY

Link para o comentário
Compartilhar em outros sites

  • Consultores
11 minutos atrás, Gandalf disse:

Acrescentei as dependências e agora estou recebendo a mensagem Gtk-WARNING **: 12:53:38.689: cannot open display:

Bom dia !
Show, sinal que já evoluímos com isso !
Vou mostrar em meu ambiente server ubuntu.

Vou executar minha aplicação NodeJS, vai dar o mesmo erro que vc reportou.
image.png

Então vou executar o comando para ativar a virtualização X e depois executar o meu programa exemplo novamente.
Xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1

image.png

Agora ele esta aguardando o comando na porta 3333 desta API de Exemplo Node.
Esta funcionando.

 

 

  • Curtir 1
Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Continua retornando a mesma resposta. Será que o comportamento no conteiner é diferente?

A porta que a minha aplicação roda é a 8080

Lembrando que o erro não dá em tempo de compilação, somente quando eu tento acessar o ACBrLib

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Acrescentei essas linhas no meu dockerfile:

ENV DISPLAY :99

COPY run.sh /app/run.sh
RUN chmod 0755 /app/run.sh

ENTRYPOINT ["bash", "/app/run.sh"]

 

E o meu run.sh está assim

Xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render -noreset &
php-fpm & dotnet NFEsAPI.dll

 

E agora a mensagem é:  Gtk-WARNING **: 14:34:59.216: cannot open display: :99

Link para o comentário
Compartilhar em outros sites

  • Consultores

isso é de um docker é com php; php-fpm é um serviço, o link q te passei é apenas como base para abstrair como foi feito em um Docker.
image.png
Se observar a resposta em seguida do amigo que utiliza java, ele nao usa php-fpm no comando do docker ele.
Pode testar desta forma:
Docker:

COPY run.sh /app/run.sh
RUN chmod 0755 /app/run.sh

ENTRYPOINT ["bash", "/app/run.sh"]

no run.sh:

Xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1

dotnet NFEsAPI.dll

caso nao der certo, tente assim no run.sh

 

Xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1 & dotnet NFEsAPI.dll

 

 


 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Acrescentando no dockerfile ENV DISPLAY :1, retorna a mensagem Gtk-WARNING **: 17:57:58.738: cannot open display: :1

Se não acrescentar ENV DISPLAY :1, retorna somente a mensagem Gtk-WARNING **: 17:57:58.738: cannot open display:

run.sh = Xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1
dotnet NFEsAPI.dll

 

Se colocar os comandos em uma linha somente, o resultado é o mesmo.

Link para o comentário
Compartilhar em outros sites

  • Consultores

E se no dockerfile usar

ENV DISPLAY :99

e no arquivo sh:

xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render
dotnet NFEsAPI.dll

 

ou, caso a opção acima nao tenha dado certo


xvfb :99 -screen 0 1280x1024x16 & export DISPLAY=:99
dotnet NFEsAPI.dll

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Olha que estranho, mesmo com o dockerfile do jeito que está (eu não cheguei a colocar essa última alteração), se eu for no container e executar o comando: Xvfb :1 eu consigo carregar a biblioteca normalmente. Mas parece que executando pelo dockerfile não funciona. Aliás, se eu colocar esse comando sozinho no dockerfile, ele não dá erro, mas também não sobe a api. O que pode ser isso? Como eu posso executar esse comando pelo dockerfile ou pelo arquivo sh:?

Link para o comentário
Compartilhar em outros sites

  • Consultores

sh é um arquivo de script shell do linux.

seu start.sh esta assim:
xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render
dotnet NFEsAPI.dll

qdo start.sh ele é executado é a mesma coisa que vc digitasse os comandos no terminal:
xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render
dotnet NFEsAPI.dll

Entao para que vc nao fique escrevendo , vc pode criar um script, exemplo:
-Script backup mariadb:
backup.sh
mysqldump -uroot -p1234 -P3306 minhabase > /home/backupmariadb/meubackup.sql

entao para nao ter q ficar dando este comando enorme, eu executo o backup.sh

Quando sua API está em pé, vc exibe algum comando como no meu exemplo... api em execução ou aguardando comandos?
se não, vc pode colar isso, assim vai saber se esta rodando.

Ele chegou a criar um arquivo acbrlib.ini ?

se criou, configure o log para uma pasta, nivel 4
image.png

Pois com o log na mao é mais facil identificar problemas

  • Curtir 1
Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

  • Consultores
9 minutos atrás, Gandalf disse:

Em qual pasta ele cria o acbrlib.ini ?

NFE_Inicializar("/minhapasta/acbrlib.ini", );

3 minutos atrás, Gandalf disse:

Outra coisa, no ["bash", "/app/run.sh"] a que se refere o parâmetro bash?

Este é um parametro do Docker (https://nerdexpert.com.br/docker-run-vs-cmd-vs-entrypoint-entendendo-as-instrucoes-de-construcao-do-docker/)

pelo que entendo o /app/run.sh sera executado no terminal via interpretador de comandos.

uma observação.. execute como administrador p ver se muda o comportamento
sudo dotnet NFEsAPI.dll

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

  • Consultores
12 minutos atrás, Gandalf disse:

Não tem jeito, o sudo Xvfb :1 ele não executa. Somente se eu for no terminal e mandar rodar.

se for no terminal e rodar ele sobe a api ?

ele cria os arquivos log no path q vc indicou ? (mandei em post anterior como configurar)

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

×
×
  • 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.