Создание своего rpm пакета для обхода зависимостей.

Nov 22, 2010 16:02

Спасибо за пинки poligraph!
С помощью этой нехитрой статьи я сумел "обмануть" систему rpm.

Предыстория проблемы.
Есть сервер под управлением CentOS 5.4.
Необходимо поставить пакет, зависящий от libpython2.3 с помощью системы rpm (rpm -iUvh *.rpm).
Библиотека libpython2.3 поставляется пакетом python-2.3, а в дистрибутиве CentOS 5.4 наличиствует исключительно python-2.4.
Установка python-2.3 напару с python-2.4 конфликтна.

Создание символической ссылки /usr/lib/libpython2.3.so -> /usr/lib/libpython2.4.so поможет исключительно приложению.
Менеджер пакетов rpm об этом знать ничего не будет.

Решение.
1) Берётся пакет python-2.3.4-14.7.el4_8.2.i386.rpm.
2) Распаковывается:

rpm2cpio python-2.3.4-14.7.el4_8.2.i386.rpm | cpio -idvm

3) Изымается нужная библиотека.

mkdir ~/newrpm
mv usr/lib/libpython2.3.so* ~/newrpm

4) Создаётся архив бинарных файлов для установки:
Воссоздаём директории для библиотек, откуда они будут установлены:

mkdir ~/newrpm/usr/lib

Перемещаем бинарник нужной библиотеки в эти папки.

mv ~/newrpm/libpython2.3.so* ~/newrpm/usr/lib

Пакуем.

tar cf /usr/src/redhat/SOURCES/libpython-2.3.4.tar ~/newrpm
gzip -9 /usr/src/redhat/SOURCES/libpython-2.3.4.tar

5) Создаём .spec файл для создания нашего rpm пакета.

cat /usr/src/redhat/SPEC/libpython-2.3.4.spec
# libpython-2.3.4 by Dzmitry Stremkouski (mitroko@gmail.com). 2010.

%define _topdir /usr/src/redhat
%define name libpython
%define release 1
%define version 2.3.4
%define buildroot %{_topdir}/BUILD/%{name}-%{version}

BuildRoot: %{buildroot}
Summary: Python 2.3 compatibility library.
License: GPL
Name: %{name}
Version: %{version}
Release: %{release}
Source: %{name}-%{version}.tar.gz
Prefix: /usr/lib
Group: Development/Tools

%description
This library provides compatibility for applications that strictly
depends on libpython version 2.3.

%prep
%setup -q

%build

%install
cp usr/lib/* /usr/lib -R

%files
%defattr(-,root,root)
/usr/lib/libpython2.3.so
/usr/lib/libpython2.3.so.1.0

Идём в /usr/src/redhat

cd /usr/src/redhat

Создаём rpm:

rpmbuild -v -bb --clean SPECS/libpython-2.3.4.spec

Получаем нужный пакет, содержащий нужную библиотеку.
Менеджер пакетов rpm регистрирует её, как зависимость и позволяет установку без ключа --nodeps.
Previous post Next post
Up