Как сделать, чтобы RPM автоматически устанавливал зависимости


138

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

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

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

user@my-pc:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

user@my-pc:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

Установка proj1не выполняется из-за отсутствия зависимости.

user@my-pc:~$ 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как описано здесь, но он не работал для меня.

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

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

Ответы:


102

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

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


Суммируется и далее минимизируется (не идеально, но быстрее):

  1. Создайте каталог для вашего локального хранилища, например /home/user/repo.
  2. Переместите RPM в этот каталог.
  3. Исправьте некоторые права владения и файловой системы:

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

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

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

    # yum install packagename
    

46
Ссылка вы предоставили решать мое дело только с этой одной строкой: yum --nogpgcheck localinstall packagename.arch.rpm.
Мэтью

@ Matthew Круто, это исключило бы все шаги локального хранилища. Опубликовать это как ответ я бы сказал.
gertvdijk

Это не очень хорошо работает, если вы пытаетесь написать скрипт RPM для автоматизации установки YUM в AIX, как я ;-)
Tricky

1
@ Max13, yum localinstallэто то же самое, что и ответ, уже опубликованный здесь , с уже обсужденными недостатками для ситуаций, когда зависимости не находятся в репозиториях yum (см. Этот метод не будет работать, если [...] не будет частью).
gertvdijk

Я понял это, если нет подключения sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmк интернету, чтобы убедиться, что yumон не просматривает другие репозитории.
Аншуман Гоэль

194

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

$ yum --nogpgcheck localinstall packagename.arch.rpm

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

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

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


7
Нет, это не будет работать, если только libtest1-1.0-1.x86_64.rpmоно не находится в каком-либо хранилище, или оба пакета указаны в командной строке, как " rpm -i". Я только что проверил это на yum3.4.3 (Fedora 18). Здесь транскрипт показывает, что он идет в updatesрепозиторий для зависимостей, даже когда файлы находятся там же.
Аарон Д. Мараско

3
@ AaronD.Marasco, возможно, вы правы в отношении конкретного случая, описанного в вопросе, но этот однострочный текст гораздо проще для всех, кто здесь оказался, как я, и является полностью верным ответом на вопрос в заголовке «Как сделать rpm автоустановки зависимостей ".
Матфея

3
Нет, это не «автоматическая установка» зависимостей - вы указываете их в командной строке, так же, как « rpm -i», поэтому использование не yumдает вам никаких дополнительных преимуществ.
Аарон Д. Мараско

2
Пожалуйста, перечитайте то, что я написал. Любые зависимости были загружены из репозитория, даже если они были доступны локально в каталоге с установленным вами RPM.
Аарон Д. Мараско

1
@ AaronD.Marasco Я не спорю, что другое опубликованное решение лучше для конкретного примера, о котором спрашивал OP. Мой ответ, однако, является правильным для ответа на вопрос в названии и намного быстрее, чем настройка локального репо, и поможет другим, кто попал сюда, как я, которые хотят быстрый способ получить yum для автоматической установки зависимостей, которые об / мин требует. Это цель переполнения стека, чтобы помочь сообществу в поиске ответов, а не просто в помощи OP.
Мэтью

28

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


1
Пришел сюда, чтобы сказать именно это
nawfel bgh

1
спасибо, я изо всех сил пытался установить mysql-workbenchс rpm -ivh. в итоге закончилась этим постом. DNF сделал свое дело.
BlueBird

21

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

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

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

[root@localhost 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

самый простой способ, которым я думаю
Шамс

Не решение для прямых оборотов, но мне это нравится больше всего.
TFuto

Не RPM-решение, но это самый простой способ установить зависимости только одной командой. Для меня это работало безупречно
Энрике Бенитес

9

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

$ sudo rpm -i *.rpm

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


5
Это все еще не обрабатывает случай, если зависимости не находятся в текущем каталоге.
Дин-И Чен,

4

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

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

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

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

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

Так что в случае ОП 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репозиторий.


0

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

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


0

В случае 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

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


0

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

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

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

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

[root@pavangildamysql1 8.0.11_rhel7]# chown -R root.root /scratch/PVN/8.0.11_rhel7
[root@pavangildamysql1 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
[root@pavangildamysql1 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 Запустите эту команду для установки

[root@pavangildamysql1 local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm


-5

Процесс создания RPM из исходного файла: 1) скачать исходный файл с расширением .gz. 2) установить rpm-build и rpmdevtools из yum install. (будет создана папка rpmbuild ... внутри папки rpmbuild должны быть созданы папки SPECS, SOURCES, RPMS ..). 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. .. Всего наилучшего ....

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


Где кто-нибудь спрашивал о строительстве чего-либо? Речь шла о разрешении зависимостей уже созданного RPM.
Крейг Джексон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.