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

ROSARIUM

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

Подготовка окружения и скачивание исходников

На этой странице

Подготовка окружения

Установка инструментов

# Установите необходимые инструменты для сборки RPM
sudo dnf install rpm-build rpmdevtools rpmlint gcc make gettext

Что устанавливается:

  • rpm-build — сама программа rpmbuild, которая собирает пакеты
  • rpmdevtools — вспомогательные скрипты, в том числе rpmdev-setuptree
  • rpmlint — линтер, проверяет пакет на типичные ошибки
  • gcc — компилятор C (GNU Hello написан на C)
  • make — утилита сборки, выполняет команды из Makefile
  • gettext — инструменты для работы с переводами (i18n)

Создание дерева каталогов

rpmdev-setuptree

Эта команда создает в вашем домашнем каталоге структуру для сборки RPM:

~/rpmbuild/
├── BUILD/       # Здесь распаковываются и компилируются исходники
├── BUILDROOT/   # «Фальшивый корень» — сюда make install ставит файлы
├── RPMS/        # Сюда попадают готовые бинарные RPM-пакеты
│   └── x86_64/  # (подкаталог для вашей архитектуры)
├── SOURCES/     # Сюда кладем исходные архивы и патчи
├── SPECS/       # Сюда кладем SPEC-файлы (рецепты сборки)
└── SRPMS/       # Сюда попадают исходные (source) RPM-пакеты

Важно понимать: каждый каталог имеет свою роль. Когда вы запускаете rpmbuild, она ищет архивы строго в ~/rpmbuild/SOURCES/, а SPEC-файлы — в ~/rpmbuild/SPECS/. Если положить файлы не туда, rpmbuild их просто не найдет.

Проверьте себя: выполните ls ~/rpmbuild/ — вы должны увидеть все шесть каталогов. Если каталог не создался, значит rpmdev-setuptree не был выполнен или завершился с ошибкой.

Скачивание исходников

cd ~/rpmbuild/SOURCES

# Скачать архив с исходным кодом GNU Hello
curl -LO https://ftp.gnu.org/gnu/hello/hello-2.12.1.tar.gz

Разберем команду:

  • cd ~/rpmbuild/SOURCES — переходим в каталог для исходников. Файл нужно положить именно сюда, потому что rpmbuild при обработке тега Source0 в SPEC-файле ищет архив по имени в этом каталоге.
  • curl -LO — скачивает файл. Флаг -L следует за перенаправлениями (HTTP 301/302), флаг -O сохраняет файл с оригинальным именем (в данном случае hello-2.12.1.tar.gz).

Проверяем, что скачалось правильно

# Убедимся, что файл на месте и не пустой
ls -lh ~/rpmbuild/SOURCES/hello-2.12.1.tar.gz

Вы должны увидеть что-то вроде:

-rw-r--r-- 1 user user 1.1M Feb  3 12:00 /home/user/rpmbuild/SOURCES/hello-2.12.1.tar.gz

Если размер файла 0 или несколько байт — скачивание не удалось. Проверьте URL и интернет-соединение.

# Посмотрим содержимое архива (первые 5 файлов)
tar tzf hello-2.12.1.tar.gz | head -5

Ожидаемый вывод:

hello-2.12.1/
hello-2.12.1/ABOUT-NLS
hello-2.12.1/AUTHORS
hello-2.12.1/COPYING
hello-2.12.1/ChangeLog

Обратите внимание: корневой каталог в архиве — hello-2.12.1/. Это важно! Макрос %autosetup ожидает, что архив распакуется в каталог %{name}-%{version} (то есть hello-2.12.1). Если бы каталог назывался иначе, потребовалось бы указать -n имя_каталога в %autosetup.