Основным отличием для сопровождающего пакета (я думаю, что это будет «разработчик» в Debian Lingo) является способ объединения метаданных пакета и сопутствующих сценариев.
В мире RPM все ваши пакеты (поддерживаемые вами RPM) расположены примерно так ~/rpmbuild
. Внизу есть SPEC
каталог для ваших spec-файлов, SOURCES
каталог для исходных архивов RPMS
и SRPMS
каталогов, в которые можно помещать вновь созданные RPM и SRPM, а также некоторые другие вещи, которые сейчас не актуальны.
Все, что связано с тем, как будет создаваться RPM, находится в spec-файле: какие патчи будут применены, возможные пре- и пост-скрипты, метаданные, журнал изменений, все. Все исходные архивы и все патчи всех ваших пакетов находятся в SOURCES.
Теперь лично мне нравится тот факт, что все идет в spec-файле, и что spec-файл является отдельной сущностью от исходного архива, но я не слишком восторгаюсь наличием всех источников в SOURCES. ИМХО, ИСТОЧНИКИ довольно быстро загромождаются, и вы склонны терять представление о том, что там находится. Однако мнения расходятся.
Для РПХ важно использовать точно такие же тарболл как один вверх по течению релизов проекта, вплоть до временной отметки. Как правило, нет никаких исключений из этого правила. Пакеты Debian также требуют того же tarball, что и upstream, хотя политика Debian требует, чтобы некоторые tarballs были переупакованы (спасибо, Umang).
Пакеты Debian используют другой подход. (Прошу прощения за любые ошибки: у меня гораздо меньше опыта работы с deb, чем с RPM.) Файлы разработки пакетов Debian содержатся в каталоге для каждого пакета.
Что (я думаю) нравится в этом подходе, так это то, что все содержится в одном каталоге.
В мире Debian более приемлемо использовать патчи в пакете, который (пока) не является апстримом. В мире RPM (по крайней мере, среди производных Red Hat) это осуждается. Смотрите "FedoraProject: оставаясь ближе к проектам, связанным с добычей" .
Кроме того, Debian имеет огромное количество сценариев, которые способны автоматизировать огромную часть процесса создания пакета. Например, создать - простой - пакет программы Python, настроенной с помощью setuptool, так же просто, как создать пару файлов метаданных и запустить их debuild
. Тем не менее, spec-файл для такого пакета в формате RPM будет довольно коротким, и в мире RPM тоже есть много вещей, которые в наши дни автоматизированы.
debian
каталог существует в каталоге, в который был извлечен исходный код, и Debian очень ценит концепцию нетронутого исходного кода tarball. Когда создается пакет с исходным кодом, есть три (два для нативных пакета) файла, которые вместе называются пакетом с исходным кодом: архив с исходным кодом (желательно нетронутый, политика Debian требует переупаковки некоторых проектов), архив с каталогом debian для каталога новый формат 3.0, (diff для старого формата 1.0) и .dsc..diff.gz
или в.debian.tar.gz
файлах исходного пакета, хотя этотdebian
каталог находится внутри дерева исходного кода, когда извлекается исходный пакет. Кстати, когда политика не требует переупаковки, MD5 тарбола должен совпадать с тарболлом вышестоящего. Также, чтобы уточнить, патчи, сделанные мэйнтейнером для исходного кода, хранятся в каталоге debian (исходный формат 3.0) и в.diff.gz
(формат 1.0).Многие люди сравнивают установки программного обеспечения с
apt-get
кrpm -i
и , следовательно , сказать , DEB лучше. Это, однако, не имеет ничего общего с форматом файла DEB. Реальное сравнениеdpkg
vsrpm
иaptitude
/apt-*
vszypper
/yum
.С точки зрения пользователя, в этих инструментах нет большой разницы. Форматы RPM и DEB - это просто архивные файлы, к которым прикреплены некоторые метаданные. Они оба одинаково загадочны, имеют жестко запрограммированные пути установки (чёрт!) И отличаются только тонкими деталями. И то,
dpkg -i
и другоеrpm -i
не может понять, как установить зависимости, кроме случаев, когда они указаны в командной строке.Помимо этих инструментов, есть управление хранилищем в форме
apt-...
илиzypper
/yum
. Эти инструменты загружают репозитории, отслеживают все метаданные и автоматизируют загрузку зависимостей. Окончательная установка каждого отдельного пакета передается инструментам низкого уровня.В течение долгого времени
apt-get
он превосходно обрабатывал огромное количество метаданных очень быстро, хотя наyum
это ушли бы целые годы. RPM также страдает от таких сайтов, как rpmfind, где вы найдете более 10 несовместимых пакетов для разных дистрибутивов.Apt
полностью скрыл эту проблему для пакетов DEB, потому что все пакеты были установлены из одного источника.На мой взгляд,
zypper
это действительно сократило разрывapt
и нет никаких оснований стыдиться использования дистрибутива на основе RPM в наши дни. Это так же хорошо, если не проще использовать с доступным сервисом сборки openSUSE для огромного совместимого индекса пакета.источник
С точки зрения системного администратора, я обнаружил несколько незначительных отличий, в основном в наборе инструментов dpkg / rpm, а не в формате пакета.
dpkg-divert
позволяет иметь собственный файл, заменяющий файл, полученный из пакета. Это может быть спасением, если у вас есть программа, которая ищет файл/usr
или/lib
не принимает/usr/local
ответ. Идея была предложена, но, насколько я могу судить, не принята, в оборотах.Когда я в последний раз управлял системами на основе rpm (что, как известно, было много лет назад, возможно, ситуация улучшилась), rpm всегда перезаписывал измененные файлы конфигурации и перемещал мои настройки в
*.rpmsave
(IIRC). Это сделало мою систему не загружаемой хотя бы один раз. Dpkg спрашивает меня, что делать, с настройками по умолчанию.Двоичный пакет rpm может объявлять зависимости от файлов, а не пакетов, что обеспечивает более точное управление, чем пакет deb.
Вы не можете установить пакет rpm версии в системе с версией N-1 инструментов rpm. Это может относиться и к dpkg, за исключением того, что формат меняется не так часто.
База данных dpkg состоит из текстовых файлов. База данных rpm является двоичной. Это позволяет легко исследовать и восстанавливать базу данных dpkg. С другой стороны, до тех пор, пока ничего не происходит не так, rpm может быть намного быстрее (установка deb требует чтения тысяч маленьких файлов).
Пакет Деб использует стандартные форматы (
ar
,tar
,gzip
) , так что вы можете проверить, и в крайнем случае подстройке) пакетов DEB легко. Пакеты Rpm не так дружелюбны.источник
*.rpmnew
вместо того, чтобы забивать ваш измененный - по крайней мере, на openSUSE.rpm2cpio.sh
для тех, кто склонен.deb
формате, которое я помню, было, когдаdata.tar.gz
сталоdata.tar.xz
, когда старыеdpkg
перестали иметь возможность открывать новые пакеты.RPM:
DEB:
Вероятно, более важный вопрос - это менеджер пакетов (dpkg против yum против aptitude и т. Д.), А не формат пакета (так как оба сопоставимы).
источник
Как сказали несколько респондентов, определенный формат пакета явно не так хорош. Технически они могут быть более или менее сопоставимы. С моей точки зрения, многие различия и то, почему люди предпочитают одно другому, связаны с:
Философия:
В мире Ubuntu / Debian / Mint / ... пользователи ожидают, что установленный пакет будет «просто работать» после его установки. Это означает, что во время установки ожидается, что пакеты позаботятся обо всем, что необходимо для правильной работы, в том числе:
В мире rpm - по общему признанию, это была ситуация несколько лет назад, и с тех пор она могла улучшиться - я обнаружил, что должен выполнить дополнительные шаги (например, chkconfig, включение заданий cron), чтобы фактически заставить пакеты действительно работать. Это может быть хорошо для системных администраторов или людей, которые хорошо знакомы с Unix, но это заставляет страдать новичков. Обратите внимание: дело не в том, что сам формат пакета RPM предотвращает это, а в том, что многие пакеты де-факто не «полностью выполнены» с точки зрения новичка.
Размер сообщества, участие и богатство хранилищ:
Так как сообщество ubuntu / debian / mint / ... стало больше, все больше людей занимаются упаковкой и тестированием программного обеспечения. Я обнаружил, что богатство и качество хранилищ превосходно. В Ubuntu мне редко, если вообще нужно, нужно скачивать исходники и строить из них. Когда я переключился с Red Hat на Ubuntu дома, в типичном репозитории RHEL было ~ 3000 пакетов, в то же время ubuntu + universe + multiverse, доступный напрямую из любого зеркала Canonical, имел ~ 30 000 пакетов (примерно в 10 раз). Большинство пакетов, которые я искал в формате RPM, не были легко доступны с помощью простого поиска и щелчка в диспетчере пакетов. Они требовали перехода на альтернативные репозитории, поиска на веб-сайте службы rpmfind и т. Д. Это, в большинстве случаев, а не решение проблемы, сломал мою установку, не сумев ограничить то, что зависимости могут или не могут быть обновлены правильно. Я столкнулся с феноменом «ада зависимости», как описано выше Шоном Дж. Гоффом.
В отличие от Ubuntu / Debian, я обнаружил, что мне почти никогда не нужно строить из исходного кода. Также из-за:
Мне никогда не приходилось идти на компромисс с более старыми версиями пакетов, которые меня волновали, даже если они не поддерживались официальными (Canonical) разработчиками. Мне никогда не приходилось оставлять свой любимый дружественный графический менеджер пакетов для удобного поиска по ключевым словам, чтобы найти и установить любой нужный мне пакет. Кроме того, несколько раз я устанавливал пакеты Debian (не Canonical) в Ubuntu, и они работали просто отлично, несмотря на то, что эта совместимость официально не гарантирована.
Обратите внимание, что это не предназначено для того, чтобы начать пламенную войну, я просто делюсь своим опытом использования обоих миров параллельно в течение нескольких лет (работа против дома).
источник
Я думаю, что смещение происходит не из-за формата пакета, а из-за несоответствий, которые существовали в репозиториях RedHat.
В те времена, когда RedHat был дистрибутивом (до появления RHEL, Fedora и Fedora Core), люди иногда оказывались в «RPM Hell» или «Hell зависимостей». Это происходило, когда хранилище получало пакет с зависимостями (обычно на несколько уровней), которые были взаимоисключающими. Или это может произойти, когда два разных пакета имеют две взаимоисключающие зависимости. Это было проблемой с состоянием хранилища, а не с форматом пакета. «RPM Hell» оставил отвращение к RPM-системам среди некоторой части пользователей Linux, которые были сожжены этой проблемой.
источник
Существует также «философское» различие, когда в пакетах Debian вы можете задавать вопросы и тем самым блокировать процесс установки. Плохая сторона этого в том, что некоторые пакеты будут блокировать ваши обновления, пока вы не ответите. Хорошая сторона этого, также как и философское отличие, в системах на основе Debian: когда пакет установлен, он настроен (не всегда так, как вам хотелось бы) и работает. Не в системах на основе Redhat, где вам нужно создать / скопировать из / usr / share / doc / * файл конфигурации по умолчанию / шаблона.
источник
В RPM мне нравится одно (недавнее?) Добавление дельта-RPM. Это позволяет легче обновлять, уменьшая требуемую пропускную способность.
DEB - это стандартные ar-файлы (с более стандартными архивами внутри), RPM - это «проприетарные» двоичные файлы. Я лично считаю, что первое удобнее.
Всего лишь две вещи, которые я могу придумать. Оба очень сопоставимы. Оба имеют отличные инструменты для упаковки. Я не думаю, что есть так много достоинств одного над другим или наоборот.
источник
rpm2cpio.sh
скрипт.OpenSUSE Build Service (OBS) и zypper - это две причины, по которым я предпочитаю RPM, а не deb с точки зрения упаковщика и пользователя. Зиппер прошел долгий путь и довольно чертовски быстр. OBS, хотя и может обрабатывать файлы debs, действительно хорош, когда речь идет об упаковке rpms для различных платформ, таких как openSUSE, SLE, RHEL, centos, fedora, mandriva и т. Д.
источник
Пакеты Debian могут включать установленный размер , но я не думаю, что RPM имеют эквивалентное поле. Он может быть рассчитан на основе файлов, включенных в пакет, но на него также нельзя полагаться из-за действий, которые можно выполнить в сценариях до / после установки.
Вот довольно хороший справочник для сравнения некоторых специфических функций, доступных для каждого конкретного формата упаковки: http://debian-br.sourceforge.net/txt/alien.htm (согласно веб-серверу, этот документ довольно старый : Последнее изменение: Солнце, 15 октября 2000 г., так что это может быть не лучшим справочником.)
источник
Для пакетов Debian есть большой набор вспомогательных сценариев, согласованное руководство по политике и, по крайней мере, один способ сделать практически все. Зависимости обрабатываются очень хорошо и могут быть определены с очень хорошей детализацией. Перекомпоновка пакетов очень проста с пакетами Debian и хорошо поддерживается доступными инструментами.
источник
Ни один из других ответов не касается того, как следующие три фундаментальные различия имеют реальные последствия:
deb
файлы в основном простоar
архивы, содержащие два сжатых архиваdeb
пакеты иdpkg
система хранят ваши скрипты сопровождающего как отдельные файлыdpkg
иrpm
запускайте сценарии сопровождающего в другом порядке во время обновлений.Вместе эти различия значительно упростили мне решение проблем, вызванных плохими пакетами, и привели к тому, что пакеты ведут себя так, как мне нужно, на
deb
системах наrpm
основе, чем на системах, как в качестве системного администратора, так и в качестве упаковщика ,Из-за # 1, если мне нужно изменить
deb
файл, я могу тривиально открыть его, внести любые изменения и переупаковать его, используя стандартные инструменты, которые существуют в большинстве систем .Это включает в себя изменение / добавление / удаление любых зависимостей или любых файлов пакета, или любых сценариев сопровождающего, или изменение версии или имени пакета.
Из-за # 2, если есть проблема в сценариях «удаления», установленных пакетом, который уже установлен , я могу тривиально исправить это, используя стандартные инструменты, которые существуют в любой системе .
Из-за # 3 я могу сделать некоторые из этих исправлений, просто выпустив новую версию моего пакета, потому что во время обновления
dpkg
запускает сценарий «pre-install» новой версии пакета перед сценарием «post-remove» старая версия.Это означает, что площадь поверхности для нарушения «принципа восстанавливаемости» меньше в
deb
пакетах: больше ошибок в более ранней версии пакета может быть исправлено из новой версии.А поскольку модифицировать пакет очень просто - фактические затраты на конкретный пакет и затраты на знания крошечные - он доступен большему количеству людей и требует меньше времени и усилий с
deb
файлами.источник