From 1172683d9aa2a0c09531227861744671125ca0bb Mon Sep 17 00:00:00 2001 From: Dmitrii Krosh Date: Mon, 20 Jul 2026 21:58:04 +0300 Subject: [PATCH] some structure refactor --- .gitignore | 5 - Docs/TODO.md | 19 - .../compare-sisyphus-set-versions.md | 0 for_me.md => Docs/more/for_me.md | 0 Docs/{set:version => more}/raw_data.md | 0 Docs/more/rpmquery-alt-linux.md | 444 ++++++++++++++++++ .../more/usage_setc_rpm.md | 0 .../more/usage_setc_rpm_build.md | 0 Docs/{set:version.md => set:version_ru.md} | 0 README.md | 4 +- scripts/{ => old}/check_alt_set_impl.py | 0 scripts/{ => old}/check_arch_set_impl.py | 0 .../{ => old}/compare_binary_with_lib_sets.py | 0 scripts/{ => old}/compare_cmp_realization.py | 0 scripts/{ => old}/compare_realization.py | 0 scripts/{ => old}/run_cmp.cpp | 0 scripts/{ => old}/run_set.cpp | 0 .../check_sisyphus_set_relations.sh | 0 scripts/{ => rpmsetcmp}/newset_compat.h | 0 .../compare_sisyphus_set_versions.sh | 0 .../completed_set_versions.awk | 0 scripts/rpmsetinit/newset_compat.h | 48 ++ scripts/{ => rpmsetinit}/newset_mkset.c | 0 .../parse_sisyphus_packages.awk | 0 .../{ => rpmsetinit}/rpm_payload_safety.sh | 0 tt | 11 - 26 files changed, 493 insertions(+), 38 deletions(-) delete mode 100644 Docs/TODO.md rename Docs/{ => more}/compare-sisyphus-set-versions.md (100%) rename for_me.md => Docs/more/for_me.md (100%) rename Docs/{set:version => more}/raw_data.md (100%) create mode 100644 Docs/more/rpmquery-alt-linux.md rename usage_setc_rpm.md => Docs/more/usage_setc_rpm.md (100%) rename usage_setc_rpm_build.md => Docs/more/usage_setc_rpm_build.md (100%) rename Docs/{set:version.md => set:version_ru.md} (100%) rename scripts/{ => old}/check_alt_set_impl.py (100%) rename scripts/{ => old}/check_arch_set_impl.py (100%) rename scripts/{ => old}/compare_binary_with_lib_sets.py (100%) rename scripts/{ => old}/compare_cmp_realization.py (100%) rename scripts/{ => old}/compare_realization.py (100%) rename scripts/{ => old}/run_cmp.cpp (100%) rename scripts/{ => old}/run_set.cpp (100%) rename scripts/{ => rpmsetcmp}/check_sisyphus_set_relations.sh (100%) rename scripts/{ => rpmsetcmp}/newset_compat.h (100%) rename scripts/{ => rpmsetinit}/compare_sisyphus_set_versions.sh (100%) rename scripts/{ => rpmsetinit}/completed_set_versions.awk (100%) create mode 100644 scripts/rpmsetinit/newset_compat.h rename scripts/{ => rpmsetinit}/newset_mkset.c (100%) rename scripts/{ => rpmsetinit}/parse_sisyphus_packages.awk (100%) rename scripts/{ => rpmsetinit}/rpm_payload_safety.sh (100%) delete mode 100644 tt diff --git a/.gitignore b/.gitignore index d8e43a0..3b1bb31 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,5 @@ *.o -rpmquery-alt-linux.md -rpmset -rpmset-new -run_set - # Generated benchmark results /res/ /res_cmp/ diff --git a/Docs/TODO.md b/Docs/TODO.md deleted file mode 100644 index c790ea8..0000000 --- a/Docs/TODO.md +++ /dev/null @@ -1,19 +0,0 @@ -# TODO - -just to-do for krosh. - -- [ ] Описать работу кода set.c - - [ ] Общий "скелет" - - [ ] часть вводов-выводов - - [ ] hash часть - - [ ] delta часть - - [ ] golomb часть - - [ ] base62(64) часть -- [ ] Протестировать, понять процент прироста от optimized кода -- [ ] research - - [ ] хэши, оптимальный ли этот, подходят ли другие - - точно были вопросы к коллизиям + кодировкам изначального ascii (условно много повторов на одинаковых наборах) - - [ ] кодировки, существование и применимость других - - [ ] реализация base62 -- [ ] Написать "аналог" на другом ЯП (Python?) - - решить, какие использовать хэш функции, функции кодирования и т.д. diff --git a/Docs/compare-sisyphus-set-versions.md b/Docs/more/compare-sisyphus-set-versions.md similarity index 100% rename from Docs/compare-sisyphus-set-versions.md rename to Docs/more/compare-sisyphus-set-versions.md diff --git a/for_me.md b/Docs/more/for_me.md similarity index 100% rename from for_me.md rename to Docs/more/for_me.md diff --git a/Docs/set:version/raw_data.md b/Docs/more/raw_data.md similarity index 100% rename from Docs/set:version/raw_data.md rename to Docs/more/raw_data.md diff --git a/Docs/more/rpmquery-alt-linux.md b/Docs/more/rpmquery-alt-linux.md new file mode 100644 index 0000000..4691786 --- /dev/null +++ b/Docs/more/rpmquery-alt-linux.md @@ -0,0 +1,444 @@ +# `rpmquery` в ALT Linux + +## Краткий вывод + +`rpmquery` — отдельная точка входа в тот же механизм запросов RPM, что и +`rpm -q`. В ALT Linux p11 `/usr/bin/rpmquery` является символьной ссылкой на +ELF-программу `/usr/lib/rpm/rpmq`; имя запуска заранее включает режим запроса, +поэтому `-q` обычно не нужен: + +```sh +rpmquery rpm +rpmquery -q rpm +rpm -q rpm +``` + +Все три команды дают один и тот же результат. При этом `rpmquery` не является +интерфейсом к репозиторию APT: без `-p` он читает только установленную базу RPM, +по умолчанию `/var/lib/rpm`. Для поиска доступных, но не установленных пакетов +нужны `apt-cache`, `apt-get` или веб/RDB-интерфейсы ALT. + +Исследование проверено на официальном контейнере `alt:p11`, обновлённом до +`rpm-4.13.0.1-alt45.x86_64`, и по ветке `p11` исходников RPM, commit +`7e71ed3da438289d916f1cccc9c0a83e594455dc`. + +## Где ищет `rpmquery` + +| Вызов | Источник данных | +|---|---| +| `rpmquery NAME` | установленная база RPM | +| `rpmquery -a` | все пакеты из установленной базы RPM | +| `rpmquery -p FILE.rpm` | заголовок указанного RPM-файла, установка не требуется | +| `rpmquery --root ROOT ...` | база и файловая система относительно `ROOT` | +| `rpmquery --dbpath DIR ...` | явно указанная база RPM | + +Практическая граница была проверена так: `apt-cache show strace` находил пакет +в p11, тогда как `rpmquery strace` отвечал `package strace is not installed` и +завершался с кодом `1`. + +## Работа с APT-репозиторием + +APT-RPM загружает индексы подключённых репозиториев в `/var/lib/apt/lists`. +Обычный порядок работы: + +```sh +# Показать настроенные источники ALT, если установлен пакет apt-repo. +apt-repo + +# Обновить локальные индексы после изменения источников. +apt-get update +``` + +В минимальных контейнерах `apt-repo` может отсутствовать; источники всё равно +задаются файлами `/etc/apt/sources.list` и `/etc/apt/sources.list.d/*.list`. + +Сами `pkglist.*` являются бинарными header-list файлами RPM, поэтому искать в +них обычным `grep` не следует. Для доступа к кэшу предназначен `apt-cache`: + +| Задача | Команда | +|---|---| +| Поиск по имени и описанию | `apt-cache search REGEX` | +| Перечень имён | `apt-cache pkgnames` | +| Выбранная версия и приоритеты источников | `apt-cache policy PACKAGE` | +| Полная доступная запись, включая версии зависимостей | `apt-cache show PACKAGE` | +| Граф разрешения зависимостей | `apt-cache depends PACKAGE` | +| Обратные зависимости | `apt-cache whatdepends PACKAGE` | +| Низкоуровневое представление версий и зависимостей | `apt-cache showpkg PACKAGE` | +| Метаданные исходного пакета | `apt-cache showsrc PACKAGE` | +| Все доступные записи репозиториев | `apt-cache dumpavail` | +| Проверка плана установки без изменений | `apt-get -s install PACKAGE` | +| Только скачать бинарный пакет и зависимости | `apt-get -d install PACKAGE` | +| Скачать исходники | `apt-get source PACKAGE` | + +`apt-cache depends` удобен для просмотра найденных провайдеров, но в его +обычном выводе set-версия зависимости теряется. Для полных set-строк нужны +`apt-cache show`, `apt-cache showpkg`, скачанный RPM или RDB API. + +## Set-строки пакета из APT-репозитория + +### Способ 1: прямо из локального кэша APT + +Это самый короткий способ, установка и скачивание RPM не нужны: + +```sh +pkg=libdw + +# Сначала проверить, какую версию и из какого источника выбрал APT. +apt-cache policy "$pkg" + +# Полные поля с set-Requires и set-Provides. +apt-cache show "$pkg" | +sed -n -E '/^(Pre-Depends|Depends|Provides):/p' | +grep -F 'set:' +``` + +В проверенном p11 поля имели вид: + +```text +Depends: ... liblzma.so.5()(64bit) (>= set:kiyIz7cr3p0), ... +Provides: libdw.so.1()(64bit) (= set:ldm5ZH1pjPBqjZ9bdJbLDnKGbC1hkJSX...) +``` + +`Depends` и `Pre-Depends` соответствуют требованиям пакета, `Provides` — тому, +что пакет предоставляет. `apt-cache show` может вывести несколько записей, +если в подключённых источниках доступны разные версии; выбранный кандидат +виден в `apt-cache policy`. + +Для выгрузки всего подключённого репозитория можно использовать: + +```sh +apt-cache dumpavail >available.txt +grep -E '^(Pre-Depends|Depends|Provides):.*set:' available.txt +``` + +В отличие от HTML-страниц `packages.altlinux.org`, кэш APT содержит полные +set-строки без визуального многоточия. + +### Способ 2: скачать RPM через APT и запросить его заголовок + +Это наиболее точный локальный способ: выводятся исходные массивы тегов RPM и +их удобно преобразовать в TSV. `apt-get -d` скачивает также отсутствующие +зависимости, но ничего не устанавливает. + +```sh +pkg=strace +cache=$(mktemp -d) +trap 'rm -rf "$cache"' EXIT +mkdir -p "$cache/partial" + +apt-get -y -d \ + -o "Dir::Cache::archives=$cache" \ + install "$pkg" + +rpmfile=$(find "$cache" -maxdepth 1 -type f \ + -name "${pkg}_*.rpm" -print -quit) +``` + +Set-Requires выбранного пакета: + +```sh +rpmquery -p --qf \ + '[%{REQUIRENAME}\t%{REQUIREFLAGS:depflags}\t%{REQUIREVERSION}\n]' \ + "$rpmfile" | +awk -F '\t' '$3 ~ /^set:/' +``` + +Set-Provides выбранного пакета: + +```sh +rpmquery -p --qf \ + '[%{PROVIDENAME}\t%{PROVIDEFLAGS:depflags}\t%{PROVIDEVERSION}\n]' \ + "$rpmfile" | +awk -F '\t' '$3 ~ /^set:/' +``` + +Для `strace-7.0-alt1.x86_64.rpm` в p11 получены два требования: + +```text +libdw.so.1()(64bit) >= set:lgHyMNBkvSTjjY0en8Yi3vFojgjVM7jRsRF4zCFBzNVmhhGF +libselinux.so.1()(64bit) >= set:liZ0N709Wr2dbKPs2 +``` + +Set-Provides у этого пакета нет: исполняемый `strace` требует библиотеки, но не +экспортирует собственную разделяемую библиотеку. У скачанного вместе с ним +пакета `libdw` присутствует длинный Provide +`libdw.so.1()(64bit) = set:...`. + +Если пакет уже установлен и APT не скачивает его повторно, его заголовок можно +прочитать напрямую командой `rpmquery PACKAGE`; для гарантированного получения +конкретного репозиторного RPM удобнее использовать RDB API. + +### Способ 3: структурированные данные RDB API + +RDB удобен для автоматизации, другой ветки/архитектуры и больших выборок. Он +возвращает полные строки и явно различает `provide`, `require` и `conflict`: + +```sh +branch=p11 +arch=x86_64 +pkg=libdw + +hash=$(curl -fsS \ + "https://rdb.altlinux.org/api/site/pkghash_by_binary_name?branch=$branch&name=$pkg&arch=$arch" | + jq -r '.pkghash') + +curl -fsS \ + "https://rdb.altlinux.org/api/dependencies/binary_package_dependencies/$hash" | +jq -r ' + .dependencies[] + | select( + (.type == "provide" or .type == "require") and + (.version | startswith("set:")) + ) + | [.type, .name, .version] + | @tsv +' +``` + +Проверенный результат для `libdw` содержит один set-Provide и четыре +set-Requires. Поле `flag_decoded` того же JSON позволяет восстановить оператор: +`RPMSENSE_EQUAL` для обычного Provide и +`RPMSENSE_GREATER` + `RPMSENSE_EQUAL` для `>=` Require. + +Через RDB можно также получить URL самого RPM: + +```sh +curl -fsS \ + "https://rdb.altlinux.org/api/site/package_downloads_bin/$hash?branch=$branch&arch=$arch" | +jq -r '.downloads[].packages[].url' +``` + +## Основные запросы + +### Пакет и его метаданные + +```sh +# Версия установленного пакета в стандартном формате NVRA. +rpmquery rpm + +# Подробная информация. В ALT вывод включает DistTag. +rpmquery -i rpm +rpmquery --info rpm + +# Стабильный формат для скрипта. +rpmquery --qf '%{NAME}|%{EPOCHNUM}|%{VERSION}|%{RELEASE}|%{DISTTAG}|%{ARCH}\n' rpm + +# Доступные имена тегов заголовка. +rpmquery --querytags +``` + +В `rpmquery` короткая опция `-i` означает `--info`, а не установку пакета. Это +ALT-алиас из `rpmpopt`; он появился в changelog RPM в версии +`4.13.0-alt7`. Для установки используется другой режим программы `rpm`, но в +обычной работе с ALT зависимости и репозитории следует поручать APT. + +### Файлы + +```sh +# Какому установленному пакету принадлежит файл. +rpmquery -f /usr/bin/rpmquery + +# Все файлы пакета. +rpmquery -l rpm + +# Только конфигурационные или документационные файлы. +rpmquery -c rpm +rpmquery -d rpm + +# Пакет из файла без установки. +rpmquery -p ./package.rpm +rpmquery -lp ./package.rpm +rpmquery -ip ./package.rpm +``` + +Для аргумента-пути `--whatprovides` сначала обращается к индексу установленных +файлов, затем к индексу capability. Поэтому для существующего установленного +файла эти команды обычно совпадают: + +```sh +rpmquery -f /usr/bin/rpmquery +rpmquery --whatprovides /usr/bin/rpmquery +``` + +### Provides, Requires и обратные запросы + +```sh +# Что объявляет один пакет. +rpmquery --provides rpm +rpmquery --requires rpm +rpmquery -R rpm + +# Какие установленные пакеты объявляют capability или требуют его. +rpmquery --whatprovides 'libpopt.so.0()(64bit)' +rpmquery --whatrequires 'libpopt.so.0()(64bit)' +``` + +`--provides`, `--requires`, `--info`, `--last`, `--scripts` и ряд других +удобных режимов реализованы как `popt`-алиасы над `--queryformat`, а не как +отдельные алгоритмы запросов. + +## Формат запросов для автоматической обработки + +Стандартный вывод удобен человеку, но надёжнее не разбирать его пробелами. +Массивы тегов RPM обходятся форматом в квадратных скобках. Чтобы внутри такого +итератора повторять скалярный тег для каждого элемента массива, знак `=` ставят +внутри имени тега: `%{=NAME}`. + +### Все set-Requires в TSV + +```sh +LC_ALL=C rpmquery -a --qf \ + '[%{=NAME}\t%{REQUIRENAME}\t%{REQUIREFLAGS:depflags}\t%{REQUIREVERSION}\n]' | +awk -F '\t' '$4 ~ /^set:/' +``` + +Поля: пакет, имя capability, оператор, версия зависимости. + +Пример: + +```text +rpm libpopt.so.0()(64bit) >= set:jgtcU6BLBccTnteGxrE0 +``` + +### Все set-Provides в TSV + +```sh +LC_ALL=C rpmquery -a --qf \ + '[%{=NAME}\t%{PROVIDENAME}\t%{PROVIDEFLAGS:depflags}\t%{PROVIDEVERSION}\n]' | +awk -F '\t' '$4 ~ /^set:/' +``` + +Пример: + +```text +libpopt libpopt.so.0()(64bit) = set:jdtcJcAdqxTmPJUyuYcVIbLNhqmj... +``` + +Это предпочтительнее `grep` по человекочитаемому выводу, если нужны имена +пакетов, операторы или однозначное разделение полей. + +## Что `rpmquery` делает и не делает с `set:version` + +### Показывает сохранённые зависимости + +`rpmquery --requires` и `rpmquery --provides` извлекают из заголовков пакетов +имя capability, флаги отношения и строку версии. Они не декодируют `set:` и не +показывают исходные ELF-символы. + +Для установленного `rpm` в p11 наблюдалось: + +```text +libpopt.so.0()(64bit) >= set:jgtcU6BLBccTnteGxrE0 +``` + +Установленный провайдер находился по одному имени capability: + +```sh +rpmquery --whatprovides 'libpopt.so.0()(64bit)' +# libpopt-1.18-alt1.x86_64 +``` + +### Не сравнивает выражение, переданное в `--whatprovides` + +Передача полного выражения не запускает `rpmsetcmp()`: + +```sh +rpmquery --whatprovides \ + 'libpopt.so.0()(64bit) >= set:jgtcU6BLBccTnteGxrE0' +``` + +Проверенный результат: + +```text +no package provides libpopt.so.0()(64bit) >= set:jgtcU6BLBccTnteGxrE0 +``` + +Для непутевого аргумента `--whatprovides` делает точный поиск по индексу +`PROVIDENAME`. Поэтому сначала нужно искать провайдера по имени capability, а +его set-строку получать отдельным запросом: + +```sh +name='libpopt.so.0()(64bit)' +provider=$(rpmquery --whatprovides "$name" | head -n1) +rpmquery --qf \ + '[%{PROVIDENAME}\t%{PROVIDEFLAGS:depflags}\t%{PROVIDEVERSION}\n]' \ + "$provider" | +grep -F "$name" +``` + +Настоящее сравнение двух `set:`-версий происходит в `rpmdsCompareEVR()` при +проверке совместимости зависимостей. Если обе версии начинаются с `set:`, код +вызывает `rpmsetcmp()`; если `set:` имеет только одна сторона, зависимости не +пересекаются. Следовательно, `rpmquery` полезен для извлечения корпуса строк, +но не является CLI для непосредственного сравнения двух наборов. + +## Как `rpmquery` используется при сборке самого ALT RPM + +В `alt/rpm.spec` ветки p11 после первой сборки выполняется: + +```sh +rpmquery -a --provides | fgrep '= set:' | sort >P +rpmquery -a --requires | fgrep '= set:' | sort >R +join -o 1.3,2.3 P R | shuf >setcmp-data +time ./setcmp /dev/null +``` + +Смысл конвейера: + +1. Из локальной базы сборочного окружения собираются все set-Provides и + set-Requires. +2. Строка поиска `= set:` захватывает как Provides с `= set:`, так и Requires с + `>= set:`, потому что вторая строка тоже содержит подстроку `= set:`. +3. После сортировки `join` соединяет файлы по первому полю — имени capability. +4. `-o 1.3,2.3` оставляет только третьи поля: set провайдера и set требования. +5. Полученные реальные пары подаются в `tools/setcmp` для замера реализации + `rpmsetcmp()` и профиль-управляемой пересборки `lib/set.c`. + +В обновлённом минимальном контейнере p11 точный конвейер дал: + +```text +P: 75 строк +R: 109 строк, из них 13 полных дублей +setcmp-data: 109 пар +``` + +Эти числа описывают только состав минимального контейнера, а не весь p11 или +Sisyphus. Также конвейер spec не сохраняет имя capability и пакет-владелец; +для исследовательского корпуса удобнее TSV-форматы выше. + +Современная замена устаревающего `fgrep` без изменения смысла: + +```sh +grep -F '= set:' +``` + +## Практические ограничения + +- `rpmquery -a` означает все **установленные** пакеты, а не весь репозиторий. +- `--whatprovides` и `--whatrequires` ищут заголовки по имени capability; они + не принимают полноценное выражение зависимости как запрос сравнения. +- Несколько установленных версий или провайдеров могут дать несколько строк. +- Set-строки крупных библиотек очень длинные; лучше писать полный вывод в файл, + а в терминале показывать только статистику или начало строки. +- Для скриптов следует фиксировать `LC_ALL=C` и использовать `--queryformat`. +- `--requires`/`--provides` отражают метаданные RPM, а не текущее содержимое ELF + на диске. Для восстановления исходных символов нужны `nm`, `readelf` и + генераторы автозависимостей rpm-build. +- При запросе другой системы безопаснее явно использовать `--root`; `--dbpath` + меняет только путь к БД и требует внимательности к относительным путям. +- ALT предоставляет `--nowait-lock` как popt-алиас, отключающий ожидание + блокировки БД. Его стоит применять только когда отказ предпочтительнее + ожидания, а не как способ обходить активную транзакцию RPM/APT. + +## Источники + +1. [Документация платформы ALT 10.1: утилита RPM](https://docs.altlinux.org/ru-RU/platform/10.1/html/alt-platform/utilita_komandnoj_stroki_rpm.html) — RPM работает с файлами, пакетами, зависимостями и собственной БД, но не знает о репозиториях. +2. [Настройка списка репозиториев APT в ALT](https://docs.altlinux.org/ru-RU/platform/10.1/html/alt-platform/nastrojka_spiska_repozitoriev_apt.html). +3. [Пакет `rpm` в p11](https://packages.altlinux.org/en/p11/srpms/rpm/) и [specfile](https://packages.altlinux.org/en/p11/srpms/rpm/specfiles/). +4. [RDB: текущий бинарный пакет `rpm` для p11/x86_64](https://rdb.altlinux.org/api/site/pkghash_by_binary_name?branch=p11&name=rpm&arch=x86_64). +5. [`rpmqv.c`](https://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=rpmqv.c;hb=7e71ed3da438289d916f1cccc9c0a83e594455dc) — выбор режима Query по имени `rpmquery`/`rpmq`. +6. [`rpmpopt.in`](https://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=rpmpopt.in;hb=7e71ed3da438289d916f1cccc9c0a83e594455dc) — ALT-алиасы `--requires`, `--provides`, `--info`, `-i`, `--nowait-lock`. +7. [`lib/query.c`](https://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=lib/query.c;hb=7e71ed3da438289d916f1cccc9c0a83e594455dc) — индексы для `--whatprovides`, запросы файлов и формат `%{nvra}` по умолчанию. +8. [`lib/rpmds.c`](https://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=lib/rpmds.c;hb=7e71ed3da438289d916f1cccc9c0a83e594455dc) — вызов `rpmsetcmp()` при сравнении двух set-версий. +9. [`alt/rpm.spec`](https://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=alt/rpm.spec;hb=7e71ed3da438289d916f1cccc9c0a83e594455dc) — построение `setcmp-data` через `rpmquery`. +10. [Официальный контейнер ALT](https://hub.docker.com/_/alt) — среда воспроизведения `alt:p11`. diff --git a/usage_setc_rpm.md b/Docs/more/usage_setc_rpm.md similarity index 100% rename from usage_setc_rpm.md rename to Docs/more/usage_setc_rpm.md diff --git a/usage_setc_rpm_build.md b/Docs/more/usage_setc_rpm_build.md similarity index 100% rename from usage_setc_rpm_build.md rename to Docs/more/usage_setc_rpm_build.md diff --git a/Docs/set:version.md b/Docs/set:version_ru.md similarity index 100% rename from Docs/set:version.md rename to Docs/set:version_ru.md diff --git a/README.md b/README.md index 3991589..397d2d2 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,4 @@ Research on ALT Linux RPM set.c and dependency comparison using encoded symbol sets. -## Tools - -- [Compare Sisyphus set dependencies with `newset.c`](Docs/compare-sisyphus-set-versions.md) +- [Docs about current set:version implementation](Docs/set:version.md) diff --git a/scripts/check_alt_set_impl.py b/scripts/old/check_alt_set_impl.py similarity index 100% rename from scripts/check_alt_set_impl.py rename to scripts/old/check_alt_set_impl.py diff --git a/scripts/check_arch_set_impl.py b/scripts/old/check_arch_set_impl.py similarity index 100% rename from scripts/check_arch_set_impl.py rename to scripts/old/check_arch_set_impl.py diff --git a/scripts/compare_binary_with_lib_sets.py b/scripts/old/compare_binary_with_lib_sets.py similarity index 100% rename from scripts/compare_binary_with_lib_sets.py rename to scripts/old/compare_binary_with_lib_sets.py diff --git a/scripts/compare_cmp_realization.py b/scripts/old/compare_cmp_realization.py similarity index 100% rename from scripts/compare_cmp_realization.py rename to scripts/old/compare_cmp_realization.py diff --git a/scripts/compare_realization.py b/scripts/old/compare_realization.py similarity index 100% rename from scripts/compare_realization.py rename to scripts/old/compare_realization.py diff --git a/scripts/run_cmp.cpp b/scripts/old/run_cmp.cpp similarity index 100% rename from scripts/run_cmp.cpp rename to scripts/old/run_cmp.cpp diff --git a/scripts/run_set.cpp b/scripts/old/run_set.cpp similarity index 100% rename from scripts/run_set.cpp rename to scripts/old/run_set.cpp diff --git a/scripts/check_sisyphus_set_relations.sh b/scripts/rpmsetcmp/check_sisyphus_set_relations.sh similarity index 100% rename from scripts/check_sisyphus_set_relations.sh rename to scripts/rpmsetcmp/check_sisyphus_set_relations.sh diff --git a/scripts/newset_compat.h b/scripts/rpmsetcmp/newset_compat.h similarity index 100% rename from scripts/newset_compat.h rename to scripts/rpmsetcmp/newset_compat.h diff --git a/scripts/compare_sisyphus_set_versions.sh b/scripts/rpmsetinit/compare_sisyphus_set_versions.sh similarity index 100% rename from scripts/compare_sisyphus_set_versions.sh rename to scripts/rpmsetinit/compare_sisyphus_set_versions.sh diff --git a/scripts/completed_set_versions.awk b/scripts/rpmsetinit/completed_set_versions.awk similarity index 100% rename from scripts/completed_set_versions.awk rename to scripts/rpmsetinit/completed_set_versions.awk diff --git a/scripts/rpmsetinit/newset_compat.h b/scripts/rpmsetinit/newset_compat.h new file mode 100644 index 0000000..8bf29ec --- /dev/null +++ b/scripts/rpmsetinit/newset_compat.h @@ -0,0 +1,48 @@ +#ifndef ARSV_NEWSET_COMPAT_H +#define ARSV_NEWSET_COMPAT_H + +#include +#include +#include +#include + +static inline void *arsv_xmalloc(size_t size) +{ + void *value = malloc(size); + if (!value) { + fputs("newset: out of memory\n", stderr); + abort(); + } + return value; +} + +static inline void *arsv_xrealloc(void *pointer, size_t size) +{ + void *value = realloc(pointer, size); + if (!value) { + fputs("newset: out of memory\n", stderr); + abort(); + } + return value; +} + +static inline char *arsv_xstrdup(const char *source) +{ + size_t size = strlen(source) + 1; + char *copy = (char *)arsv_xmalloc(size); + memcpy(copy, source, size); + return copy; +} + +static inline void *arsv_free(void *pointer) +{ + free(pointer); + return NULL; +} + +#define xmalloc arsv_xmalloc +#define xrealloc arsv_xrealloc +#define xstrdup arsv_xstrdup +#define _free arsv_free + +#endif diff --git a/scripts/newset_mkset.c b/scripts/rpmsetinit/newset_mkset.c similarity index 100% rename from scripts/newset_mkset.c rename to scripts/rpmsetinit/newset_mkset.c diff --git a/scripts/parse_sisyphus_packages.awk b/scripts/rpmsetinit/parse_sisyphus_packages.awk similarity index 100% rename from scripts/parse_sisyphus_packages.awk rename to scripts/rpmsetinit/parse_sisyphus_packages.awk diff --git a/scripts/rpm_payload_safety.sh b/scripts/rpmsetinit/rpm_payload_safety.sh similarity index 100% rename from scripts/rpm_payload_safety.sh rename to scripts/rpmsetinit/rpm_payload_safety.sh diff --git a/tt b/tt deleted file mode 100644 index ee71842..0000000 --- a/tt +++ /dev/null @@ -1,11 +0,0 @@ -2026-07-19T03:40:59Z START ORBit2 x86_64 processing - - - - - 2.14.20-alt0.4:sisyphus+361606.200.1.1@1730563927 -2026-07-19T03:41:09Z DEPENDENCY ORBit2 x86_64 extra_generated requires libORBit-2.so.0()(64bit) >= set:niDtqCAHBjYjaJDKEoB0hQrUcD1RWQ8Y9dT4Ll8IwTKKrUFvFOcPooPnZzZqghuX9GWYZi3 - -2026-07-19T03:41:09Z DEPENDENCY ORBit2 x86_64 match requires libglib-2.0.so.0()(64bit) >= set:ojfwe09N7dwsn61JFrFyGiav6VPWMh6BXOl0ykouiiezwiOhIbG0 set:ojfwe09N7dwsn61JFrFyGiav6VPWMh6BXOl0ykouiiezwiOhIbG0 - -2026-07-19T03:41:09Z SUMMARY ORBit2 x86_64 mismatch - - - - - requires expected=1 generated=2 differences=0 extras=1; complete=1 - - -2026-07-19T03:48:54Z DEPENDENCY SILLY x86_64 mismatch requires libjpeg.so.62()(64bit) >= set:jfvZkgcUQqm1WcNFYdT6Zh set:kgvLPFlp5EP4DOJVCPR1WC6 - - -2026-07-19T03:58:33Z DEPENDENCY abuse x86_64 mismatch requires libSDL_mixer-1.2.so.0()(64bit) >= set:lgIdCOqw7JFqcojADYwCZ7pQY3CJ1LnAqVzI3Z0QXq0pLy1 set:kfMSoaHVyGBhV7CJ1YuVyx95uAdQPsq0b5zW6rUlsY3 - - -2026-07-19T04:08:20Z DEPENDENCY airstrike x86_64 mismatch requires libSDL_mixer-1.2.so.0()(64bit) >= set:lirzppdVhrMiF4ChTZdaR8 set:khS6jpdPZrxpQlg2V9Bq4 -