Як зробити залежність автоматичної установки 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 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 Cool, це усуне всі кроки локального сховища. Опублікуйте це як відповідь.
gertvdijk

Це не дуже добре працює, якщо ви намагаєтеся зробити сценарій RPM для автоматизації встановлення YUM на AIX, як я ;-)
Tricky

1
@ Max13, це yum localinstallі є те саме, що відповідь, вже розміщена тут , з уже обговорюваними недоліками для ситуацій, коли залежності не є в yum repos (див. Цей метод не буде працювати, якщо [...] частина).
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 Я не обговорюю, що інше розміщене рішення краще для конкретного прикладу, про який просили ОП. Однак моя відповідь правильна для відповіді на запитання в заголовку і набагато швидша, ніж налаштування місцевого репо, і допоможе іншим, хто закінчується тут, як я, хто хоче швидким способом отримати yum, щоб автоматично встановити залежності, які об / хв потрібно. Це є метою переповнення стека, щоб допомогти громаді шукати відповіді, а не просто допомагати ОП.
Матвій

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: скопіюйте всі об / хв 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

-2

Просто виконайте наступну команду.

sudo dnf install *package.rpm

Введіть свій пароль, і ви закінчите.


-5

Процес генерації RPM з вихідного файлу: 1) завантажити вихідний файл із розширенням.gz. 2) встановити rpm-build та rpmdevtools з yum install. (буде створена папка rpmbuild ... SPECS, SOURCES, RPMS .. папки повинні бути створені всередині папки rpmbuild). 3) скопіюйте вихідний код.gz у папку ДЖЕРЕЛА. (Rpmbuild / ДЖЕРЕЛА) 4) Зніміть кулю гудрону за допомогою наступної команди. перейдіть до папки 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-apr --enable-proxy --enable-proxy-balancer --with-mpm = працівник --enable-mods-static = всі 6) виконайте команду нижче, коли конфігурація буде успішною: зробіть 7) після успішного виконання команди make run run: checkinstall in the same folder. (якщо у вас немає програмного забезпечення checkinstall, завантажте останню версію з сайту). Також у програмі checkinstall є помилка, яку можна вирішити наступним чином ::::: знайдіть checkinstallrc та замініть TRANSLATE = 1 на TRANSLATE = 0 за допомогою команди vim. Також перевірте наявність пакета виключення: EXCLUDE = "/ selinux" 8) checkinstall запитає варіант (тип R, якщо ви хочете, щоб tp збирати rpm для вихідного файлу) 9) Готовий .rpm файл буде вбудований у папку RPMS всередині файлу rpmbuild / RPMS. .. Всього найкращого ....

З повагою, Прерана


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