Quels sont les avantages / inconvénients de deb vs. rpm?

Pour toutes les raisons, j'ai toujours utilisé des dissortingbutions basées sur RPM (Fedora, Centos et actuellement openSUSE). J'ai souvent entendu dire que deb est meilleur que le nombre de tours par minute, mais lorsqu'on lui a demandé pourquoi, je n'ai jamais pu get une réponse cohérente (en général, je reçois des ranteries zélées et beaucoup de crachats).

Je comprends qu'il peut y avoir des raisons historiques, mais pour les dissortingbutions modernes utilisant les deux methods d'emballage différentes, est-ce que quelqu'un peut donner les mérites techniques (ou autres) de l'un contre l'autre?

La principale différence pour un mainteneur de package (je pense que ce serait «développeur» dans le jargon Debian) est la façon dont les méta-données de package et les scripts d'accompagnement se rejoignent.

Dans le monde RPM, tous vos packages (les RPM que vous gérez) se trouvent dans quelque chose comme ~/rpmbuild . En dessous, il y a le directory SPEC pour vos files de spécification, un directory SOURCES pour les archives tarballs source, les directorys RPMS et SRPMS pour append des RPM et des SRPM nouvellement créés et d'autres choses qui ne sont pas pertinentes maintenant.

Tout ce qui a trait à la création du RPM se trouve dans le file de spécification: quels correctifs seront appliqués, pré-et post-scripts possibles, métadonnées, changelog, tout. Toutes les archives tar sources et tous les patches de tous vos packages sont dans SOURCES.

Personnellement, j'aime le fait que tout se passe dans le file spec et que le spec-file est une entité séparée de l'archive source, mais je ne suis pas trop enthousiaste à l'idée d'avoir toutes les sources dans SOURCES. À mon humble avis, SOURCES obtient encombré assez rapidement et vous avez tendance à perdre la trace de ce qu'il y a dedans. Cependant, les avis diffèrent.

Pour les RPM, il est important d'utiliser la même tarball que celle du projet amont, jusqu'à l'horodatage. Généralement, il n'y a pas d'exceptions à cette règle. Les packages Debian requièrent également le même tarball qu'en amont, bien que la politique Debian exige que certains tarballs soient reconditionnés (merci, Umang).

Les packages Debian adoptent une approche différente. (Pardonnez toutes les erreurs ici: je suis beaucoup less expérimenté avec deb que je suis avec RPM.) Les files de développement des packages Debian sont contenus dans un directory par package.

Ce que je (pense à) aimer sur cette approche est le fait que tout est contenu dans un seul directory.

Dans le monde Debian, il est un peu plus courant de transporter des patches dans un package qui ne sont pas (encore) en amont. Dans le monde RPM (au less parmi les dérivés Red Hat), cela est mal vu. Voir "FedoraProject: Rester proche des projets en amont" .

De plus, Debian a une grande quantité de scripts capables d'automatiser une grande partie de la création d'un package. Par exemple, la création d'un package – simple – d'un programme Python setuptool, est aussi simple que la création de quelques files de méta-données et l'exécution de debuild . Cela dit, le file de spécifications pour un tel package en format RPM serait assez court et dans le monde RPM aussi, il y a beaucoup de choses qui sont automatisées ces jours-ci.

Beaucoup de gens comparent l'installation d'un logiciel avec apt-get à rpm -i , et disent donc mieux DEB. Cela n'a cependant rien à voir avec le format de file DEB. La vraie comparaison est dpkg vs rpm et aptitude / apt-* vs zypper / yum .

Du sharepoint vue d'un user, il n'y a pas beaucoup de différence dans ces outils. Les formats RPM et DEB ne sont que des files d'archive, avec des métadonnées attachées. Ils sont tous deux également arcane, ont des paths d'installation codés en dur (beurk!) Et ne diffèrent que par des détails subtils. Les deux dpkg -i et rpm -i je n'ai aucun moyen de déterminer comment installer les dependencies, sauf si elles sont spécifiées sur la command line.

En plus de ces outils, il existe une gestion de référentiel sous la forme apt-... ou zypper / yum . Ces outils téléchargent des référentiels, assurent le suivi de toutes les métadonnées et automatisent le téléchargement des dependencies. L'installation finale de chaque package est transmise aux outils de bas niveau.

Pendant longtime, apt-get a été supérieur dans le traitement de l'énorme quantité de métadonnées, alors que yum prendrait des années pour le faire. RPM a également souffert de sites tels que rpmfind où vous findiez plus de 10 packages incompatibles pour différentes dissortingbutions. Apt complètement caché ce problème pour les packages DEB car tous les packages ont été installés à partir de la même source.

À mon avis, zypper a vraiment comblé l'écart avec apt et il n'y a aucune raison d'avoir honte d'utiliser une dissortingbution basée sur RPM ces jours-ci. C'est aussi bien si ce n'est pas plus facile à utiliser avec le service de build openSUSE à scope de main pour un énorme package d'index compatible.

Du sharepoint vue d'un administrateur système, j'ai trouvé quelques différences mineures, principalement dans l'set d'outils dpkg / rpm plutôt que le format du package.

  • dpkg-divert permet d'avoir votre propre file pour déplacer celui qui provient d'un package. Cela peut être une bouée de sauvetage quand vous avez un programme qui search un file dans /usr ou /lib et ne prendra pas /usr/local pour une réponse. L'idée a été proposée, mais pour autant que je puisse dire non adoptée, en tr / min.

  • Lorsque j'ai administré les systèmes basés sur le *.rpmsave (il y a quelques années, peut-être que la situation s'était améliorée), rpm *.rpmsave toujours les files de configuration modifiés et modifiait mes personnalisations en *.rpmsave (IIRC). Cela a rendu mon système impossible à démarrer au less une fois. Dpkg me request quoi faire, en gardant mes personnalisations par défaut.

  • Un package binary rpm peut déclarer des dependencies sur des files plutôt que sur des packages, ce qui permet un contrôle plus fin qu'un package deb.

  • Vous ne pouvez pas installer un packageage de version N rpm sur un système avec la version N-1 des outils de rpm. Cela pourrait s'appliquer à dpkg aussi, sauf que le format ne change pas aussi souvent.

  • La database dpkg est constituée de files text. La database rpm est binary. Cela rend la database dpkg facile à étudier et à réparer. Par contre, tant que rien ne va mal, le rpm peut être beaucoup plus rapide (l'installation d'un deb nécessite la lecture de milliers de petits files).

  • Un package deb utilise des formats standard ( ar , tar , gzip ) pour que vous puissiez inspecter, et dans un pincement de pincement) des packages deb facilement. Les packages de Rpm ne sont pas aussi amicaux.

RPM:

  • 'Standardisé' (pas qu'il n'y a pas de spécification de deb)
  • Utilisé par de nombreuses dissortingbutions différentes (mais les packages d'un ne fonctionnent pas nécessairement sur un autre)
  • IIRC autorise les dependencies sur les files, pas seulement sur les packages

DEB:

  • Popularité croissante
  • Permet des recommandations et des suggestions (éventuellement plus récent RPM le permet aussi)

La question la plus importante est probablement le gestionnaire de packages (dpkg vs. yum vs. aptitude, etc.) plutôt que le format du package (les deux étant comparables).

Je pense que le biais ne vient pas du format du package, mais des incohérences qui existaient dans les repositorys de RedHat.

A l'époque où RedHat était une dissortingbution (avant les jours de RHEL, Fedora et Fedora Core), les gens se retrouvaient parfois dans "RPM Hell" ou "Dependency Hell". Cela s'est produit quand un référentiel se retrouvait avec un package qui avait des dependencies (plusieurs couches profondes, généralement) qui étaient mutuellement exclusives. Ou cela se produirait lorsque deux packages différents ont deux dependencies mutuellement exclusives. C'était un problème avec l'état du référentiel, pas avec le format du package. Le "RPM Hell" a laissé un dégoût pour les systèmes RPM parmi une certaine population d'users de Linux qui avaient été brûlés par le problème.

Comme plusieurs intervenants l'ont dit, ce n'est pas tant qu'un certain format d' emballage est clairement supérieur. Techniquement, ils peuvent être plus ou less comparables. De mon sharepoint vue, beaucoup de différences, et pourquoi les gens préfèrent l'un sur l'autre, ont à voir avec:

  • La philosophie de la design originale de l'emballage et le public cible
  • La taille de la communauté, et par extension, la qualité et la richesse des repositorys

Philosophie:

Dans le monde Ubuntu / Debian / Mint / …, les users s'attendent à ce que le package installé «fonctionne» une fois installé. Cela signifie que lors de l'installation, les packages doivent prendre soin de tout ce qui est nécessaire pour les faire fonctionner correctement, y compris mais sans s'y limiter:

  • mettre en place des tâches cron nécessaires ou facultatives
  • configurer des alternatives / alias
  • configuration de scripts de démarrage / arrêt
  • y compris tous les files de configuration nécessaires avec des valeurs par défaut qui ont du sens
  • conserver les anciennes versions des bibliothèques et append les bons liens vers les bibliothèques (.so) pour la rétrocompatibilité
  • un support propre pour les binarys multi-arch (32 et 64 bits) sur la même machine et ainsi de suite.

Dans le monde du RPM – certes, c'était la situation il y a plusieurs années, et cela s'est peut-être amélioré depuis – je me suis retrouvé à devoir exécuter des étapes supplémentaires (p. Ex. Chkconfig, permettant des jobs cron). Cela peut être correct pour les administrateurs système ou les personnes qui connaissent bien Unix, mais cela fait souffrir les débutants. Notez que ce n'est pas le format du packageage RPM lui-même qui empêche cela, c'est juste que de nombreux packages ne sont pas "complètement réalisés" du sharepoint vue d'un newbie.

Taille de la communauté, participation et richesse des repositorys:

Depuis que la communauté ubuntu / debian / mint / … est plus grande, de plus en plus de personnes sont impliquées dans les logiciels de conditionnement et de test. J'ai trouvé que la richesse et la qualité des repositorys étaient supérieures. En ubuntu, j'ai rarement, voire pas du tout, besoin de download la source et de la build. Quand je suis passé de Red Hat à Ubuntu à la maison, le repo RHEL typique comptait ~ 3000 packages, alors qu'en même time, ubuntu + universe + multiverse, disponible directement depuis n'importe quel miroir Canonical, comptait environ 30 000 packages. La plupart des packages que je recherchais au format RPM, n'étaient pas facilement accessibles par simple search et cliquaient dans le gestionnaire de packages. Ils ont dû passer à des référentiels alternatifs, searchr sur le site web du service rpmfind, etc. Dans la plupart des cas, plutôt que de résoudre le problème, j'ai brisé mon installation en ne limitant pas les dependencies qui peuvent ou ne peuvent pas être correctement mises à jour. J'ai frappé le phénomène de "l'enfer de la dépendance", tel que décrit ci-dessus par Shawn J. Goff.

En revanche dans Ubuntu / Debian j'ai trouvé que je n'ai presque jamais besoin de build à partir de la source. Aussi en raison de:

  • Le cycle de publication rapide Ubuntu (6 mois)
  • L'existence d'AAE entièrement compatibles qui fonctionnent hors de la boîte
  • Les référentiels source unique (tous hébergés par Canonical) pas besoin de searchr des repos alternatifs / complémentaires
  • Expérience user transparente à partir du clic pour exécuter

Je n'ai jamais eu à faire de compromis sur des versions plus anciennes de packages dont je me souciais, même quand ils n'étaient pas entretenus par des développeurs officiels (Canonical). Je n'ai jamais eu à quitter mon gestionnaire de packages GUI convivial préféré pour effectuer une search pratique par mot key, pour find et installer tout package que je voulais. De plus, j'ai installé plusieurs packages Debian (non Canonical) sur Ubuntu et ils ont très bien fonctionné, malgré cette compatibilité n'étant pas officiellement garantie.

Notez que ce n'est pas destiné à triggersr une guerre de feu, c'est juste partager mon expérience ayant utilisé les deux mondes en parallèle depuis plusieurs années (travail vs maison).

Il y a aussi la différence "philosophique" où dans les packages Debian vous pouvez poser des questions et ainsi bloquer le process d'installation. Le mauvais côté de ceci est que certains packages bloqueront vos mises à jour jusqu'à ce que vous répondiez. Le bon côté de ceci est, aussi comme une différence philosophique, sur les systèmes basés sur Debian, quand un package est installé, il est configuré (pas toujours comme vous le souhaitez) et en cours d'exécution. Pas sur les systèmes Redhat où vous devez créer / copyr depuis / usr / share / doc / * un file de configuration par défaut / model.

Une chose que j'aime dans RPM est l'ajout (récent?) De RPM delta. Cela permet une mise à jour plus facile, réduisant la bande passante requirejse.

Les DEB sont des files ar standard (avec plus d'archives standard à l'intérieur), les RPM sont des files binarys "propriétaires". Personnellement, je pense que le premier est plus pratique.

Juste deux choses que je peux penser du haut de ma tête. Les deux sont très comparables. Les deux ont d'excellents outils pour l'emballage. Je ne pense pas qu'il y ait tant de mérites l'un sur l'autre ou vice versa.

Le service de construction openSUSE (OBS) et zypper sont quelques raisons pour lesquelles je préfère RPM over deb d'un sharepoint vue packager et user. Zypper a parcouru un long path et est assez rapide. OBS, même si elle peut gérer debs, est vraiment bien quand il s'agit d'emballer des rpms pour diverses plates-forms telles que openSUSE, SLE, RHEL, centos, fedora, mandriva, etc.

Les packages Debian peuvent inclure une taille installée , mais je ne crois pas que les RPM aient un champ équivalent. Il peut être calculé en fonction des files inclus dans le package, mais ne peut pas être utilisé en raison des actions pouvant être effectuées dans les scripts pré / post-installation.

Voici une très bonne reference pour la comparaison de certaines fonctionnalités spécifiques disponibles pour chaque format d'emballage spécifique: http://debian-br.sourceforge.net/txt/alien.htm (selon le server web, ce document est assez ancien : Last-Modified: Sun, 15 Oct 2000 donc cela pourrait ne pas être la meilleure reference.)

Pour les packages Debian, il existe un grand nombre de scripts d'aide, un manuel de règles cohérent et au less une façon de faire presque tout. Les dependencies sont très bien gérées et peuvent être définies en très bonne granularité. La reconstruction des packages est très simple avec les packages debian et bien supscope par les outils disponibles.

Lancer la search Google pour

  1. rpm duplicate packages
  2. packages dupliqués dpkg

Lisez les pages qui reviennent. Très révélateur que vous pouvez avoir une database RPM foiré avec des packages en double, alors qu'aucun cas de ce genre ne se produit avec dpkg.