Как установить зависимости автоматической установки rpm
Я создал два пакета RPM
-
proj1-1.0-1.x86_64.rpm
-
libtest1-1.0-1.x86_64.rpm
proj1
зависит от присутствующего файла libtest1.so
и он правильно отображается в пакетах RPM, как показано здесь:
[email protected]:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm
libtest1.so()(64bit)
[email protected]:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm
libtest1.so()(64bit)
Установка proj1
завершается сбоем из-за отсутствующей зависимости.
[email protected]:~$ 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
, как описано здесь, но это не сработало для меня.
Есть ли другой способ?
Спасибо за любую помощь.
Ответы
Ответ 1
Создайте (локальный) репозиторий и используйте yum
, чтобы он разрешил вам зависимости.
В вики CentOS есть хорошая страница с инструкцией по этому вопросу. CentOS wiki HowTos/CreateLocalRepos.
Подводится и сводится к минимуму (не идеальный, но быстрый):
- Создайте каталог для локального репозитория, например.
/home/user/repo
.
- Переместите RPM в этот каталог.
-
Исправьте права на владение и файловую систему:
# chown -R root.root /home/user/repo
-
Установите пакет createrepo
, если он еще не установлен, и запустите
# createrepo /home/user/repo
# chmod -R o-w+r /home/user/repo
-
Создайте файл конфигурации репозитория, например. /etc/yum.repos.d/myrepo.repo
содержащий
[local]
name=My Awesome Repo
baseurl=file:///home/user/repo
enabled=1
gpgcheck=0
-
Установите пакет, используя
# yum install packagename
Ответ 2
Предоставленная ссылка @gertvdijk показывает быстрый способ достижения желаемых результатов без настройки локального репозитория:
$ yum --nogpgcheck localinstall packagename.arch.rpm
Просто измените packagename.arch.rpm
на имя файла RPM, который вы хотите установить.
Изменить Просто уточнение, это автоматически установит все зависимости, которые уже доступны через системные репозитории YUM.
Если у вас есть зависимости, которые удовлетворяют другие RPM файлы, которые не находятся в системных репозиториях, этот метод не будет работать, если в командной строке также не указывается каждый RPM вместе с packagename.arch.rpm
.
Ответ 3
Для пользователей dnf просто используйте dnf install *.rpm
, localinstall
больше не требуется.
Ответ 4
Для меня работала только с
# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
И автоматически запросил разрешение на загрузку зависимостей.
Ниже примера я использую Fedora 22
[[email protected] 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
Ответ 5
Я нашел более простое решение. Если у вас есть все RPM в одном каталоге, все, что вам нужно сделать, это
$ sudo rpm -i *.rpm
rpm
, похоже, правильно определяет порядок их установки и устанавливает RPM.
Ответ 6
Ответ Мэтью вызвал много эмоций, потому что в нем все еще не хватает мелких деталей. Общая команда будет:
# 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
.
Ответ 7
Я столкнулся с этим, и для меня работала над yum localinstall enterPkgNameHere.rpm
изнутри каталога, где находится файл .rpm.
Примечание: замените enterPkgNameHere.rpm
на имя вашего файла .rpm.
Ответ 8
Просто запустите следующую команду.
sudo dnf install *package.rpm
Введите свой пароль, и все готово.
Ответ 9
В случае 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
Я не уверен, что это лучшая практика, но это решило мою проблему.
Ответ 10
Шаг 1: скопируйте все rpm pkg в указанных местах
Шаг 2: если createrepo еще не установлен, так как он не будет установлен по умолчанию, установите его.
[[email protected] 8.0.11_rhel7]# yum install createrepo
Шаг 3: создайте репозиторий метеданных и дайте ниже разрешение
[[email protected] 8.0.11_rhel7]# chown -R root.root /scratch/PVN/8.0.11_rhel7
[[email protected] 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
[[email protected] 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 Запустите эту команду для установки
[[email protected] local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm
Ответ 11
Процесс создания 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-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... Всего наилучшего....
С уважением, Прерана