Как сделать 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?

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

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

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

11 103

11 ответов:

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

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


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

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

    # 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
    

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

$ yum --nogpgcheck localinstall packagename.arch.rpm

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

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

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

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

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

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

и автоматически запросил разрешение на загрузку depedencies. Ниже примера, я использую 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

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

$ sudo rpm -i *.rpm

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

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

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

The 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 репозитория.

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

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

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

sudo dnf install *package.rpm

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

в случае 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 file:

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

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

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

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

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Шаг 3: создать репозиторий metedata и дать ниже разрешение

[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.РЕПО.d / mysql.РЕПО

[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

процесс генерации RPM из исходного файла:

  1. скачать исходный файл.продление ГЗ.
  2. Install rpm-build и rpmdevtools от yum install. (будет создана папка rpmbuild...СПЕЦИФИКАЦИИ, ИСТОЧНИКИ, ОБОРОТЫ.. папки должны быть созданы внутри папки rpmbuild).
  3. скопируйте исходный код.GZ в папку SOURCES.(rpmbuild / SOURCES)
  4. открутите шар дегтя с помощью следующей команды.
    • перейти в папку SOURCES :rpmbuild / источники, где присутствует файл 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. после успешного выполнения команды make run: установите флажок в той же папке. (если у вас нет программного обеспечения checkinstall, загрузите последнюю версию с сайта) Также программное обеспечение checkinstall имеет ошибку, которая может быть решена следующим образом: найдите checkinstallrc, а затем замените TRANSLATE = 1 на TRANSLATE=0 с помощью команды vim. Также проверьте наличие пакета exclude: EXCLUDE=" / selinux"
  8. checkinstall запросит опцию (тип R Если вы хотите построить TP rpm для исходного файла)
  9. готово! .файл rpm будет построен в папке RPMS внутри файла rpmbuild/RPMS.