Compilação de pacotes e portabilidade

1. Compilação de pacotes e portabilidade

Daniel Dias
diasdaniel1965

(usa Debian)

Enviado em 02/10/2021 - 13:38h

Olá,
Para facilitar vou dar um exemplo prático de uma situação que estou enfrentando.
Estou usando o Debian 9 e preciso da versão 2.x.x do pacote Keepalived, no repositório official e via backports tem apenas a versão 1.3.
Tentei instalar o .deb do Keepalived do Debian 10 no Debian 9 porém deu vários erros referente as versões das libs.
Estou compilado o Keepalived v2.2.4 no debian 10 posso usar os arquivos que foram compilados no Debian 10 no Debian 9?
Se Sim. Pq não posso usar o .deb do Debian 10 no Debian 9? Eu li o conteúdo do arquivos "control" que fica dentro do pacote .deb e lá tem os pré-requisitos das versões das libs.
Devo respeitar as versões dessas libs? ou posso alterar o arquivo "control" e criar um novo pacote .deb?



  


2. Re: Compilação de pacotes e portabilidade

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 02/10/2021 - 18:04h

Uma dependência num programa significa dependência de implementação. Como exemplo, se a versão 1 de uma bibioteca a função x retorna um inteiro em 32 bits um programa q use a bibioteca espera um inteiro em 32bits. Se a versão 1.1 mudar o retorno para 64 bits, vai dar problema, por isso o implementador restringe qual biblioteca usar. Pode acontecer também de o programador colocar qualquer versão de dependência, criando uma restrição desnecessária, mas o usuário normalmente não tem como saber.
Vc pode contornar requisitos de bibiotecas criando links simbólicos no /lib



3. Re: Compilação de pacotes e portabilidade

Daniel Dias
diasdaniel1965

(usa Debian)

Enviado em 03/10/2021 - 16:21h


leandropscardua escreveu:

Uma dependência num programa significa dependência de implementação. Como exemplo, se a versão 1 de uma bibioteca a função x retorna um inteiro em 32 bits um programa q use a bibioteca espera um inteiro em 32bits. Se a versão 1.1 mudar o retorno para 64 bits, vai dar problema, por isso o implementador restringe qual biblioteca usar. Pode acontecer também de o programador colocar qualquer versão de dependência, criando uma restrição desnecessária, mas o usuário normalmente não tem como saber.
Vc pode contornar requisitos de bibiotecas criando links simbólicos no /lib


Então o melhor é eu usar o pacote compilado na distro que foi compilado e não usar em outras distros ?
E dessa forma as versão das libs influenciam no momento da compilação ou apenas influenciam no momento da execução?
Pois eu estava pensando se eu consegui compilar o mesmo pacote no debian 9, 10 e 11. posso desconsiderar a deps. no arquivo "control"?




4. Re: Compilação de pacotes e portabilidade

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 03/10/2021 - 22:50h


Tem o problema relacionado ao binário q eu mencionei e tem outro relacionado ao gerenciamento de pacotes. Cada distro pode dar um nome diferente para o mesmo pacote. Então vc instala beleza mas o problema surge quando vc instala outro pacote q tem o 1o como dependência. O gerenciador vai procurar por um nome e não vai encontrar, apesar da dependência estar instalada. Por isso não se deve misturar repositórios de outras distros.


5. Re: Compilação de pacotes e portabilidade

aguamole
aguamole

(usa KUbuntu)

Enviado em 03/10/2021 - 23:13h

diasdaniel1965 escreveu:

Então o melhor é eu usar o pacote compilado na distro que foi compilado e não usar em outras distros ?
E dessa forma as versão das libs influenciam no momento da compilação ou apenas influenciam no momento da execução?
Pois eu estava pensando se eu consegui compilar o mesmo pacote no debian 9, 10 e 11. posso desconsiderar a deps. no arquivo "control"?


Pode usar a compilada do Debian 10 mas se não rodar então tem que corrigir a dependências que esta faltando no Debian 9 que tem no Debian 10.
Você pode ate criar seu próprio pacote Debian do compilado que vc fez no Debian 10 se fizer isso o gerenciador de pacote vai saber que o compilado esta instalado conforme vc colocar no control do seu pacote..

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


6. Re: Compilação de pacotes e portabilidade

Daniel Dias
diasdaniel1965

(usa Debian)

Enviado em 04/10/2021 - 10:20h

mas o pacote depois de compilador e gerado os binários muitas vezes eh um pacote standalone certo?


7. Re: Compilação de pacotes e portabilidade

aguamole
aguamole

(usa KUbuntu)

Enviado em 04/10/2021 - 14:03h

diasdaniel1965 escreveu:

mas o pacote depois de compilador e gerado os binários muitas vezes eh um pacote standalone certo?

Nem sempre é independente, o Java é um exemplo de compilador que gera binários chamado de bytecode e que é dependente da JVM para executar.
Joga no seu Debian 9 e usa o comando "ldd" para checar as dependências do software que vc compilo.
Exemplo com o "ls":
root@jca-h310:/home/adm1/Downloads# ldd /usr/bin/ls
linux-vdso.so.1 (0x00007ffe94fde000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f18d8b15000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f18d8923000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f18d8893000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f18d888d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f18d8b85000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f18d886a000)


CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


8. Re: Compilação de pacotes e portabilidade

Daniel Dias
diasdaniel1965

(usa Debian)

Enviado em 04/10/2021 - 15:34h


aguamole escreveu:

diasdaniel1965 escreveu:

mas o pacote depois de compilador e gerado os binários muitas vezes eh um pacote standalone certo?

Nem sempre é independente, o Java é um exemplo de compilador que gera binários chamado de bytecode e que é dependente da JVM para executar.
Joga no seu Debian 9 e usa o comando "ldd" para checar as dependências do software que vc compilo.
Exemplo com o "ls":
root@jca-h310:/home/adm1/Downloads# ldd /usr/bin/ls
linux-vdso.so.1 (0x00007ffe94fde000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f18d8b15000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f18d8923000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f18d8893000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f18d888d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f18d8b85000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f18d886a000)


CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


Legal esse comando, nem sabia que existia.
Valewww


9. Re: Compilação de pacotes e portabilidade

Daniel Dias
diasdaniel1965

(usa Debian)

Enviado em 04/10/2021 - 15:41h

Mas uma pergunta, vou seguir o exemplo do keepalived Version 2.2.4, se eu fizer o download do código fonte keepalived no site https://www.keepalived.org/download.html e compilar no Debian 9, 10 e 11 essas 3 compilações desse mesmo software vão ser compatíveis entre si ? e se sim eu posso pegar o pacote .deb do Debian 10 alterar as dependências no arquivo "control" e criar um novo .deb para instalar no debian 9?

Mas se caso não forem compatíveis entre si quer dizer que o software depende da biblioteca que foi usada na compilação?
Ou as libs e deps usada na compilação não tem relação com a libs e deps necessárias para rodar o software?



10. Re: Compilação de pacotes e portabilidade

aguamole
aguamole

(usa KUbuntu)

Enviado em 04/10/2021 - 21:15h

Nada a ver, a dependência de compilação é de compilação e somente isso.
O binário pode ou não usar as dependência de compilação.
As dependência de compilação é comum que sejam as de desenvolvimento e as do binário pode ou não ser.
No Lubuntu 16.04 quando o OS estava para acabar o suporte teve uma dependência do Firefox de compilação que não existia mais nos repositórios mas mesmo assim o binário do Firefox rodava.
O kernel Linux é outro que precisa de dependência para compilar que na hora de executar ele inicia sem.
Alguns binários tem as libs internamente.

O which é um exemplo de executável que não tem dependência:
adm1@jca-h310:~$ ldd /bin/which
não é um executável dinâmico

Desde que satisfaça as dependências pode instalar o pacote em outros sistemas desde que sejam sistemas GNU/Linux porque binários compilados para rodar no kernel Linux só vai rodar no kernel Linux.
A menos que existe algum software capas de rodar o binário fora do GNU/Linux assim como agente faz com os binários compilados para o Windows usando o Wine.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


11. Re: Compilação de pacotes e portabilidade

Daniel Dias
diasdaniel1965

(usa Debian)

Enviado em 05/10/2021 - 10:03h


Mas agora chegamos a uma outra questão.
Se as libs de compilação não tem relação com o momento da execução isso quer dizer que eu posso compilar um pacote que pode não rodar na distro que estou compilando ?
E que uma vez o pacote compilado posso rodar ele qualquer distro dês que o nomes das das libs de execução estejam satisfeitas no sistema?




12. Re: Compilação de pacotes e portabilidade

aguamole
aguamole

(usa KUbuntu)

Enviado em 05/10/2021 - 10:53h

Não quando faz a compilação os binários estão prontos para rodar na distro que compilo.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts