Использование rpm-пакетов в Gentoo

Ссылка на оригинал: http://ylsoftware.com/?action=news&na=viewfull&news=402

Автор: Калинников В.В. a.k.a. MooSe

С версии: 1.5.

Дата оригинала: 15.02.2008



Эта статья написана для сборника статей о Gentoo по просьбе одного из его авторов - Евгения Батогова a.k.a JohnBat26. Здесь я постараюсь описать возможные способы установки rpm-пакетов в Gentoo. Сразу хочу отметить, что в любом случае лучше всего ставить программы из исходных текстов, используя команду emerge. Использовать же rpm нужно только в самом крайнем случае, когда архив с исходными текстами не доступен (например для коммерческих программ).

Итак. Есть два способа установить rpm-пакет:

  1. Установить в систему менеджер пакетов rpm и пользоваться им.

  2. Написать ebuild для распаковки и установки rpm-пакета.

Первый способ проще, но пакет придётся устанавливать с ключом --nodeps и есть большой риск сломать систему или просто получить не рабочий пакет. Второй способ сложнее. Он тоже не решает всех проблем первого, но по крайней даёт возможность избежать поломки системы.

Будем полагать что мы хотим установить в систему пакет prog-0.1.i386.rpm. Независимо от того, какой способ выбран понадобиться утилита rpm:

emerge rpm



Теперь рассмотрим первый способ установки. Для начала полезно просмотреть зависимости пакета:

rpm -qp --qf "[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]" prog-0.1.i386.rpm

Получаем примерно вот такой список:

/bin/bash
/bin/sh
/bin/sh
/bin/sh
/bin/sh
libX11.so.6
libXext.so.6
libXt.so.6
libc.so.6
libc.so.6(GCC_3.0)
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.1.2)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.2)
libc.so.6(GLIBC_2.3)
libdl.so.2
libdl.so.2(GLIBC_2.0)
libdl.so.2(GLIBC_2.1)
libfontconfig.so.1
libfreetype.so.6
libglib-2.0.so.0
libgobject-2.0.so.0
libgtk-x11-2.0.so.0
libm.so.6
libm.so.6(GLIBC_2.0)
libpthread.so.0
libpthread.so.0(GLIBC_2.0)
libpthread.so.0(GLIBC_2.1)
libpthread.so.0(GLIBC_2.2)
libpthread.so.0(GLIBC_2.2.3)
libpthread.so.0(GLIBC_2.3.2)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

Убеждаемся что всё это у нас есть. Если чего-то не хватает - прикидываем в каком пакете оно может быть и ставим этот пакет. Наконец, когда всё что нужно у нас установлено, устанавливаем сам rpm-пакет:

rpm -Uvh --nodeps prog-0.1.i386.rpm

Всё. Пакет установлен. Однако всё-таки лучше было бы написать для него ebuild. Для работы с rpm-пакетами в portage есть класс rpm. Самый простой способ ознакомиться с ним это прочитать его исходный код, которые расположен в файле /usr/portage/eclass/rpm.eclass. Приведу простой пример ebuild'а для установки rpm:

# Подключаем класс rpm
inherit rpm

# Описываем программу
DESCRIPTION="Cool prog"
HOMEPAGE="http://example.com"
SLOT="0"
KEYWORDS="~x86"
IUSE=""
RESTRICT="nomirror"

# Описываем зависимости
DEPENDS="x11-libs/qt"

# Указываем откуда брать пакет
SRC_URI="http://example.com/files/prog-0.1.i386.rpm"

# Дальше всё будет сделано само. Кроме собственно установки.

# Устанавливаем пакет:
src_install() {
        cp -vR ${S}/* ${D}/
}

Дальше нужно сохранить этот ebuild в нужном месте (обратитесь к документации portage) и выполнить:

ebuild /path/to/file.ebuild digest
ebuild /path/to/file.ebuild merge

Всё. Пакет установлен. Причём штатными средствами Gentoo (что немало важно).

Огромное спасибо пользователю Alex за помощь в написании статьи.