2.11. Сборка пакетов по исходным текстам

Проблема

Установить готовый пакет не удается из-за того, что он несовместим с вашей системой на двоичном уровне. А может, вы просто предпочитаете компилировать приложения в своей системе или хотите сначала отредактировать исходный код, а затем построить пакет.

Решение

Постройте новую программу из пакета RPM с исходными текстами (SRPM, Source RPM). Загрузите SRPM (в данном примере tuxpaint-2002.10.20-l.src.rpm) в каталог по вашему усмотрению. Проследите за тем, чтобы он подходил для вашей поставки Linux.

Запустите программу установки пакета:

# rpm -ivh tuxpaint-2002.10.20-l.src.rpm

Команда помещает исходные тексты в каталог /usr/src/SOURCES, а файл spec — в каталог /usr/src/SPECS:

# ls /usr/src/SOURCES
tuxpaint-2002.09.29.tar.gz tuxpaint-Makefile.patch tuxpaint-stamps-2002.09.29.tar.gz
tuxpaint.desktop tuxpaint-opt.patch

$ ls /usr/src/SPECS
tuxpaint.spec

Далее построите файл spec:

# rpmbuild -bb tuxpaint.spec

Новый пакет RPM создается в каталоге /usr/src/RPMS/i386:

# ls /usr/src/RPMS/i386
tuxpaint-2002.10.20-1.i386.rpm

Теперь у вас имеется новый пакет RPM с программой Tuxpaint, откомпилированный для вашей системы.

Комментарий

В вашей системе исходные тексты могут храниться в другом каталоге. В Fedora 1, как и в некоторых ранних версиях, используется каталог /usr/src/redhat/RPMS/. В других поставках используется каталог /usr/src/RPM/RPMS. Разберитесь, и вы найдёте нужный каталог.

Построение пакетов по исходным текстам не избавляет от «кошмара RPM». Оно всего лишь гарантирует двоичную совместимость с системными библиотеками и оптимизацию RPM для архитектуры вашей системы. Соблюдение зависимостей придется обеспечивать вручную, а это далеко не так просто, как кажется.

Обратите внимание: rpmbuild и rpm — два отдельных пакета.

См. также

rpmbuild(8), rpm(8); RPM.org (http://rpm.org/); Maximum PRM (http://www.rpm.org/max-rpm/index.html).