каковы плюсы / минусы deb против rpm?

<p>по любым причинам я всегда использовал дистрибутивы на основе rpm (fedora, centos и в настоящее время opensuse). я часто слышал, что там говорится, что deb лучше, чем rpm, но когда его спрашивают, почему, никогда не удавалось получить внятный ответ (обычно вместо этого получают ревностные разглагольствования и обильные плевки).</p><p>я понимаю, что могут быть некоторые исторические причины, но для современных дистрибутивов, использующих два различных метода упаковки, может ли кто-нибудь дать технические (или другие) преимущества одного против другого?</p>

<p>основным отличием для сопровождающего пакета (я думаю, что это будет "разработчик" в debian lingo) является способ объединения метаданных пакета и сопутствующих сценариев.</p><p>в мире rpm все ваши пакеты (поддерживаемые вами rpm) находятся в чем-то вроде <code>~/rpmbuild</code>. внизу есть каталог <code>spec</code> для ваших spec-файлов, каталог <code>sources</code> для архивов исходного кода, каталоги <code>rpms</code> и <code>srpms</code> для размещения вновь созданных rpm и srpms, и некоторые другие вещи, которые не имеют отношения сейчас.</p><p><em> все </em>, что связано с тем, как будет создан rpm, находится в spec-файле: какие патчи будут применены, возможные пре- и пост-скрипты , метаданные, журнал изменений, все. все исходные архивы и все патчи <em> всех ваших пакетов </em> находятся в источниках.</p><p>теперь лично мне нравится тот факт, что все идет в spec-файл, и что spec-файл является отдельной сущностью от исходного архива, но я не слишком рад иметь <em> все </em> источники в источниках. имхо, источники довольно быстро загромождаются, и вы склонны терять представление о том, что там находится. однако мнения расходятся.</p><p>для rpm важно использовать <em> точный </em> тот же тарбол, что и вышедший проект, до отметки времени. как правило, нет никаких исключений из этого правила. пакеты debian также требуют того же tarball, что и upstream, хотя политика debian требует перепаковки некоторых tarballs (спасибо, umang).</p><p>пакеты debian используют другой подход. (простите за любые ошибки: у меня гораздо меньше опыта работы с deb, чем с rpm.) файлы разработки пакетов debian содержатся в каталоге для каждого пакета.</p><p>что (я думаю) нравится в этом подходе, так это то, что все содержится в одном каталоге.</p><p>в мире debian более приемлемо использовать патчи в пакете, который (пока) не является апстримом. в мире rpm (по крайней мере, среди производных red hat) это осуждается. смотрите <a href="http://fedoraproject.org/wiki/staying\_close\_to\_upstream\_projects">"fedoraproject: оставаясь ближе к проектам, связанным с исходным кодом"</a> .</p><p>кроме того, debian имеет огромное количество сценариев, которые способны автоматизировать огромную часть процесса создания пакета. например, создать простой пакет setuptool'ed python) так же просто, как создать пару файлов метаданных и запустить <code>debuild</code>. spec-файл для такого пакета в формате rpm будет довольно коротким, и в мире rpm тоже есть много вещей, которые в наши дни автоматизированы.</p>

<p>многие люди сравнивают установку программного обеспечения с <code>apt-get</code> до <code>rpm -i</code>, и поэтому лучше скажи deb. это, однако, не имеет ничего общего с форматом файла deb. реальное сравнение - <code>dpkg</code> vs <code>rpm</code> и <code>aptitude</code>/<code>apt-*</code> vs <code>zypper</code>/<code>yum</code>.</p><p>с точки зрения пользователя, в этих инструментах нет большой разницы. форматы rpm и deb - это просто архивные файлы, к которым прикреплены некоторые метаданные. они оба в равной степени таинственны, имеют жестко запрограммированные пути установки (чёрт!) и отличаются только тонкими деталями. обе <code>dpkg -i</code> а также <code>rpm -i</code> не имеют возможности выяснить, как установить зависимости, кроме случаев, когда они указаны в командной строке.</p><p>помимо этих инструментов, существует управление хранилищем в виде <code>apt-...</code> или <code>zypper</code>/<code>yum</code>. эти инструменты загружают репозитории, отслеживают все метаданные и автоматизируют загрузку зависимостей. окончательная установка каждого отдельного пакета передается инструментам низкого уровня.</p><p>надолго, <code>apt-get</code> превосходно справился с обработкой огромного количества метаданных действительно быстро, в то время как <code>yum</code> потребовалось бы много времени, чтобы это сделать. rpm также страдает от таких сайтов, как rpmfind, где вы найдете более 10 несовместимых пакетов для разных дистрибутивов. <code>apt</code> полностью скрыл эту проблему для пакетов deb, поскольку все пакеты были установлены из одного источника.</p><p>на мой взгляд, <code>zypper</code> действительно сократил разрыв до <code>apt</code>, и в наши дни нет причин стыдиться использования дистрибутива на основе rpm. это так же хорошо, если не проще использовать с доступным сервисом сборки opensuse для огромного совместимого индекса пакета.</p>

<p>с точки зрения системного администратора, я обнаружил несколько незначительных отличий, в основном в наборе инструментов dpkg/rpm, а не в формате пакета.</p><ul> <li> <p><code>dpkg-divert</code> позволяет сделать так, чтобы ваш собственный файл заменил файл, полученный из пакета. это может быть спасением, если у вас есть программа, которая ищет файл в <code>/usr</code> или <code>/lib</code> и не возьму <code>/usr/local</code> для ответа. <a href="http://rpm5.org/cvs/tktview?tn=5">идея была предложена, но, насколько я могу судить, не принята, в оборотах.</a> </p> </li> <li> <p>когда я в последний раз управлял системами на основе rpm (что, как известно, было много лет назад, возможно, ситуация улучшилась), rpm всегда перезаписывал измененные файлы конфигурации и перемещал мои настройки в <code>*.rpmsave</code> (iirc). это сделало мою систему не загружаемой хотя бы один раз. dpkg спрашивает меня, что делать, с настройками по умолчанию.</p> </li> <li> <p>двоичный пакет rpm может объявлять зависимости от файлов, а не от пакетов, что обеспечивает более точное управление, чем пакет deb.</p> </li> <li> <p>вы не можете установить пакет rpm версии в системе с версией n-1 инструментов rpm. это может относиться и к dpkg, за исключением того, что формат меняется не так часто.</p> </li> <li> <p>база данных dpkg состоит из текстовых файлов. база данных rpm является двоичной. это позволяет легко исследовать и восстанавливать базу данных dpkg. с другой стороны, до тех пор, пока ничего не происходит не так, rpm может быть намного быстрее (установка deb требует чтения тысяч маленьких файлов).</p> </li> <li> <p>пакет deb использует стандартные форматы (<code>ar</code>, <code>tar</code>, <code>gzip</code>), так что вы можете легко и просто проверить пакеты deb. пакеты rpm не так дружелюбны.</p> </li> </ul>

<p>rpm:</p><ul> <li>"стандартизировано" (не то, чтобы не было спецификации deb)</li> <li>используется многими различными дистрибутивами (но пакеты из одного не обязательно работают в другом)</li> <li>iirc допускает зависимости от файлов, а не только от пакетов</li> </ul><p>deb:</p><ul> <li>растущая популярность</li> <li>позволяет рекомендации и предложения (возможно, более новые rpm также позволяет)</li> </ul><p>вероятно, более важный вопрос - это менеджер пакетов (dpkg против yum против aptitude и т.д.), а не формат пакета (так как оба сопоставимы).</p>

<p>как сказали несколько респондентов, это не так, что определенный формат пакета <em> </em> явно лучше. технически они могут быть более или менее сопоставимы. с моей точки зрения, многие различия и то, почему люди предпочитают одно другому, связаны с:</p><ul> <li>философия оригинального дизайна упаковки и целевая аудитория</li> <li>размер сообщества и, соответственно, качество и богатство хранилищ</li> </ul><p><strong>философия:</strong></p><p>в мире ubuntu/debian/mint/... пользователи ожидают, что установленный пакет будет "просто работать" после его установки. это означает, что во время установки ожидается, что пакеты позаботятся обо всем, что необходимо для правильной работы, в том числе:</p><ul> <li>настройка необходимых или дополнительных заданий cron</li> <li>настройка альтернатив/псевдонимов</li> <li>настройка сценариев запуска/выключения</li> <li>включая все необходимые файлы конфигурации со значениями по умолчанию, которые имеют смысл</li> <li>сохранение старых версий библиотек и добавление верных символических ссылок в библиотеки (.so) для обратной совместимости</li> <li>чистая поддержка многоархивовых (32 и 64-битных) двоичных файлов на одной машине и так далее.</li> </ul><p>в мире rpm - по общему признанию, это было ситуацией несколько лет назад, и с тех пор она могла улучшиться - я обнаружил, что должен выполнить дополнительные шаги (например, chkconfig, включение заданий cron), чтобы фактически заставить пакеты действительно работать. это может быть хорошо для системных администраторов или людей, которые разбираются в unix, но это заставляет страдать новичков. обратите внимание, что дело не в том, что сам формат пакета rpm предотвращает это, а в том, что многие пакеты де-факто не <em> "полностью выполнены" </em> из перспектива новичка.</p><p><strong>размер сообщества, участие и богатство репозиториев:</strong></p><p>так как сообщество ubuntu/debian/mint/... стало больше, все больше людей занимаются упаковкой и тестированием программного обеспечения. я обнаружил, что богатство и качество хранилищ превосходно. в ubuntu мне редко, если вообще нужно, нужно скачивать исходники и строить из них. когда я переключился с red hat на ubuntu дома, в типичном репозитории rhel было ~ 3000 пакетов, в то же время ubuntu + universe + multiverse, доступный напрямую из любого зеркала canonical, имел ~ 30 000 пакетов (примерно в 10 раз). большинство пакетов, которые я искал в формате rpm, не были легко доступны с помощью простого поиска и щелчка в диспетчере пакетов. им потребовалось переключиться на альтернативные репозитории, выполнить поиск на веб-сайте службы rpmfind и т.д. это, в большинстве случаев, вместо того, чтобы решить проблему, сломало мою установку из-за невозможности ограничить то, какие зависимости могут или не могут быть обновлены корректно. я столкнулся с феноменом "ада зависимости", как описано выше шоном дж. гоффом.</p><p>в отличие от ubuntu/debian, я обнаружил, что мне почти никогда не нужно строить из исходного кода. также из-за:</p><ul> <li>быстрый релиз (6 месяцев) в ubuntu</li> <li>существование <em> полностью совместимых </em> ppa, которые работают из коробки</li> <li>репозитории с одним источником (все они размещены в canonical) не нужно искать альтернативные/дополнительные репозитории</li> <li>удобный пользовательский опыт от клика до запуска</li> </ul><p>мне никогда не приходилось идти на компромисс с более старыми версиями пакетов, которые меня волновали, даже если они не поддерживались официальными (canonical) разработчиками. мне никогда не приходилось оставлять свой любимый дружественный графический менеджер пакетов для удобного поиска по ключевым словам, чтобы найти и установить любой нужный мне пакет. кроме того, несколько раз я устанавливал пакеты debian (не canonical) в ubuntu, и они работали просто отлично, несмотря на то, что эта совместимость официально не гарантирована.</p><p>обратите внимание, что это не предназначено для того, чтобы начать огненную войну, я просто делюсь своим опытом использования обоих миров параллельно в течение нескольких лет (работа против дома).</p>

<p>я думаю, что смещение происходит не от формата пакета, а от несоответствий, которые существовали в репозиториях redhat.</p><p>в те времена, когда redhat был дистрибутивом (до появления rhel, fedora и fedora core), люди иногда оказывались в "rpm hell" или "ад зависимостей". это происходило, когда хранилище получало пакет с зависимостями (обычно на несколько уровней), которые были взаимоисключающими. или это может произойти, когда два разных пакета имеют две взаимоисключающие зависимости. это была проблема с состоянием хранилища, а не с форматом пакета. "rpm hell" оставил отвращение к rpm-системам среди некоторой части пользователей linux, которые были сожжены этой проблемой.</p>

<p>существует также "философское" различие, когда в пакетах debian вы можете задавать вопросы и тем самым блокировать процесс установки. плохая сторона этого в том, что некоторые пакеты будут блокировать ваши обновления, пока вы не ответите. хорошая сторона этого, также как и философское отличие, в системах на основе debian: когда пакет установлен, он настроен (не всегда так, как вам хотелось бы) и работает. не в системах на основе redhat, где вам нужно создать/скопировать из/usr/share/doc/* файл конфигурации по умолчанию/шаблона.</p>

<p>в rpm мне нравится одно (недавнее?) добавление дельта-rpm. это позволяет легче обновлять, уменьшая требуемую пропускную способность.</p><p>deb - это стандартные ar-файлы (с более стандартными архивами внутри), rpm - это "проприетарные" двоичные файлы. я лично считаю, что первое удобнее.</p><p>всего лишь две вещи, которые я могу придумать. оба очень сопоставимы. оба имеют отличные инструменты для упаковки. я не думаю, что есть так много достоинств для одного над другим или наоборот.</p>

<p>пакеты debian могут включать <a href="http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-installed-size">установленный размер</a> , но я не верю, что rpm имеют эквивалентное поле. он может быть рассчитан на основе файлов, включенных в пакет, но на него также нельзя полагаться из-за действий, которые можно выполнить в сценариях до/после установки.</p><p>вот довольно хороший справочник для сравнения некоторых специфических функций, доступных для каждого конкретного формата упаковки: <a href="http://debian-br.sourceforge.net/txt/alien.htm">http://debian-br.sourceforge.net/txt/alien.htm</a> (в соответствии с интернетом сервер, этот документ довольно старый: <em> последнее изменение: воскресенье, 15 октября 2000 г. </em>, так что это может быть не лучший справочник.)</p>

<p>opensuse build service (obs) и zypper - это две причины, по которым я предпочитаю rpm, а не deb с точки зрения упаковщика и пользователя. зиппер прошел долгий путь и довольно чертовски быстр. obs, хотя и может обрабатывать файлы debs, действительно хорош, когда дело доходит до упаковки rpms для различных платформ, таких как opensuse, sle, rhel, centos, fedora, mandriva и т.д.</p>

<p>ни один из других ответов не касается того, как следующие три <em>фундаментальные</em> различия имеют реальные последствия:</p><ol> <li><code>deb</code> файлы - это в основном <code>ar</code> архивы, содержащие два сжатых архива</li> <li>пакеты <code>deb</code> и система <code>dpkg</code> хранят ваши сценарии сопровождающего в виде отдельных файлов.</li> <li><code>dpkg</code> и <code>rpm</code> запускают сценарии сопровождающего в другом порядке во время обновлений.</li> </ol><p>вместе эти различия сделали для меня <em>намного легче</em> решение проблем, вызванных плохими пакетами, и заставить пакеты вести себя так, как мне нужно, в системах на основе <code>deb</code>, чем в <code>rpm</code>-системы, <em>оба</em> как системный администратор <em>и</em> как упаковщик.</p><p>из-за # 1, если мне нужно изменить файл <code>deb</code>, я могу тривиально открыть его, внести любые изменения и перепаковать его <em>используя стандартные инструменты, которые существуют в большинстве систем</em> знак равно.</p><p>это включает в себя изменение/добавление/удаление любых зависимостей или любых файлов пакета, или любого из сценариев сопровождающего, или изменение версии или имени пакета.</p><p>из-за # 2, если есть проблема в сценариях "удаления", установленных пакетом <em>который уже установлен</em>, я могу тривиально исправить это, <em>используя стандартные инструменты, которые существуют в любой системе</em>.</p><p>из-за # 3 я могу сделать некоторые из этих исправлений, просто выпустив новую версию моего пакета, потому что во время обновления <code>dpkg</code> запускает сценарий "pre-install" новой версии пакета <em>до</em> скрипт "post-remove" старой версии.</p><p>это означает, что площадь поверхности для нарушения "принципа восстанавливаемости" меньше в пакетах <code>deb</code>: больше ошибок в более ранней версии пакета может быть исправлено с помощью новой версии.</p><p>а поскольку модифицировать пакет очень просто - фактические затраты на конкретный пакет и затраты на знания крошечные - он доступен большему количеству людей и требует меньше времени и усилий с файлами <code>deb</code>.</p>

<p>для пакетов debian существует большой набор вспомогательных сценариев, согласованное руководство по политике и, по крайней мере, один способ сделать практически все. зависимости обрабатываются очень хорошо и могут быть определены с очень хорошей детализацией. перекомпоновка пакетов очень проста с пакетами debian и хорошо поддерживается доступными инструментами.</p>

<p>перейти поиск google для</p><ol> <li>повторяющиеся пакеты rpm</li> <li>двойные пакеты dpkg</li> </ol><p>читайте страницы, которые возвращаются. очень показательно, что вы можете испортить базу данных rpm с дублирующимися пакетами, в то время как с dpkg такого не происходит.</p>