É possível construir uma distribuição Linux suportando pacotes RPM e .deb?

29

Gostaria de saber se é teoricamente possível construir uma distribuição Linux que possa suportar pacotes rpm e debian.

Existem distros que suportam os dois?

E se não, é possível?

alcabar
fonte
4
A menos que consideremos pacotes com um número não dependente de dependências, não vejo como instalá-los pode ser teoricamente impossível.
Dmitry Grigoryev 12/12
2
Seria possível se você deixou a resolução de dependências para o usuário :)
rackandboneman
@rackandboneman nesse caso, o Slackware plus alienpara converter pacotes em arquivos .tgz funcionaria :) Se você usar o código-fonte debs ou rpms, o LFS também poderá fazê-lo.
ivanivan
@DmitryGrigoryev IIRC, a resolução de dependência é NP-completa quando você permite dependências negativas (conflitos).
user253751
@immibis NP-complete implica computável. Não-computável significa, por exemplo, "se este programa desligar o libc5, instale o libc6".
Dmitry Grigoryev

Respostas:

42

Eu não acho que existam distribuições que suportem ambos de forma nativa, mas acontece que há uma em desenvolvimento, o Bedrock Linux (obrigado a iMalinowski pelas informações). Em outras distribuições, você pode usar ferramentas de conversão, como alienconverter de um formato para outro. Qualquer coisa baseada em software é factível, com tempo e energia suficientes, portanto seria possível criar uma distribuição desse tipo (mas, considerando as diferenças entre as capacidades .debe os .rpmpacotes, é bastante difícil).

No entanto, tudo isso provavelmente decorre da idéia de que o suporte a ambos os formatos de pacotes tornaria a vida mais simples, porque você poderia instalar pacotes de qualquer lugar (bem, de qualquer lugar fornecendo um .debou .rpm). Filosoficamente, isso é falho. Uma distribuição é um conjunto coerente de pacotes; se você deseja fornecer software para essa distribuição, precisa realmente direcioná-la especificamente, o que inclui o uso do formato do pacote (e, mais importante, dos metadados). Não faz sentido dar suporte a vários formatos de pacotes de forma nativa.

(No mundo Debian, os pacotes podem funcionar com variantes que não são seu principal objetivo, porque a nomenclatura do pacote é bastante homogênea e porque a maioria das distribuições se encaixa em uma árvore de herança. Isso não é verdade no mundo do RPM. Nos dois casos, misturar e correspondência é uma má ideia.)

Você deve considerar sua distribuição como uma base sobre a qual construir seu sistema desejado, seguindo as regras e o ecossistema de sua distribuição, sem misturar coisas de outras distribuições. Você precisa de abstrações de nível superior para oferecer suporte à mixagem e correspondência (ou melhor, para fornecer ambientes de distribuição cruzada): o tempo de execução do Steam, Flatpak etc.

Stephen Kitt
fonte
10

Não, esse monstro não deve ser construído. Ao contrário, digamos, de um pacote de aplicativos MacOS, que normalmente inclui tudo o que o aplicativo precisa para executar no sistema operacional, os pacotes RPM e .deb quase sempre dependem de outros pacotes, como bibliotecas compartilhadas. Os pacotes do Linux listam os outros pacotes que precisam estar presentes, e o gerenciador de pacotes ajuda a impor esses requisitos. Além disso, as distribuições Linux diferem na maneira como as coisas são feitas (por exemplo, /etc/network/interfaces.dvs. /etc/sysconfig/network-scripts).

Você nem deve misturar pacotes de repositórios arbitrários dentro da mesma família de formatos de pacotes. Ou seja, a instalação de pacotes SuSE em uma máquina CentOS está apenas causando problemas, mesmo que ambos usem RPM. Eu nem instalaria pacotes destinados a uma versão diferente do mesmo sistema operacional (por exemplo, pacotes Ubuntu 14.04 em um sistema 16.04), a menos que eu soubesse exatamente o que estava fazendo.

Portanto, tentar oferecer suporte ao RPM e ao .deb no mesmo sistema está fora de questão. Em certas situações desesperadas, você pode converter pacotes específicos usando alien, mas deve se esforçar muito para solucionar problemas que inevitavelmente surgiriam de tais hacks.

200_success
fonte
3
Mesmo para distribuições originárias da mesma família, misturar pacotes pode ser uma má ideia. Por exemplo, Debian e Ubuntu são baseados em .deb, mas o Ubuntu tomou algumas decisões de design que diferem do Debian, portanto, o uso de pacotes Ubuntu no Debian nem sempre funciona.
slebetman
1
Até misturar versões de distribuição do Debian é uma péssima idéia: wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian
stanri
Depois, há o Mint que é baseado no Ubuntu e que é baseado no Debian ... :-)
DevSolar
1
Não vou dizer que acho uma boa ideia. Ao mesmo tempo, não vejo por que essa ideia é tão horrível. Eu acho que esses problemas podem ser superados - é apenas que não há recompensa real por isso.
Emory
9

Bem, há alien( página man ), que pode converter entre rpm, debetc., mas eu diria que os problemas reais vêm de manipulação de dependências (diferentes nomes de pacotes para o software) e localizações de arquivos de configuração.

Claro, se você quer dizer que os dois tipos de pacotes podem vir da própria distribuição, isso pode ser contornado, mas por que alguém faria isso ... (E você ainda precisará converter tudo em um ou outro , pois acho que não dpkgsabe ler os bancos de dados rpme vice-versa.)

ilkkachu
fonte
3

Sim, é possível, mas estraga a distribuição.

Pacotes não são apenas o formato, que pode ser facilmente transportado de um formato para outro.

Nota: as ferramentas de instalação do pacote precisam ser portadas, porque se deseja ter uma lista centralizada de todos os pacotes, versões, dependências, arquivos de configuração, scripts de pré e pós-instalação (se você substituir um pacote por outro, em outro pacote formato, você espera que os scripts de desinstalação (formato antigo) sejam executados a partir do novo sistema de pacotes.

Mas uma distribuição e pacotes são muito mais que um formato de pacotes. Por exemplo, para o Debian: queremos colocar os arquivos no local correto, queremos fornecer a página de manual, queremos ter alguns scripts de desomonização comuns, queremos que o programa seja executado em muitas arquiteturas, vários ambientes gráficos, para que um usuário encontre familiarizado dentro de uma distribuição também com novos packages.packages.

No Debian, queremos que os pacotes sejam facilmente construídos pelos usuários (de fontes), para que se possa personalizar alguns pacotes importantes (para ele). Isso requer muita infra-estrutura, que a maioria dos autores de upstream não pode fornecer (construção e teste automáticos em várias arquiteturas e feitos periodicamente). E também específicos do Debian são os requisitos de licença, para que seja mais fácil distribuir um pacote ou distribuição, sem a necessidade de verificar todos os pacotes.

No final, uma distribuição é feita por pacotes consistentes, não apenas por pacotes.

Giacomo Catenazzi
fonte
0

Sim, e a maioria das distros baseadas em .deb já faz isso, mas ...

No Debian e em famílias relacionadas, pelo menos, você possui alien, o que permitirá instalar pacotes RPM.

Você terá os mesmos problemas ao misturar pacotes que não foram projetados para funcionar com sua distribuição ao instalar pacotes estrangeiros, independentemente do formato - se você instalar um RPM em um sistema baseado em DEB, esse RPM deverá ser compatível com o sistema , como se você estivesse instalando um pacote RPM em um sistema baseado em RPM, e é isso. Você pode fazer isso, mas provavelmente não quer.

Mais claro
fonte
0

Sim e não. deb e rpm são apenas formatos. Você pode suportar os dois formatos, mas é inútil. Os pacotes geralmente não são comparáveis ​​entre distribuições, especialmente distribuições que não são baseadas uma na outra.

Se todas as distribuições tivessem os mesmos requisitos de versão, toda distribuição seria uma seleção de pacotes. Você pode instalar qualquer distribuição listando os pacotes.

Mas as distribuições devem fornecer software que eles possam suportar. Se uma biblioteca que faz seu aplicativo funcionar não for mantida e ela própria exigir uma biblioteca que foi substituída por outra coisa, como você resolve esse conflito? O gerenciador de pacotes não pode portar o código. Pode haver vários sucessores escolhidos por diferentes distribuições para.

jdwolf
fonte