Как сделать зависимости автоматической установки 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
?
Я пытался the С rpm -i
как рассказали здесь но это не сработало для меня.
есть ли другой способ?
Спасибо за любую помощь.
11 ответов
создайте (локальный) репозиторий и используйте yum
чтобы он разрешал зависимости для вас.
в Вики CentOS есть хорошая страница, предоставляющая инструкции по этому. CentOS wiki HowTos / CreateLocalRepos.
суммировано и далее сведено к минимуму (не идеально, но быстро):
- создать каталог для локального репозитория, например,
/home/user/repo
. - переместите RPMs в этот каталог.
-
исправить некоторые владение и файловая система 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, который вы хотите установить.
редактировать просто уточнение, это автоматически установит все зависимости, которые уже доступны через системные репозитории 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
Я нашел более простое решение. Если у вас есть все RPMs в том же каталоге, все, что вам нужно сделать, это,
$ sudo rpm -i *.rpm
rpm
Кажется, выясняет правильный порядок установки этих и устанавливает RPMs.
# 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
в differencve между этими 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
затем я запускаю это, чтобы установить :
> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm
Я не уверен, если это лучшая практика, однако она решила мою проблему.
Шаг 1: скопируйте все rpm pkg в заданных местах
Step2: если 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
Step4: создайте файл репозитория со следующим содержимым в /etc / yum.РЕПО.д/с MySQL.РЕПО
[local]
name=My Awesome Repo
baseurl=file:///scratch/PVN/8.0.11_rhel7
enabled=1
gpgcheck=0
Step5 выполните эту команду для установки
[root@pavangildamysql1 local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm
процесс генерации RPM из исходного файла:
- загрузить исходный файл С.продление ГЗ.
- установить rpm-build и rpmdevtools из yum install. (будет создана папка rpmbuild...СПЕЦИФИКАЦИИ, ИСТОЧНИКИ, RPMS.. папки должны быть сгенерированы внутри папки rpmbuild).
- скопируйте исходный код.GZ в папку SOURCES.(rpmbuild/SOURCES)
- Untar tar ball, используя следующую команду.
- перейти к папке 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 в вашей системе.
- перейти к папке SOURCES : rpmbuild / источники, где присутствует файл tar.
команда: электронная.г
- перейдите в извлеченную папку и введите команду ниже:
./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, загрузите последнюю версию с сайта) Также программное обеспечение checkinstall имеет ошибку, которая может быть решена следующим образом: найдите checkinstallrc, а затем замените TRANSLATE = 1 на TRANSLATE=0 с помощью команды vim. Также проверьте наличие пакета exclude: EXCLUDE=" / selinux"
- checkinstall запросит опцию (тип R Если вы хотите TP build rpm для исходного файла)
- готово! .файл rpm будет построен в папке RPMS внутри файла rpmbuild/RPMS.