Содержание статьи

В OpenSUSE работа с RPM-пакетами строится вокруг двух инструментов: zypper и rpm. Оба используют один формат пакетов, но решают разные задачи. Zypper управляет репозиториями, проверяет подписи, автоматически подбирает зависимости и отслеживает обновления. Rpm предназначен для низкоуровневых операций и прямого контроля над установленными файлами.
На практике пользователи часто сталкиваются с ситуациями, когда пакет доступен только в виде локального .rpm файла, либо требуется установить программное обеспечение из стороннего источника. В таких случаях важно понимать, как OpenSUSE обрабатывает зависимости, что происходит при конфликте версий и почему одна и та же установка через zypper и rpm может дать разный результат.
Отдельного внимания заслуживает проверка GPG-подписей и доверие к репозиториям. OpenSUSE по умолчанию блокирует установку неподписанных пакетов через zypper, тогда как rpm позволяет обойти это ограничение вручную. Непонимание этого механизма часто приводит к ошибкам установки или отказу системы принимать пакет.
Материал ориентирован на практическое использование: установка локальных RPM, обновление уже установленных пакетов, анализ зависимостей и устранение типовых ошибок. Все примеры и рекомендации применимы к актуальным версиям OpenSUSE Leap и Tumbleweed.
OpenSUSE: установка RPM-пакетов через zypper и rpm

В OpenSUSE формат RPM обслуживается менеджером пакетов zypper, который работает поверх системы управления зависимостями libzypp. При установке RPM через zypper система анализирует версии библиотек, конфликтующие пакеты и источники обновлений. Команда zypper install ./package.rpm применяется для локальных файлов и запускает тот же механизм проверки, что и при работе с репозиториями.
Если RPM доступен в подключённом источнике, zypper использует метаданные репозитория для подбора совместимой версии. Это позволяет избежать ситуаций, когда пакет установлен, но не получает обновления. Для проверки источников применяется zypper lr -u, а для обновления списка пакетов – zypper refresh.
Инструмент rpm выполняет прямую установку без анализа внешних зависимостей. Команда rpm -i package.rpm добавляет новый пакет, а rpm -U package.rpm обновляет существующий. При отсутствии требуемых библиотек установка завершится ошибкой, которую придётся устранять вручную через поиск недостающих пакетов.
Проверка подписи выполняется автоматически при работе с zypper. Для rpm требуется явное указание параметров, например rpm —checksig package.rpm. Отключение проверки подписи возможно, но повышает риск установки повреждённых или подменённых файлов, поэтому применяется только в изолированных сценариях.
Для анализа установленных RPM используется rpm -qa, а для просмотра файлов конкретного пакета – rpm -ql имя_пакета. Эти команды помогают контролировать изменения в системе и выявлять конфликты после ручной установки.
Установка локального RPM-файла командой zypper install

Для установки локального RPM-файла в OpenSUSE используется команда zypper install с указанием относительного или абсолютного пути к файлу. Такой способ задействует механизм разрешения зависимостей libzypp и интегрирует пакет в систему обновлений.
Базовый порядок действий:
- Перейти в каталог с RPM-файлом или заранее узнать полный путь к нему.
- Выполнить команду sudo zypper install ./имя_пакета.rpm.
- Подтвердить установку и импорт ключа подписи, если система запрашивает доверие.
При запуске установки zypper:
- Проверяет архитектуру пакета и совместимость с системой.
- Анализирует зависимости и предлагает установить недостающие библиотеки из подключённых репозиториев.
- Выявляет конфликты с уже установленными пакетами и предлагает варианты их разрешения.
Если RPM-файл требует конкретной версии зависимости, полезно заранее обновить метаданные:
- sudo zypper refresh – обновление информации о пакетах.
- sudo zypper install ./package.rpm – повторный запуск установки.
Для диагностики проблем применяются дополнительные параметры:
- —allow-unsigned-rpm – установка неподписанного RPM, если источник доверен вручную.
После завершения установки пакет отображается в общем списке системы и может обновляться через стандартные команды zypper update и zypper patch, если его версия присутствует в репозиториях.
Установка RPM из подключённого репозитория через zypper
При наличии подключённого репозитория установка RPM выполняется по имени пакета без указания файла. Zypper использует метаданные источника, выбирает подходящую версию и учитывает приоритеты репозиториев. Перед установкой стоит проверить список источников командой zypper lr -u, чтобы убедиться в актуальности URL и приоритетов.
Обновление метаданных выполняется командой sudo zypper refresh. Для ускорения работы и исключения устаревших данных рекомендуется использовать параметр —force-refresh при изменениях в составе репозиториев.
Установка пакета запускается командой sudo zypper install имя_пакета. Если пакет доступен в нескольких источниках, zypper предложит выбор версии с указанием репозитория и номера сборки. Для явного указания источника применяется синтаксис zypper install имя_пакета —from имя_репозитория.
При конфликтах зависимостей zypper предлагает варианты решения с подробным описанием последствий: замена пакетов, понижение версии или отказ от установки. Выбор отображается интерактивно, что позволяет оценить влияние на систему до подтверждения.
Проверка подписи выполняется автоматически. При первом использовании репозитория система запрашивает импорт GPG-ключа. Отказ от импорта блокирует установку пакетов из данного источника.
После установки пакет регистрируется в системе обновлений. Команды zypper update и zypper patch будут учитывать его при дальнейшем обслуживании, что исключает необходимость повторной ручной установки.
Проверка подписи и доверия RPM перед установкой
Список импортированных ключей можно просмотреть командой rpm -qa gpg-pubkey*. Для удаления недоверенного ключа используется rpm -e gpg-pubkey-ИДЕНТИФИКАТОР, после чего установка пакетов, подписанных этим ключом, будет заблокирована.
При работе с внешними репозиториями важно проверять соответствие ключа источнику. Идентификатор ключа, отпечаток и URL репозитория должны совпадать с данными, опубликованными разработчиком пакета. Импорт ключа без проверки происхождения повышает риск установки подменённого ПО.
Отключение проверки подписи возможно через параметры zypper или rpm, но допустимо только в контролируемых сценариях, например при тестировании собственных сборок. В рабочей системе рекомендуется сохранять проверку подписи включённой для всех источников.
Разрешение зависимостей RPM при установке через zypper
При установке RPM через zypper система анализирует зависимости, указанные в заголовке пакета, и сопоставляет их с доступными версиями в подключённых репозиториях. Используется механизм SAT-решателя libzypp, который учитывает архитектуру, релиз дистрибутива и приоритет источников.
– замена установленного пакета на версию из другого репозитория;
– понижение версии зависимости до совместимой;
– отказ от установки текущего RPM.
Для контроля поведения решателя применяются параметры командной строки. Ключ —no-recommends ограничивает установку только обязательными зависимостями. Параметр —allow-downgrade разрешает понижение версий при строгих требованиях RPM.
При сложных конфликтах полезно проверить источник проблемной зависимости командой zypper se -s имя_пакета, которая отображает все доступные версии и репозитории. После корректировки приоритетов или отключения лишнего источника установка повторяется без изменения самого RPM.
Использование zypper для установки RPM снижает риск неконсистентного состояния системы, поскольку все изменения фиксируются и могут быть откатаны стандартными средствами управления пакетами.
Установка RPM напрямую командой rpm -i и rpm -U
Команда rpm позволяет устанавливать RPM-пакеты без участия репозиториев. Основные опции для установки:
| Команда | Назначение | Пример |
|---|---|---|
rpm -i |
Установка нового пакета. Не обновляет существующий. | rpm -i example-1.2.3.rpm |
rpm -U |
Обновление пакета, если установлен предыдущий вариант, иначе установка нового. | rpm -U example-1.2.3.rpm |
При установке напрямую необходимо учитывать зависимости. Команда rpm не разрешает их автоматически. Проверку можно выполнить через:
rpm -qpR example-1.2.3.rpm
Для принудительной установки без проверки зависимостей используется флаг --nodeps. Использование опции --force позволяет перезаписать существующие файлы пакета:
rpm -i --nodeps --force example-1.2.3.rpm
После установки рекомендуется проверять целостность и статус пакета:
rpm -V example
Прямая установка RPM подходит для локальных пакетов и тестирования, но для обновления системы безопаснее использовать zypper, так как он автоматически решает зависимости и предотвращает конфликты.
Типовые ошибки установки RPM в OpenSUSE и их исправление

Ошибка: неудовлетворённые зависимости. Сообщение вида error: Failed dependencies: libXYZ.so.1()(64bit) is needed by package.
Решение: проверить зависимости пакета командой rpm -qpR package.rpm и установить недостающие библиотеки через zypper install или найти соответствующие RPM. Прямая установка через rpm -i без зависимостей возможна с флагом --nodeps, но рискованна.
Ошибка: конфликт версий файлов. Пример: file /usr/bin/example from install of package-1.2 conflicts with file from package-1.1.
Решение: использовать rpm -U --replacepkgs --replacefiles package.rpm для обновления или перезаписи конфликтующих файлов. Перед этим проверить установленные версии: rpm -q package.
Ошибка: повреждённый пакет. Сообщение error: package.rpm: Header V3 DSA/SHA1 signature: NOKEY или package.rpm: not an rpm package.
Решение: проверить контрольную сумму файла sha256sum package.rpm и убедиться в корректности загрузки. Добавить ключ репозитория для подписи через rpm --import /path/to/RPM-GPG-KEY.
Ошибка: не хватает прав. Пример: error: could not open package.rpm: Permission denied.
Решение: выполнить установку с правами суперпользователя: sudo rpm -i package.rpm или sudo rpm -U package.rpm. Проверить права доступа к файлу: ls -l package.rpm.
Ошибка: несовместимость архитектуры. Сообщение: package.rpm: Header V3 DSA/SHA1 signature: NOKEY, but x86_64 required.
Решение: убедиться, что пакет соответствует архитектуре системы: rpm -qpi package.rpm | grep Architecture. Скачать RPM для правильной архитектуры.
Вопрос-ответ:
В чем разница между установкой RPM через zypper и напрямую через rpm?
Команда zypper автоматически разрешает зависимости и устанавливает пакеты из репозиториев, гарантируя совместимость с системой. Прямая установка через rpm устанавливает только конкретный файл, зависимости проверяются вручную, и возможны конфликты с уже установленными пакетами.
Как проверить зависимости RPM-пакета перед установкой?
Для проверки зависимостей можно использовать команду rpm -qpR package.rpm. Она выведет список библиотек и других пакетов, которые необходимы для корректной работы. После этого недостающие элементы можно установить через zypper install, чтобы избежать ошибок во время установки.
Можно ли использовать rpm -i для обновления существующего пакета?
Нет, rpm -i предназначена только для установки нового пакета. Если пакет с таким именем уже существует, установка завершится ошибкой. Для обновления нужно использовать rpm -U package.rpm, которая заменяет старую версию новой или устанавливает пакет, если его нет.
Почему при установке RPM возникает ошибка file conflicts и как её исправить?
Ошибка возникает, когда файлы нового пакета уже существуют на системе в составе другого пакета или предыдущей версии. Решается командой rpm -U --replacefiles package.rpm, которая заменяет конфликтующие файлы. Перед этим полезно проверить установленные версии через rpm -q package.
Что делать, если RPM-пакет имеет неподписанную или неизвестную подпись?
При установке может появиться сообщение NOKEY. Решение — импортировать GPG-ключ, используемый для подписания пакета: rpm --import /path/to/RPM-GPG-KEY. После этого установка через rpm или zypper пройдет без предупреждений. Проверить ключи можно командой rpm -q gpg-pubkey.
Почему при установке RPM через rpm -i появляются ошибки зависимостей, и как их исправить?
Команда rpm -i устанавливает только конкретный пакет и не проверяет автоматически, установлены ли все необходимые библиотеки или другие пакеты. Если зависимости отсутствуют, появится сообщение вида Failed dependencies: libXYZ.so.1()(64bit) is needed by package. Исправляется это двумя способами: первый — проверить зависимости заранее командой rpm -qpR package.rpm и установить недостающие через zypper install; второй — использовать флаг --nodeps для принудительной установки, но это может привести к сбоям работы пакета. Для системного обновления лучше применять rpm -U, так как она заменяет старые версии и позволяет корректнее управлять файлами.
