05 марта 2026 № 1 (2026)

ROSARIUM

газета советского программиста

Практикум 1: Простая C-программа

Пошаговая упаковка GNU Hello — классический пример для изучения основ.

В этом практикуме мы упакуем GNU Hello — простую программу, которая идеально подходит для первого опыта. Мы пройдем весь путь от скачивания исходников до готового RPM-пакета и разберем каждый шаг максимально подробно, чтобы вы понимали не только что делать, но и почему.

Что вы узнаете

  • Полный цикл упаковки от начала до конца
  • Работу с системой сборки Autotools (configure/make)
  • Базовую структуру SPEC-файла — с объяснением каждой строки
  • Проверку качества с rpmlint
  • Как находить и исправлять типичные ошибки новичков
  • Что происходит «за кулисами» при сборке RPM

О проекте

GNU Hello — это «Hello, World!» от GNU Project. Несмотря на простоту, он демонстрирует все стандарты GNU:

  • Autotools-сборка (configure/make/make install)
  • Интернационализация (i18n) — переводы на десятки языков
  • Man и info документация
  • Полный набор стандартных файлов (COPYING, README, NEWS, AUTHORS и т.д.)

Именно поэтому GNU Hello используется как эталон для обучения упаковке — он маленький, но «настоящий».

Что такое Autotools и зачем это нужно

Прежде чем собирать пакет, давайте разберемся, что такое Autotools — система сборки, которую использует GNU Hello (и сотни других проектов).

Autotools — это набор инструментов GNU для автоматизации сборки ПО на разных Unix-системах. Когда вы видите в архиве файл configure, это значит, что проект использует Autotools.

Цикл сборки Autotools-проекта всегда одинаковый:

./configure    # Проверяет систему: есть ли нужный компилятор, библиотеки и т.д.
               # Создает Makefile, подставляя правильные пути для ВАШЕЙ системы
make           # Компилирует программу по правилам из Makefile
make install   # Копирует скомпилированные файлы в нужные каталоги системы

Зачем это нужно? Представьте, что программа должна работать и на Debian, и на Fedora, и на macOS, и на FreeBSD. У каждой системы свои пути, свои версии библиотек, свои особенности. Скрипт configure автоматически определяет все это и настраивает сборку.

В RPM-упаковке мы не вызываем эти команды напрямую — вместо них используем макросы:

  • %configure вместо ./configure (макрос автоматически подставляет правильные пути ROSA)
  • %make_build вместо make (добавляет параллельную сборку -j$(nproc))
  • %make_install вместо make install (устанавливает в %{buildroot}, а не в реальную систему)

Содержание практикума