Product SiteDocumentation Site

3.2. Сборка с помощью make, tarball

Добавим к пакету автоматическую сборку с применением утилиты make. При этом возникает две задачи:
  • создание единого файла-хранилища исходных данных;
  • списание нового формата сборки исполняемого файла.
Из двух файлов (Makefile и исходный код) соберём архив по правилам разработки RPM-пакетов (почти по правилам, поскольку правильную иерархию поддиректорий внутри архива соблюдать не будем).

Важно

Выполнения команд по сборке архива необходимо делать непосредственно из директории с материалами архива. Выполнение сборки архива из внешних директорий притянет весь путь в архив и нарушит именование файлов.
Для начала создадим директорию будущего архива с именем в формате %name-%version (как этого требуют правила оформления пакета в ALT):
@builder
[builder@localhost ~]$ cd RPM/SOURCES/
[builder@localhost SOURCES]$ mkdir pkg-ncurses-1.1
Перенесём в эту директорию исходный текст программы и добавим Makefile.

Важно

При работе с Makefile в обязательном порядке необходимо использовать табуляцию:
  • между целью рецепта и его зависимостями;
  • при описании самого рецепта.
    @builder: RPM/SOURCES/pkg-ncurses-1.1/Makefile
    CC=cc
    LDLIBS=-lncurses
    CFLAGS=-Wall
    
    %:	%.c
    	$(CC) $(CFLAGS) $< $(LDLIBS) -o $@
    
    all:	pkg-ncurses
    
    clean:
    	rm -f o oo $(EXE) *.o
    
Теперь соберём сам архив с помощью утилиты tar и сожмём его с помощью gzip:
@builder
[builder@localhost SOURCES]$ tar -cf pkg-ncurses-1.1.tar pkg-ncurses-1.1/*
[builder@localhost SOURCES]$ gzip pkg-ncurses-1.1.tar
[builder@localhost SOURCES]$ cd
[builder@localhost ~]$ rm -rf RPM/SOURCES/pkg-ncurses-1.1
Отдельно обсудим появившиеся в spec-файле изменения:
@builder: RPM/SPECS/pkg-ncurses.spec
Name: pkg-ncurses
Version: 1.1
Release: alt1

Summary: Test pkg with ncurses library

License: GPL-3.0-or-later
Group: Development/Other

Source: %name-%version.tar.gz
BuildRequires: libncurses-devel

%description
This is a small testing package with ncurses functionality

%prep
%setup

%build
%make_build

%install
install -D -pm 755 %_builddir/%name-%version/%name %buildroot%_bindir/%name

%files
%_bindir/*

%changelog
  • в преамбуле директива Source указывает на архив исходных файлов;
  • в основную часть добавлена директива %prep, в которой описываются действия по подготовке исходных материалов к сборке. Макрос %setup включает в себя развёртывание архива в RPM/BUILD/ для проведения сборки;
  • в директиве %build макрос %make_build запускает автосборку проекта с помощью make;
  • для утилиты install указывается путь к исполняемого файлу, используется макрос %_builddir для указания пути через RPM/BUILD/.
Сборка и установка пакета проводится успешно:
@builder
[builder@localhost ~]$ tree RPM
RPM
├── BUILD
├── RPMS
│ └── noarch
├── SOURCES
│ └── pkg-ncurses-1.1.tar.gz
├── SPECS
│ └── pkg-ncurses.spec
└── SRPMS

7 directories, 2 files
[builder@localhost ~]$ rpmbuild -ba RPM/SPECS/pkg-ncurses.spec
<...>
Wrote: /usr/src/RPM/SRPMS/pkg-ncurses-1.1-alt1.src.rpm (w2.lzdio)
Wrote: /usr/src/RPM/RPMS/x86_64/pkg-ncurses-1.1-alt1.x86_64.rpm (w2.lzdio)
Wrote: /usr/src/RPM/RPMS/x86_64/pkg-ncurses-debuginfo-1.1-alt1.x86_64.rpm (w2.lzdio)

[builder@localhost ~]$ tree RPM
RPM
├── BUILD
│     └── pkg-ncurses-1.1
│           ├── Makefile
│           ├── pkg-ncurses
│           └── pkg-ncurses.c
├── RPMS
│     ├── noarch
│     └── x86_64
│           ├── pkg-ncurses-1.1-alt1.x86_64.rpm
│           └── pkg-ncurses-debuginfo-1.1-alt1.x86_64.rpm
├── SOURCES
│     └── pkg-ncurses-1.1.tar.gz
├── SPECS
│     └── pkg-ncurses.spec
└── SRPMS
      └── pkg-ncurses-1.1-alt1.src.rpm

9 directories, 9 files
@user
[user@VM ~]$ hsh-shell --rooter
@rooter
[root@localhost .in]# rpm -i /usr/src/RPM/RPMS/x86_64/pkg-ncurses-1.1-alt1.x86_64.rpm
<13>Jul 3 07:15:56 rpm: pkg-ncurses-1.1-alt1 1751526866 installed
[root@localhost .in]#
[root@localhost .in]# pkg-ncurses
[root@localhost .in]#