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

ROSARIUM

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

Практикумы

Пошаговые разборы упаковки реальных Open Source проектов.

Теория изучена — пора применить знания на практике. Каждый практикум — это пошаговый разбор упаковки реального проекта с подробным объяснением всех трудностей, типичных ошибок и путей их решения.

Зачем практикумы

  • Реальные примеры — не абстрактные задачи, а настоящие проекты
  • Типичные проблемы — с чем вы столкнётесь на практике и как это исправить
  • Пошаговые инструкции — от скачивания до публикации
  • Разные технологии — C, Rust, Python, Go, C++/CMake, Meson
  • Ошибки новичков — каждый практикум содержит разбор типичных ошибок с реальными сообщениями

Список практикумов

Во всех практикумах версии приведены как пример — перед сборкой проверьте актуальный релиз upstream.

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

Проект: GNU Hello
Система сборки: Autotools
Сложность: Начальная

Классический пример для первой сборки. Полный цикл: от rpmdev-setuptree до установки. Подробный разбор каждого этапа сборки, путей файлов, макросов RPM.


Практикум 2: Rust CLI-утилита (ripgrep)

Проект: ripgrep (rg)
Система сборки: Cargo
Сложность: Средняя

Упаковка Rust-программы с vendoring зависимостей. Объяснение офлайн-сборки для ABF, работа с .cargo/config.toml, man-страницы и shell completions.


Практикум 3: Python-приложение (httpie)

Проект: httpie
Система сборки: pyproject
Сложность: Средняя

Python-приложение с зависимостями и CLI. Разбор %pyproject_* макросов, noarch vs архитектурно-зависимые пакеты, site-packages и entry_points.


Практикум 4: Библиотека с подпакетом -devel (libyaml)

Проект: libyaml
Система сборки: Autotools
Сложность: Средняя

Разделение на runtime и -devel. Подробно: SONAME, ldconfig, .la-файлы, pkgconfig, %{?_isa}, глобы для версионированных .so.


Практикум 5: CMake-проект (fmt)

Проект: fmt
Система сборки: CMake
Сложность: Средняя

Особенности CMake-сборки: out-of-source, %cmake-макросы, BUILD_SHARED_LIBS, CMake config vs pkgconfig, ctest.


Практикум 6: Патчи и backport (htop)

Проект: htop
Сложность: Продвинутая

Создание патчей через git format-patch, backport из upstream через cherry-pick, уровни -p0/-p1/-p2, конфликты и .rej-файлы, когда патч не нужен.


Практикум 7: Meson-проект (gamemode)

Проект: gamemode
Система сборки: Meson + Ninja
Сложность: Продвинутая

Meson-проект с systemd-интеграцией, D-Bus, shared library и подпакетами. Макросы %meson, %meson_build, %meson_install, опции Meson.


Практикум 8: Go-приложение (lazygit)

Проект: lazygit
Система сборки: Go modules
Сложность: Средняя

Go-приложение с vendoring, статической линковкой, встраиванием версии через -ldflags -X. Особенности Go: GOPROXY=off, CGO_ENABLED, размер бинарника.

Как проходить практикумы

  1. Читайте последовательно — каждый шаг важен
  2. Повторяйте на своей системе — практика закрепляет
  3. Экспериментируйте — пробуйте варианты
  4. При ошибках — анализируйте — это часть обучения
  5. Читайте «Ошибки новичков» — даже если у вас всё получилось с первого раза

Требования

  • Настроенное окружение для сборки (см. Начальный уровень, Модуль 3)
  • Аккаунт на ABF (для публикации)
  • Базовые знания из теоретических модулей