Блог

Сборка

Make и GCC: флаги для чистой сборки

Строгие предупреждения и отладочные символы ловят ошибки ещё на этапе компиляции.

Сборка

CMake и Ninja: быстрая сборка вне дерева

Сборка в отдельном каталоге не пачкает исходники, а Ninja пересобирает только изменённое.

Сборка

Сборка deb-пакета с debhelper

Пакет ставится, обновляется и удаляется штатными средствами системы.

Сборка

RPM: пишем spec-файл и собираем пакет

Spec описывает сборку, установку и состав пакета для Fedora, RHEL и их производных.

Ядро

Сборка ядра Linux из исходников

Возьмите конфигурацию работающего ядра и пересоберите её под свои изменения.

Ядро

Свой модуль ядра: hello world

Минимальный модуль показывает цикл загрузки, выгрузки и вывода в журнал ядра.

Ядро

DKMS: модули, которые переживают обновление ядра

DKMS автоматически пересобирает внешние модули при установке нового ядра.

Ядро

bpftrace: трассировка ядра в одну строку

eBPF позволяет смотреть системные вызовы и функции ядра без перезагрузки и пересборки.

Ядро

kselftest: встроенные тесты ядра

В дереве ядра есть автотесты подсистем: сети, таймеров, памяти.

Тестирование

bats: автотесты для shell-скриптов

Тестируйте коды возврата и вывод скриптов так же, как обычный код.

Тестирование

testinfra: проверяем состояние серверов на pytest

Тесты описывают, какими должны быть пакеты, службы и порты после настройки.

Тестирование

stress-ng: нагрузочное тестирование системы

Утилита нагружает процессор, память и диск и показывает пределы системы.

Тестирование

fio: измеряем производительность диска

fio воспроизводит нагрузку приложений: случайное чтение и запись, разные блоки и очереди.

Тестирование

AddressSanitizer и UBSan: ловим ошибки памяти

Компилятор встраивает проверки выхода за границы, утечек и неопределённого поведения.

Тестирование

Valgrind: утечки памяти и профилирование

Valgrind запускает программу в виртуальной среде и находит утечки и чтение неинициализированной памяти.

Тестирование

Фаззинг с AFL++

Фаззер подбирает входные данные, которые роняют программу, и находит уязвимости автоматически.

Тестирование

Linux Test Project: регрессионные тесты ядра

LTP проверяет системные вызовы и подсистемы ядра тысячами тестов.

CI/CD

GitLab CI: сборка и тесты на каждый коммит

Конвейер из стадий собирает проект и запускает тесты в чистом контейнере.

CI/CD

GitHub Actions для C-проектов

Workflow запускает сборку и тесты при каждом push и pull request.

CI/CD

pre-commit: проверки до коммита

Хуки запускают линтеры и форматирование раньше, чем код попадёт в репозиторий.

Отладка

GDB: пошаговая отладка

Точки останова, стек вызовов и локальные переменные помогают найти причину сбоя.

Отладка

strace: что программа делает на самом деле

Трассировка системных вызовов показывает открытые файлы, сетевые вызовы и ошибки доступа.

Отладка

perf: профилирование без перекомпиляции

perf показывает, где программа тратит процессорное время, вплоть до функций ядра.

Отладка

git bisect: ищем коммит, сломавший сборку

Бинарный поиск по истории находит виновный коммит за считанные шаги.

Отладка

Core dump и coredumpctl

Дамп памяти упавшего процесса позволяет разобрать сбой уже после того, как он случился.

Окружения

QEMU: запускаем собранное ядро за секунды

Виртуальная машина с минимальным образом проверяет ядро без перезагрузки основной системы.

Окружения

Docker-образ для воспроизводимой сборки

Единый образ с компилятором и инструментами даёт всей команде одинаковую среду.

Окружения

systemd-nspawn: лёгкие окружения для тестов

Контейнер с полноценной системой запускается за секунды и не требует Docker.