Практикумы
Пошаговые разборы упаковки реальных 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, размер бинарника.
Как проходить практикумы
- Читайте последовательно — каждый шаг важен
- Повторяйте на своей системе — практика закрепляет
- Экспериментируйте — пробуйте варианты
- При ошибках — анализируйте — это часть обучения
- Читайте «Ошибки новичков» — даже если у вас всё получилось с первого раза
Требования
- Настроенное окружение для сборки (см. Начальный уровень, Модуль 3)
- Аккаунт на ABF (для публикации)
- Базовые знания из теоретических модулей