Ошибка при обновлении glibc: error: format not a string literal and no format arguments [-Werror=format-security]

В платформе rosa2021.1 была версия glibc 2.33, а в новой платформе rosa2023.1, разработку которой начали в самом конце декабря 2022 года, версия glibc 2.36. Компилятор пока что по-прежнему gcc 11. При пересборке некоторых пакетов возникла ошибка:
error: format not a string literal and no format arguments [-Werror=format-security]
Читать далее Ошибка при обновлении glibc: error: format not a string literal and no format arguments [-Werror=format-security]

Зависимости в RPM. Автоматически и вручную проставляемые Requires и Provides. Общая концепция

В системе зависимостей RPM-пакетов есть 2 основные сущности:

  • Provides — предоставляемые пакетом «возможности»,
  • Requires — зависимости пакета — какие «возможности» нужны для работы этого пакета.


В этой статье рассмотрим их общую концепцию. Это актуально и для пользователей, и для сборщиков пакетов. Рассматривать будем на примере дистрибутива ROSA 12 (rosa2021.1).
Читать далее Зависимости в RPM. Автоматически и вручную проставляемые Requires и Provides. Общая концепция

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

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

Изощренное создание %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-пакета из шаблона

Добавлено многопоточное сжатие XZ в RPM 5

В тестингах ROSA 2016.1 RPM 5, наученный упаковывать .rpm и .src.rpm, используя многопоточное сжатие xz.

Сжатие .src.rpm переведено с gzip на xz по умолчанию.
Сжатием .rpm был xz, он и остался, но стал многопоточным по умолчанию.

Пример проверки использованного в пакете сжатия:
Читать далее Добавлено многопоточное сжатие XZ в RPM 5

Автоматизация пересборки зависимых пакетов при обновлении библиотек в Росе

(Эта статья будет дописываться) Как составить список пакетов для пересборки, смотрите статью №698. Нужно сделать текстовый файл с построчным списком пакетов. Предположим, что этот файл называется krb5.list .
Читать далее Автоматизация пересборки зависимых пакетов при обновлении библиотек в Росе

Какие исходные пакеты нужно пересобрать в Росе при обновлении библиотеки до новой мажорной версии

$ ( for i in $(urpmq --whatrequires libllvm6.0); do urpmq --sourcerpm "$i" | awk -F ': ' '{print $2}' | rev | cut -d '-' -f 3- | rev ; done ) | sort | uniq
ldc
lld
llvm
mesa

Более быстро работающий вариант, но ничего не выдает, если у хотя бы одного из пакетов в списке нет обратных зависимостей:
urpmq --whatrequires --sourcerpm lib64krb5_3 lib64kdb5_8 lib64kadm5srv_mit10 lib64kadm5clnt_mit10 lib64krad0 lib64krb5support0 lib64k5crypto3 lib64gssrpc4 lib64gssapi_krb5 | awk -F ': ' '{print $2}' | rev | cut -d '-' -f 3- | rev | sort -u

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

Получаем список коммитов, добавляющих нужный функционал, которые нужно бекпортировать

Сначала ищем, в каких файлах есть нужная строка:
$ grep -inHr BIND_LDAP_SO

install/share/bind.named.conf.template:52:dyndb "ipa" "$BIND_LDAP_SO" {
ipaplatform/base/paths.py:194:    BIND_LDAP_SO = "/usr/lib/bind/ldap.so"
ipaplatform/base/paths.py:201:    BIND_LDAP_SO_64 = "/usr/lib64/bind/ldap.so"
ipaplatform/redhat/paths.py:38:        BIND_LDAP_SO = BasePathNamespace.BIND_LDAP_SO_64
ipaserver/install/bindinstance.py:815:            BIND_LDAP_SO=paths.BIND_LDAP_SO,

Теперь составляем список коммитов, добавлявших эти строки:
$ ( for i in install/share/bind.named.conf.template ipaplatform/base/paths.py ipaplatform/redhat/paths.py ipaserver/install/bindinstance.py ; do git blame $i | grep BIND_LDAP_SO ; done ) | awk '{print $1}' | sort | uniq
4d2ef43f28
e8a2abd548

Превращаем нужные коммиты в файлы-патчи:
$ git format-patch -1 4d2ef43f28

Удалить программу в ROSA Fresh

Сначала узнаем пакет, которому принадлежит основной исполняемый файл docky:
urpmf $(which docky)
Эта команда выполнит команду which docky и подставит в первую команду результат ее выполнения.
urpmf в ответ выдаст название пакета, которому принадлежит основной исполняемый файл docky. Удаляем этот пакет: sudo urpme docky, где вместо docky обнаруженное название пакета, которое в данном случае наверняка будет одноименным.
Т.к. при установке docky в качестве зависимостей были подтянуты другие пакеты, но после удаления docky они останутся, они станут сиротами. Сирота — это пакет, автоматически подтянутый как зависимость, но затем ставший ненужным, когда удалили то, ради чего он ставился.
Команда
sudo urpme --auto-orphans
Но по моим наблюдениям работа этой команды в Росе нестабильна.