Как сделать 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 ответов:
создать (локальный) репозиторий и использовать
yum
чтобы он разрешал зависимости для вас.у CentOS wiki есть хорошая страница, предоставляющая инструкции по этому вопросу. CentOS wiki HowTos / CreateLocalRepos.
суммируется и далее минимизируется (не идеально, но быстро):
- создайте каталог для вашего локального репозитория, например
/home/user/repo
.- переместите RPM в этот каталог.
исправить некоторые собственность и файловая система permissions:
# 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
предоставленная ссылка @gertvdijk показывает быстрый способ достижения желаемых результатов без настройки локального репозитория:
$ yum --nogpgcheck localinstall packagename.arch.rpm
просто изменить
packagename.arch.rpm
к имени файла RPM, который вы хотите установить.Edit просто уточнение, это автоматически установит все зависимости,которые уже доступны через системные репозитории YUM.
Если у вас есть зависимости, удовлетворяемые другими RPM, которые не находятся в репозиториях системы, то этот метод не будет работать, если каждый RPM также не указан вместе с
packagename.arch.rpm
в командной строке.
для меня работал только с
# 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.
в случае 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 из исходного файла:
- скачать исходный файл.продление ГЗ.
- Install rpm-build и rpmdevtools от yum install. (будет создана папка rpmbuild...СПЕЦИФИКАЦИИ, ИСТОЧНИКИ, ОБОРОТЫ.. папки должны быть созданы внутри папки rpmbuild).
- скопируйте исходный код.GZ в папку SOURCES.(rpmbuild / SOURCES)
- открутите шар дегтя с помощью следующей команды.
- перейти в папку 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 установить в вашей системе.- перейдите в извлеченную папку и введите команду ниже:
./configure --prefix=/usr/local/apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm=worker --enable-mods-static=all
- выполнить ниже команда после успешной настройки:
make
- после успешного выполнения команды make run: установите флажок в той же папке. (если у вас нет программного обеспечения checkinstall, загрузите последнюю версию с сайта) Также программное обеспечение checkinstall имеет ошибку, которая может быть решена следующим образом: найдите checkinstallrc, а затем замените TRANSLATE = 1 на TRANSLATE=0 с помощью команды vim. Также проверьте наличие пакета exclude: EXCLUDE=" / selinux"
- checkinstall запросит опцию (тип R Если вы хотите построить TP rpm для исходного файла)
- готово! .файл rpm будет построен в папке RPMS внутри файла rpmbuild/RPMS.