Как установить зависимости автоматической установки rpm

Я создал два пакета RPM

  • proj1-1.0-1.x86_64.rpm
  • libtest1-1.0-1.x86_64.rpm

proj1 зависит от присутствующего файла libtest1.so и он правильно отображается в пакетах RPM, как показано здесь:

[email protected]:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

[email protected]:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

Установка proj1 завершается сбоем из-за отсутствующей зависимости.

[email protected]:~$ rpm -ivh proj1-1.0-1.x86_64.rpm
error: Failed dependencies:
libtest1.so()(64bit) is needed by proj1-1.0-1.x86_64.rpm

Как обеспечить, чтобы libtest1-1.0-1.x86_64.rpm устанавливался автоматически во время установка proj1-1.0-1.x86_64.rpm?

Я попробовал вариант --aid с rpm -i, как описано здесь, но это не сработало для меня.

Есть ли другой способ?

Спасибо за любую помощь.

Ответ 1

Создайте (локальный) репозиторий и используйте yum, чтобы он разрешил вам зависимости.

В вики CentOS есть хорошая страница с инструкцией по этому вопросу. CentOS wiki HowTos/CreateLocalRepos.


Подводится и сводится к минимуму (не идеальный, но быстрый):

  • Создайте каталог для локального репозитория, например. /home/user/repo.
  • Переместите RPM в этот каталог.
  • Исправьте права на владение и файловую систему:

    # chown -R root.root /home/user/repo
    
  • Установите пакет createrepo, если он еще не установлен, и запустите

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  • Создайте файл конфигурации репозитория, например. /etc/yum.repos.d/myrepo.repo содержащий

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  • Установите пакет, используя

    # yum install packagename
    

Ответ 2

Предоставленная ссылка @gertvdijk показывает быстрый способ достижения желаемых результатов без настройки локального репозитория:

$ yum --nogpgcheck localinstall packagename.arch.rpm

Просто измените packagename.arch.rpm на имя файла RPM, который вы хотите установить.

Изменить Просто уточнение, это автоматически установит все зависимости, которые уже доступны через системные репозитории YUM.

Если у вас есть зависимости, которые удовлетворяют другие RPM файлы, которые не находятся в системных репозиториях, этот метод не будет работать, если в командной строке также не указывается каждый RPM вместе с packagename.arch.rpm.

Ответ 3

Для пользователей dnf просто используйте dnf install *.rpm, localinstall больше не требуется.

Ответ 4

Для меня работала только с

# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm

И автоматически запросил разрешение на загрузку зависимостей. Ниже примера я использую Fedora 22

[[email protected] lukas]# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
Yum command has been deprecated, redirecting to '/usr/bin/dnf install  ffmpeg-2.6.4-1.fc22.x86_64.rpm'.
See 'man dnf' and 'man yum2dnf' for more information.
To transfer transaction metadata from yum to DNF, run:
'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

Last metadata expiration check performed 0:28:24 ago on Fri Sep 25 12:43:44 2015.
Dependencies resolved.
====================================================================================================================
 Package               Arch           Version                                  Repository                      Size
====================================================================================================================
Installing:
 SDL                   x86_64         1.2.15-17.fc22                           fedora                         214 k
 ffmpeg                x86_64         2.6.4-1.fc22                             @commandline                   1.5 M
 ffmpeg-libs           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates         5.0 M
 fribidi               x86_64         0.19.6-3.fc22                            fedora                          69 k
 lame-libs             x86_64         3.99.5-5.fc22                            rpmfusion-free                 345 k
 libass                x86_64         0.12.1-1.fc22                            updates                         85 k
 libavdevice           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates          75 k
 libdc1394             x86_64         2.2.2-3.fc22                             fedora                         124 k
 libva                 x86_64         1.5.1-1.fc22                             fedora                          79 k
 openal-soft           x86_64         1.16.0-5.fc22                            fedora                         292 k
 opencv-core           x86_64         2.4.11-5.fc22                            updates                        1.9 M
 openjpeg-libs         x86_64         1.5.1-14.fc22                            fedora                          89 k
 schroedinger          x86_64         1.0.11-7.fc22                            fedora                         315 k
 soxr                  x86_64         0.1.2-1.fc22                             updates                         83 k
 x264-libs             x86_64         0.142-12.20141221git6a301b6.fc22         rpmfusion-free                 587 k
 x265-libs             x86_64         1.6-1.fc22                               rpmfusion-free                 486 k
 xvidcore              x86_64         1.3.2-6.fc22                             rpmfusion-free                 264 k

Transaction Summary
====================================================================================================================
Install  17 Packages

Total size: 11 M
Total download size: 9.9 M
Installed size: 35 M
Is this ok [y/N]: y

Ответ 5

Я нашел более простое решение. Если у вас есть все RPM в одном каталоге, все, что вам нужно сделать, это

$ sudo rpm -i *.rpm

rpm, похоже, правильно определяет порядок их установки и устанавливает RPM.

Ответ 6

Ответ Мэтью вызвал много эмоций, потому что в нем все еще не хватает мелких деталей. Общая команда будет:

# yum --nogpgcheck localinstall <package1_file_name> ... <packageN_file_name>

Вышеуказанное package_file_name может включать в себя локальный абсолютный или относительный путь или быть URL (возможно, даже URI).

Yum будет искать зависимости среди всех файлов пакетов, указанных в командной строке, и, если он не сможет найти зависимости, он также будет использовать любые настроенные и включенные репозитории yum.

Ни текущий рабочий каталог, ни пути к любому из package_file_name не будут найдены, за исключением случаев, когда какой-либо из этих каталогов ранее был настроен как включенный репозиторий yum.

Так что в случае OP команда yum:

# cd <path with pkg files>; yum --nogpgcheck localinstall ./proj1-1.0-1.x86_64.rpm ./libtest1-1.0-1.x86_64.rpm

будет делать, как и rpm:

# cd <path with pkg files>; rpm -i proj1-1.0-1.x86_64.rpm libtest1-1.0-1.x86_64.rpm

Разница между этими yum и rpm будет видна только в том случае, если один из перечисленных пакетов будет иметь дополнительные зависимости от пакетов, НЕ перечисленных в командной строке.

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

Текущий рабочий каталог НЕ будет найден ни в каком случае, кроме случаев, когда он был ранее настроен как включенный репозиторий yum.

Ответ 7

Я столкнулся с этим, и для меня работала над yum localinstall enterPkgNameHere.rpm изнутри каталога, где находится файл .rpm.

Примечание: замените enterPkgNameHere.rpm на имя вашего файла .rpm.

Ответ 8

Просто запустите следующую команду.

sudo dnf install *package.rpm

Введите свой пароль, и все готово.

Ответ 9

В случае openSUSE Leap 15 я получаю похожую ошибку:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm 
[sudo] password for root: 
warning: opera-stable_53.0.2907.68_amd64.rpm: Header V4 RSA/SHA512 Signature, key ID a5c7ff72: NOKEY
error: Failed dependencies:
    at is needed by opera-stable-53.0.2907.68-0.x86_64

Я запускаю эту команду, чтобы выяснить, каковы зависимости:

> sudo zypper install opera-stable_53.0.2907.68_amd64.rpm 
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 4 NEW packages are going to be installed:
  at libfl2 libHX28 opera-stable

4 new packages to install.
Overall download size: 50.3 MiB. Already cached: 0 B. After the operation, additional 176.9 MiB will be used.
Continue? [y/n/...? shows all options] (y): n

Затем я запускаю эту команду для установки зависимостей:

> sudo zypper in at
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 3 NEW packages are going to be installed:
  at libfl2 libHX28

3 new packages to install.
Overall download size: 208.6 KiB. Already cached: 0 B. After the operation, additional 600.4 KiB will be used.
Continue? [y/n/...? shows all options] (y): y

Затем я запускаю это, чтобы установить файл rpm:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm

Я не уверен, что это лучшая практика, но это решило мою проблему.

Ответ 10

Шаг 1: скопируйте все rpm pkg в указанных местах

Шаг 2: если createrepo еще не установлен, так как он не будет установлен по умолчанию, установите его.

[[email protected] 8.0.11_rhel7]# yum install createrepo

Шаг 3: создайте репозиторий метеданных и дайте ниже разрешение

[[email protected] 8.0.11_rhel7]# chown -R root.root /scratch/PVN/8.0.11_rhel7
[[email protected] 8.0.11_rhel7]# createrepo /scratch/PVN/8.0.11_rhel7
Spawning worker 0 with 3 pkgs
Spawning worker 1 with 3 pkgs
Spawning worker 2 with 3 pkgs
Spawning worker 3 with 2 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[[email protected] 8.0.11_rhel7]# chmod -R o-w+r /scratch/PVN/8.0.11_rhel7

Шаг 4: Создайте файл репозитория со следующим содержимым в /etc/yum.repos.d/mysql.repo

[local]
name=My Awesome Repo
baseurl=file:///scratch/PVN/8.0.11_rhel7
enabled=1
gpgcheck=0

Шаг 5 Запустите эту команду для установки

[[email protected] local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm

Ответ 11

Процесс создания RPM из исходного файла: 1) скачать исходный файл с расширением .gz. 2) установить rpm-build и rpmdevtools из yum install. (Будет сгенерирована папка rpmbuild... Папки SPECS, SOURCES, RPMS.. должны быть сгенерированы внутри папки rpmbuild). 3) скопируйте исходный код .gz в папку SOURCES. (Rpmbuild/SOURCES) 4) Разархивируйте tar-шар, используя следующую команду. перейдите в папку SOURCES: rpmbuild/SOURCES, где находится tar файл. команда: например, tar -xvzf httpd-2.22.tar.gz Папка httpd-2.22 будет сгенерирована по тому же пути. Проверьте, есть ли apr и apr-util в папке httpd-2.22/srclib. Если apr и apr-util не существует, загрузите последнюю версию с сайта apache, распакуйте ее и поместите в папку httpd-2.22/srclib. Также убедитесь, что в вашей системе установлена программа pcre.

5) перейдите в извлеченную папку и введите следующую команду:./configure --prefix =/usr/local/apache2 --with-enabled-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6) выполнить команду ниже после успешного завершения настройки: make 7) после успешного выполнения выполнить команду make: checkinstall в той же папке. (если у вас нет программного обеспечения checkinstall, скачайте последнюю версию с сайта). Также в программном обеспечении checkinstall есть ошибка, которая может быть устранена следующим образом :: найдите checkinstallrc и затем замените TRANSLATE = 1 на TRANSLATE = 0 с помощью команды vim. Также проверьте исключение пакета: EXCLUDE = "/selinux" 8) checkinstall запросит опцию (введите R, если вы хотите tp build rpm для исходного файла) 9) Готовый файл .rpm будет встроен в папку RPMS внутри файла rpmbuild/RPMS... Всего наилучшего....

С уважением, Прерана