Подготовка окружения и скачивание исходников
На этой странице
Подготовка окружения
Установка инструментов
# Установите необходимые инструменты для сборки 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.