Можно ли создать дистрибутив Linux, поддерживающий пакеты RPM и .deb?


29

Мне интересно, возможно ли теоретически создать дистрибутив Linux, который может поддерживать пакеты rpm и debian.

Есть ли какие-нибудь дистрибутивы, которые поддерживают оба?

А если нет, то возможно ли это?


4
Если мы не рассмотрим пакеты с неисчислимым числом зависимостей, я не вижу, как их установка теоретически невозможна.
Дмитрий Григорьев

2
Это было бы возможно, если бы вы оставили разрешение зависимостей пользователю :)
rackandboneman

@rackandboneman в этом случае, Slackware plus alienдля конвертации пакетов в файлы .tgz сработает :) Если вы используете исходные файлы debs или rpms, LFS также может это сделать.
Иваниван

@DmitryGrigoryev IIRC, разрешение зависимостей является NP-полным, если вы разрешаете отрицательные зависимости (конфликты).
user253751

@immibis NP-complete подразумевает вычислимость. Не вычислимый означает, например, «если эта программа зависает с libc5, установите libc6».
Дмитрий Григорьев

Ответы:



42

Я не думал, что есть какие-либо дистрибутивы, которые поддерживают обе версии, но оказывается, что есть одна в разработке, Bedrock Linux (спасибо iMalinowski за информацию). В других дистрибутивах вы можете использовать инструменты преобразования, например, alienдля преобразования из одного формата в другой. Все, что основано на программном обеспечении, выполнимо при условии достаточного количества времени и энергии, поэтому было бы возможно построить такой дистрибутив (но, учитывая различия между возможностями .debи .rpmпакетами, довольно сложно).

Однако все это, вероятно, связано с идеей, что поддержка обоих форматов пакетов сделает жизнь проще, потому что вы можете устанавливать пакеты из любого места (ну, где угодно, предоставляя .debили .rpm). Философски это ошибочно. Дистрибуция - это связный набор пакетов; если вы хотите предоставить программное обеспечение для этого дистрибутива, вам действительно нужно специально на него ориентироваться, что включает использование формата пакета (и, что более важно, метаданных). Нет смысла изначально поддерживать несколько форматов пакетов.

(В мире Debian пакеты могут работать с вариантами, которые не являются их основной целью, потому что номенклатура пакетов довольно однородна, и потому что большинство дистрибутивов помещаются в дерево наследования. Это не так в мире RPM. В обоих случаях смешивание и соответствие плохая идея.)

Вы должны рассматривать свой дистрибутив как основу для построения желаемой системы, придерживаясь правил и экосистемы своего дистрибутива, не смешивая вещи с другими дистрибутивами. Вам нужны высокоуровневые абстракции для поддержки микширования и сопоставления (или, скорее, для обеспечения кросс-дистрибутивных сред): среда выполнения Steam, Flatpak и т. Д.


10

Нет, такого монстра нельзя строить. В отличие, скажем, от пакета приложений MacOS, который обычно включает в себя все, что требуется приложению для работы в операционной системе, пакеты RPM и .deb почти всегда зависят от других пакетов, таких как общие библиотеки. Пакеты Linux содержат список других пакетов, которые должны присутствовать, и менеджер пакетов помогает обеспечить соблюдение этих требований. Кроме того, дистрибутивы Linux отличаются тем, как все делается (например, /etc/network/interfaces.dпротив /etc/sysconfig/network-scripts).

Вы не должны даже смешивать пакеты из произвольных репозиториев в пределах одного семейства форматов пакетов. То есть установка пакетов SuSE на компьютере CentOS просто вызывает проблемы, хотя они оба используют RPM. Я бы даже не установил пакеты, предназначенные для другой версии той же ОС (например, пакеты Ubuntu 14.04 в системе 16.04), если бы я точно не знал, что я делаю.

Таким образом, попытка поддержать и RPM, и .deb в одной системе исключена. В определенных безвыходных ситуациях вы можете конвертировать определенные пакеты, используя alien, но вы должны ожидать, что приложите немало усилий для устранения неполадок, которые неизбежно возникнут в результате таких хаков.


3
Даже для дистрибутивов, принадлежащих к одной семье, смешивание пакетов может быть плохой идеей. Например, Debian и Ubuntu основаны на .deb, но Ubuntu приняла некоторые конструктивные решения, которые отличаются от Debian, поэтому использование пакетов Ubuntu в Debian может не всегда работать.
Slebetman

1
Даже смешивать версии дистрибутивов Debian - плохая идея: wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian
stanri

Тогда есть Mint, который основан на Ubuntu, который основан на Debian ... :-)
DevSolar

1
Я не собираюсь говорить, что думаю, что это хорошая идея. В то же время я не понимаю, почему это такая ужасная идея. Я думаю, что эти проблемы можно преодолеть - просто за это нет реальной награды.
Эмори

9

Ну, есть alien( человек страница ), который может конвертировать между rpm, и debт.д., но я предполагаю , что фактические проблемы возникают от обработки зависимостей (различные имена пакетов для программного обеспечения), а также расположение файлов конфигурации.

Конечно, если вы имеете в виду, что оба типа пакетов могут исходить из самого дистрибутива, возможно, это можно обойти, но тогда зачем кому-то это делать ... (И вам все равно придется конвертировать все в один или другой , так как я не думаю, dpkgумеет читать базы данных rpmи наоборот.)


3

Да, это возможно, но это разрушает распределение.

Пакеты - это не просто формат, который легко переносится из одного формата в другой.

Примечание: инструменты установки пакетов должны быть портированы, потому что хотелось бы иметь централизованный список всех пакетов, версий, зависимостей, файлов конфигурации, сценариев до и после установки (если вы заменяете один пакет другим, в другом пакете формат, вы ожидаете, что сценарии удаления (старый формат) запускаются из новой системы пакетов.

Но дистрибутив и пакеты - это гораздо больше, чем формат пакетов. Например, для Debian: мы хотим поместить файлы в правильное место, мы хотим предоставить страницу руководства, нам нужны некоторые распространенные сценарии деамонизации, мы хотим, чтобы программа работала во многих архитектурах, в различных графических средах, чтобы пользователь мог найти Сам знакомый внутри дистрибутива также с новыми пакетами .packages.

В Debian мы хотим, чтобы пакеты легко собирались пользователями (из источников), чтобы можно было настроить некоторые важные (для него) пакеты. Это требует большого количества инфраструктуры, которую не может предоставить большинство вышестоящих авторов (автоматическая сборка и тестирование на различных архитектурах, причем время от времени). Кроме того, для Debian характерны требования лицензии, чтобы было проще форкнуть пакет или дистрибутив без необходимости проверять все пакеты.

В конце концов, дистрибутив осуществляется по согласованным пакетам, а не только по пакетам.


0

Да, и большинство дистрибутивов на основе .deb уже делают это, но ...

На Debian и связанных семействах, по крайней мере, у вас есть alien, что позволит вам устанавливать RPM-пакеты.

У вас будут те же проблемы, когда вы смешиваете пакеты, которые не предназначены для работы с вашим дистрибутивом, при установке внешних пакетов независимо от формата - если вы устанавливаете RPM в системе на основе DEB, этот RPM должен быть совместим с вашей системой , точно так же, как если бы вы устанавливали пакет RPM в системе на основе RPM, и это все же. Вы можете сделать это, но вы, вероятно, не хотите.


0

Да и нет. deb и rpm - это просто форматы. Вы можете поддерживать оба формата, но это бессмысленно. Пакеты обычно не сравнимы между дистрибутивами, особенно дистрибутивами, которые не основаны друг на друге.

Если бы во всех дистрибутивах были одинаковые требования к версиям, тогда весь дистрибутив был бы выбором пакета. Вы можете установить любой дистрибутив, перечислив пакеты.

Но дистрибутивы должны предоставлять программное обеспечение, которое они могут поддерживать. Если библиотека, которая заставляет ваше приложение работать, не поддерживается и сама требует библиотеки, которая была заменена чем-то другим, как вы решаете этот конфликт? Менеджер пакетов не может портировать код. Может быть несколько преемников, выбранных разными дистрибутивами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.