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

Я создал два пакета 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, как описано здесь, но этого не произошло. не работает для меня.

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

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


person HAL    schedule 14.12.2012    source источник


Ответы (12)


Создайте (локальный) репозиторий и используйте 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
    
person gertvdijk    schedule 14.12.2012
comment
Ссылка, которую вы предоставили, решила мой случай с помощью только этой одной строки: yum --nogpgcheck localinstall packagename.arch.rpm. - person Matthew; 06.05.2013
comment
@Matthew Cool, это устранило бы все шаги локального репозитория. Опубликуйте это как ответ, я бы сказал. - person gertvdijk; 06.05.2013
comment
Это не очень хорошо работает, если вы пытаетесь написать сценарий RPM для автоматизации установки YUM на AIX, как я ;-) - person Tricky; 14.03.2018
comment
@ Max13, это yum localinstall, и это то же самое, что и ответ, уже опубликованный здесь, с уже обсужденными недостатками для ситуаций, когда зависимости не в репозиториях yum (см. этот метод не будет работать, если не будет [...]). - person gertvdijk; 21.02.2019
comment
Подумал и об этом, если нет подключения к Интернету sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpm, чтобы убедиться, что yum не заглядывает в другие репозитории. - person Anshuman Goel; 03.04.2019

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

$ yum --nogpgcheck localinstall packagename.arch.rpm

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

Изменить. Уточнение: при этом будут автоматически установлены все зависимости, которые уже доступны в системных репозиториях YUM.

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

person Matthew    schedule 06.05.2013
comment
Нет, это не сработает, если libtest1-1.0-1.x86_64.rpm не находится в другом репозитории или оба пакета не указаны в командной строке, как того требует rpm -i. Я только что проверил это на yum 3.4.3 (Fedora 18). Стенограмма здесь, показывающая, что она переходит в updates репозиторий для зависимостей, даже если файлы находятся прямо там. - person Aaron D. Marasco; 07.05.2013
comment
@ AaronD.Marasco, возможно, вы правы в конкретном случае, описанном в вопросе, но этот однострочный вариант намного проще для тех, кто попадает сюда, как я, и является полностью действительным ответом на вопрос в заголовке, Как сделать зависимости автоматической установки rpm. - person Matthew; 07.05.2013
comment
Нет, это не автоматическая установка зависимостей - вы указываете их в командной строке так же, как и с rpm -i, поэтому использование yum не дает дополнительных преимуществ. - person Aaron D. Marasco; 08.05.2013
comment
@ AaronD.Marasco Я сделал это пару дней назад, установив Nixnote. У Nixnote были неустановленные зависимости, поэтому я не смог установить его с помощью rpm -i. Я использовал приведенную выше команду, и yum автоматически установил зависимости без необходимости указывать их одну за другой. Так что да, он автоматически устанавливает зависимости. - person Matthew; 08.05.2013
comment
Пожалуйста, перечитайте то, что я написал. Все зависимости были загружены из репозитория, даже если они были локально доступны в каталоге с установленным вами RPM. - person Aaron D. Marasco; 09.05.2013
comment
@ AaronD.Marasco Я не спорю о том, что другое опубликованное решение лучше для конкретного примера, о котором спрашивал OP. Мой ответ, однако, верен для ответа на вопрос в заголовке, и он намного быстрее, чем настройка локального репо, и поможет другим, кто попадает сюда, как я, кто хочет быстрый способ получить yum для автоматической установки зависимостей, необходимых для rpm. Это цель переполнения стека, чтобы помочь сообществу искать ответы, а не просто помочь OP. - person Matthew; 09.05.2013
comment
@Aaron: Я думаю, что это может работать так, как вы описываете в одних системах, и как Мэтью описывает в других. У меня есть одна система, в которой я клянусь, она разрешала зависимости из локальной файловой системы (поскольку никакие другие репозитории не были настроены ...), но другая, где она продолжает сообщать мне об отсутствующих зависимостях, а именно прямо там в pwd. - person Coderer; 16.07.2014

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

person mimoralea    schedule 20.08.2015
comment
Пришел сюда сказать именно это - person nawfel bgh; 15.10.2015
comment
спасибо, я изо всех сил пытался установить mysql-workbench с rpm -ivh. в конце концов закончил с этим постом. DNF сделали свое дело. - person BlueBird; 13.07.2016

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

# 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
person user5377363    schedule 25.09.2015
comment
я думаю, самый простой способ - person Shams; 19.03.2018
comment
Не решение с прямым набором оборотов, но оно мне нравится больше всего. - person TFuto; 26.09.2019
comment
Не RPM-решение, но это самый простой способ установить зависимости с помощью одной команды. Это сработало для меня безупречно - person Enrique Benitez; 22.06.2020

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

$ sudo rpm -i *.rpm

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

person Rajaram    schedule 25.10.2013
comment
Это все еще не обрабатывает случай, если зависимости не находятся в текущем каталоге. - person Ding-Yi Chen; 14.11.2013

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

# 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.

person Artur Opalinski    schedule 30.01.2018

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

Я не уверен, что это лучший способ, но он решил мою проблему.

person user3405291    schedule 09.06.2018

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

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

person specialk1st    schedule 05.02.2016

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

Шаг 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
person Pavan Gilda    schedule 12.06.2018

Скопируйте все ваши RPM в каталог, а затем установите его следующим образом:

yum install -y --cacheonly --disablerepo=* /var/rpm_dir/*.rpm

Для определенных пакетов вы можете использовать yumdownloader, например, в этом другом потоке: https://stackoverflow.com/a/66927190/5078874

person Adrian Escutia Soto    schedule 03.04.2021

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

sudo dnf install *package.rpm

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

person Subham Debnath    schedule 30.03.2018

Процесс генерации 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-included-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6) после успешного конфигурирования запустить команду ниже: make 7) после успешного выполнения od make command run: checkinstall в той же папке. (если у вас нет программы checkinstall, загрузите последнюю версию с сайта) Также в программе checkinstall есть ошибка, которую можно решить следующим образом: ::::: найдите checkinstallrc и затем замените TRANSLATE = 1 на TRANSLATE = 0 с помощью команды vim. Также проверьте наличие пакета исключения: EXCLUDE = "/ selinux" 8) checkinstall запросит опцию (введите R, если вы хотите, чтобы tp build rpm для исходного файла) 9) Готово .rpm-файл будет построен в папке RPMS внутри файла rpmbuild / RPMS. .. Всего наилучшего ....

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

person user3248738    schedule 21.03.2016
comment
Где кто-нибудь спрашивал о постройке чего-либо? Речь шла о разрешении зависимостей уже созданного пакета RPM. - person Craig Jackson; 05.06.2020