Skip to content


Создание rpm-пакета

Иногда бывает, что на поиск нужной RPM-ки уходит времени больше, чем на создание своей из исходников. Например, RPM-пакет pptpd 1.3.4 более недоступен по ссылке, которая была в посте об установке pptpd. А мне он как раз понадобился при настройке очередного VPN-сервера. Выход как всегда есть. Рассмотрим на примере pptpd создание rpm-пакета на основе исходных текстов, запакованных в классический tarball с раширением .tar.gz.

  1. Качаем tarball отсюда: http://sourceforge.net/projects/poptop/files/
  2. Устанавливаем пакет rpm-build:
    1. [root@server]# yum install rpm-build
    2. Setting up Install Process
    3. Resolving Dependencies
    4. --> Running transaction check
    5. ---> Package rpm-build.i386 0:4.4.2.3-20.el5_5.1 set to be updated
    6. --> Processing Dependency: elfutils for package: rpm-build
    7. --> Running transaction check
    8. ---> Package elfutils.i386 0:0.137-3.el5 set to be updated
    9. --> Processing Dependency: elfutils-libs-i386 = 0.137-3.el5 for package: elfutils
    10. --> Processing Dependency: libdw.so.1(ELFUTILS_0.127) for package: elfutils
    11. --> Processing Dependency: libdw.so.1(ELFUTILS_0.122) for package: elfutils
    12. --> Processing Dependency: libasm.so.1 for package: elfutils
    13. --> Processing Dependency: libdw.so.1(ELFUTILS_0.130) for package: elfutils
    14. --> Processing Dependency: libdw.so.1 for package: elfutils
    15. --> Processing Dependency: libasm.so.1(ELFUTILS_1.0) for package: elfutils
    16. --> Processing Dependency: libdw.so.1(ELFUTILS_0.126) for package: elfutils
    17. --> Running transaction check
    18. ---> Package elfutils-libs.i386 0:0.137-3.el5 set to be updated
    19. --> Finished Dependency Resolution
    20. Dependencies Resolved
    21. ===================================================================
    22.  Package     Arch    Version         Repository  Size
    23. ===================================================================
    24. Installing:
    25.  rpm-build      i386   4.4.2.3-20.el5_5.1   updates    302 k
    26. Installing for dependencies:
    27.  elfutils       i386   0.137-3.el5          base       228 k
    28.  elfutils-libs  i386   0.137-3.el5          base       193 k
    29. Transaction Summary
    30. ===================================================================
    31. Install       3 Package(s)
    32. Upgrade       0 Package(s)
    33.  
    34. Total download size: 723 k
    35. Is this ok [y/N]: y
    36. Downloading Packages:
    37. (1/3): elfutils-libs-0.137-3.el5.i386.rpm               | 193 kB   00:00
    38. (2/3): elfutils-0.137-3.el5.i386.rpm                    | 228 kB   00:00
    39. (3/3): rpm-build-4.4.2.3-20.el5_5.1.i386.rpm            | 302 kB   00:00
    40.  
    41. Total                                            842 kB/s | 723 kB 00:00
    42. Running rpm_check_debug
    43. Running Transaction Test
    44. Finished Transaction Test
    45. Transaction Test Succeeded
    46. Running Transaction
    47.   Installing     : elfutils-libs                                1/3
    48.   Installing     : elfutils                                     2/3
    49.   Installing     : rpm-build                                    3/3
    50. Installed:
    51.   rpm-build.i386 0:4.4.2.3-20.el5_5.1
    52. Dependency Installed:
    53.   elfutils.i386 0:0.137-3.el5  elfutils-libs.i386 0:0.137-3.el5
    54. Complete!

    Возможно, также еще потребуется С-компилятор, такой как gcc (если еще не установлен).

  3. Собираем пакет:
    1. [root@server]# rpmbuild -tb /tmp/pptpd-1.3.4.tar.gz
  4. Находим вновьсозданную rpm-ку:
    1. [root@server]# ls -l /usr/src/redhat/RPMS/i386/
    2. -rw-r--r-- 1 root root 84570 Nov  5 22:18 pptpd-1.3.4-1.i386.rpm
  5. Устанавливаем:
    1. [root@server]# rpm -ivh /usr/src/redhat/RPMS/i386/pptpd-1.3.4-1.i386.rpm

Если пакет собирается обычным юзером, не обладающим привилегиями суперпользователя, то доступа на запись в директорию /usr/src/redhat у него, ясное дело, нет. В этой ситуации можно явно указать rpmbuild-у рабочие директории следующим образом:

  1. WD=$HOME/tmp/rpmtop
  2. [ ! -d $WD ] && mkdir -p $WD
  3. mkdir -p $WD/{SOURCES,BUILD,SPECS,SRPMS,RPMS/`uname -m`}
  4. echo "%_topdir $WD" >> $HOME/.rpmmacros

Во 3-ей строке команда "uname -m" вернёт конкретную, используемую Вами архитектуру. В большинстве случаев это “i386”. У меня - “x86_64”.

Можно также собирать rpm-пакет из src.rpm. Например, мне как-то нужно было поставить на кучу серверов сразу с CentOS x86_64 пакет tinyproxy. В том пакете, который мне удалось найти в известных мне репозиториях (EPEL, RPMForge), был кривой init-скрипт, в котором был неправильно указан путь к бинарнику (/usr/bin/tinyproxy вместо /usr/sbin/tinyproxy) и путь к pid-файлу, что приводило к невозможности запустить сервис штатными средствами без доработки напильником стартового скрипта /etc/init.d/tinyproxy на каждом сервере. К тому же, конфиг-файл по умолчанию меня несколько не устраивал, поэтому я решил всё это один раз подредактировать и создать свою RPM-ку, которую потом простым скриптом можно было сразу проинсталлировать на все сервера. Далее я нашёл tinyproxy-1.8.2-1.fc14.src.rpm и распаковал его:

  1. # rpm2cpio < tinyproxy-1.8.2-1.fc14.src.rpm | cpio -i
  2. 430 blocks
  3. # ls -la
  4. total 488
  5. drwxrwxr-x  2 avz avz   4096 Apr 13 13:13 .
  6. drwx------ 10 avz avz   4096 Apr 13 13:13 ..
  7. -rw-r--r--  1 avz avz 214619 Apr 12 14:51 tinyproxy-1.8.2-1.fc14.src.rpm
  8. -rw-rw-r--  1 avz avz 202931 Apr 13 13:13 tinyproxy-1.8.2.tar.bz2
  9. -rw-r--r--  1 avz avz  10147 Apr 13 13:13 tinyproxy.conf
  10. -rw-r--r--  1 avz avz   1906 Apr 13 13:13 tinyproxy.init
  11. -rw-r--r--  1 avz avz    252 Apr 13 13:13 tinyproxy.logrotate
  12. -rw-r--r--  1 avz avz   4109 Apr 13 13:13 tinyproxy.spec

Теперь редактируем файлы tinyproxy.init и tinyproxy.conf (при необходимости). В файл tinyproxy.spec в раздел changelog пишем чего же мы такого ценного привнесли своими изменениями (это необязательно, просто правило хорошего тона) и собственно собираем rpm-ку:

  1. # mv tinyproxy-1.8.2.tar.bz2 tinyproxy.conf tinyproxy.init tinyproxy.logrotate /usr/src/redhat/SOURCES
  2. # rpmbuild -ba tinyproxy.spec

Если всё прошло успешно (нет ошибок от make), то сможем наблюдать появление правильной RPM-ки, которую и можно ставить на все сервера сразу:

  1. # ls /usr/src/redhat/RPMS/`uname -m`/tin*
  2. /usr/src/redhat/RPMS/x86_64/tinyproxy-1.8.2-1.x86_64.rpm

Ключик -ba, кстати, также создаёт и src.rpm в директории /usr/src/redhat/SRPMS --- может пригодиться при последующих пересборках. Если же make выдаёт ошибки, то надо разбираться и чинить. В моём случае, например, пришлось установить пакет docbook-style-xsl, потому что без него man-файлы почему-то не создавались в процессе сборки.

Силотерм эп-6м производство и поставка кабельного покрытия Силотерм www.elox-prom.ru. .

Размещено в категории *nix, Howto. Теги: , , , .

Комментариев: 1

Чтобы быть всегда в курсе здесь происходящего, Вы можете подписаться на RSS feed для комментариев на эту заметку.

  1. Если во время сборки пакета вылазит ошибка "error: Installed (but unpackaged) file(s) found", то нужно перечислить эти файлы в секции %files .spec-файла.

Some HTML is OK

(required)

(required, but never shared)

, или ответить через trackback.

Страница 1 из 11