Як зробити залежність автоматичної установки 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.