Автоматический статический анализ с помощью PVS Studio при сборке RPM-пакетов

Возникла задача автоматизировать статический анализ пакетов в составе дистрибутива. Наилучший инструмент для этого — PVS Studio, потому что умеет перехватывать вызовы компилятора с помощью strace, таким образом, не требуя никаких изменений в сборочных скриптах. Сначала под наблюдением pvs-studio-analyzer запускается сборка, собирает лог, затем запускается анализатор этого лога и формируется отчет. Рассмотрим, как такое настроить, избежав внесения правок в каждый пакет.
Читать далее Автоматический статический анализ с помощью PVS Studio при сборке RPM-пакетов

Автоматизация GDB с помощью xdotool

Понадобилось в отладчике gdb очень много раз повторить одинаковое действие, чтобы поймать значения переменных, которые были в момент сегфолта.

Открыл 2 терминала, в одном запустил программу под gdb, поставил точку остановки (breakpoint), запустил (run), другой средствами оконного менеджера закрепил поверх других окон, запустив в нем:
sleep 5; while true ; do xdotool type c && for type in A B ; do xdotool key KP_Enter && xdotool key p && xdotool key space && for i in $type E V R ; do xdotool type $i ; done; done && xdotool key KP_Enter ; sleep 0; if ! ps aux | grep -vE 'gdb|grep' | grep -q '/usr/bin/python3 /usr/bin/livecd-creator' ; then break ; fi; done
Этот код вводит нужные команды в gdb и проверяет, не остановился ли процесс, т.е. не произошел ли сегфолт, а если произошел, то перестает их вводить. Пошел по своим делам, оно само отработало, вернулся, передо мной был наглядный результат.

Хренак, хренак и зарелизили Федору

Выкачал копии репозиториев Fedora, выкачивал так:
Читать далее Хренак, хренак и зарелизили Федору

Изощренное создание %pre скриптлета RPM-пакета из шаблона

Дано:
файл quagga-sysusers.conf («Source3: quagga-sysusers.conf» в RPM-спеке) с таким содержимым:

u @quagga_user@ - "Quagga routing suite user" /run/quagga
g @quagga_user@ -
m @quagga_user@ @quagga_user@
g @vty_group@ -
m @quagga_user@ @vty_group@

При этом хочется использовать этот конфиг systemd-sysusers в предустановочном скриптлете RPM-пакета (%pre). Но нужно шаблоны @quagga_user@ и @vty_group@ заменить на их значения.
Читать далее Изощренное создание %pre скриптлета RPM-пакета из шаблона

Включайте мозг, когда используете чужие пакеты

Пользуясь случаем, на opennet.ru в комментариях рассказал забавную историю про PPA для Ubuntu, выкладываю ее здесь на память.
Читать далее Включайте мозг, когда используете чужие пакеты

Grub2 2.04 с поддержкой сжатия zstd на BTRFS для Ubuntu 18.04 и 19.04

В репозиториях Ubuntu < 19.10 Grub2 2.02, в котором нет поддержки загрузки с корневого раздела BTRFS, сжатого с помощью ZSTD. Собрал Grub2 2.04 из Ubuntu 19.10 для 18.04 и 19.04, в котором есть поддержка загрузки с корневого раздела в btrfs, сжатом zstd. Читать далее Grub2 2.04 с поддержкой сжатия zstd на BTRFS для Ubuntu 18.04 и 19.04

Отладка dlopen (динамической подгрузки) библиотек в Linux/UNIX

Понадобилось узнать, почему FreeIPA выдавала ошибку загрузки библиотеки, не выдавая подробный текст ошибки. Этот способ позволяет выполнять dlopen() библиотек и смотреть, успешно ли прошла операция, и видеть ошибки.
Используется Python CFFI.
Читать далее Отладка dlopen (динамической подгрузки) библиотек в Linux/UNIX

Пример использования valgrind для отладки в т.ч. зависания программы

named-pkcs11 при запуске зависает.
Читать далее Пример использования valgrind для отладки в т.ч. зависания программы