* [devel] Утилиты для работы с setversions? @ 2019-10-26 13:31 Andrey Savchenko 2019-10-26 14:17 ` Alexey Tourbin 0 siblings, 1 reply; 10+ messages in thread From: Andrey Savchenko @ 2019-10-26 13:31 UTC (permalink / raw) To: devel [-- Attachment #1: Type: text/plain, Size: 564 bytes --] Добрый день! Есть ли у нас утилиты для работы с set versions? На вики ничего не нашёл. Мне нужно развернуть set:<hash_array> в список символов. Понятно, что для этого нужны бинарники, они в пакете есть. Ещё было бы полезно знать, как получить список символов для каждой библиотеки до вычисления хешей. Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-26 13:31 [devel] Утилиты для работы с setversions? Andrey Savchenko @ 2019-10-26 14:17 ` Alexey Tourbin 2019-10-26 15:10 ` Andrey Savchenko 0 siblings, 1 reply; 10+ messages in thread From: Alexey Tourbin @ 2019-10-26 14:17 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 1422 bytes --] On Sat, Oct 26, 2019 at 4:31 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > Добрый день! > > Есть ли у нас утилиты для работы с set versions? На вики ничего > не нашёл. Мне нужно развернуть set:<hash_array> в список символов. > Понятно, что для этого нужны бинарники, они в пакете есть. Set-версия состоит из упорядоченного набора bpp-битных хешей (а кодируются дельты между хешами). Хеши можно получить через закрытое API, которое доступно через только через #include "set.c". Прикрепил пример. $ rpm -q --provides glibc-core |grep 'libdl.*set' libdl.so.2()(64bit) = set:hdBjS1I4gQ8BohwImELo8Zh $ ./a.out set:hdBjS1I4gQ8BohwImELo8Zh 0272 0a8f 12b4 1f1c 1fb0 23f5 31a1 3571 35d3 3bcb > Ещё было бы полезно знать, как получить список символов для каждой > библиотеки до вычисления хешей. Список для Provides делается через /usr/lib/rpm/provided_symbols. Список для Requires делается более сложным образом с использованием /usr/lib/rpm/ldd. [-- Attachment #2: printset.c --] [-- Type: text/x-csrc, Size: 514 bytes --] #include <stdio.h> #include "set.c" int main(int argc, char **argv) { assert(argc == 2); const char *s = argv[1]; assert(strncmp(s, "set:", 4) == 0); s += 4; int bpp, m; int rc = decode_set_init(s, &bpp, &m); assert(rc == 0); size_t len = strlen(s); int n = decode_set_size(len, m); assert(n > 0); unsigned v[n]; n = decode_set(s, m, v); assert(n > 0); int w = (bpp + 3) / 4; for (int i = 0; i < n; i++) printf("%0*x\n", w, v[i]); return 0; } ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-26 14:17 ` Alexey Tourbin @ 2019-10-26 15:10 ` Andrey Savchenko 2019-10-26 22:38 ` Alexey Tourbin 0 siblings, 1 reply; 10+ messages in thread From: Andrey Savchenko @ 2019-10-26 15:10 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 1886 bytes --] On Sat, 26 Oct 2019 17:17:25 +0300 Alexey Tourbin wrote: > On Sat, Oct 26, 2019 at 4:31 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > > Добрый день! > > > > Есть ли у нас утилиты для работы с set versions? На вики ничего > > не нашёл. Мне нужно развернуть set:<hash_array> в список символов. > > Понятно, что для этого нужны бинарники, они в пакете есть. > > Set-версия состоит из упорядоченного набора bpp-битных хешей (а > кодируются дельты между хешами). Хеши можно получить через закрытое > API, которое доступно через только через #include "set.c". Прикрепил > пример. > > $ rpm -q --provides glibc-core |grep 'libdl.*set' > libdl.so.2()(64bit) = set:hdBjS1I4gQ8BohwImELo8Zh > $ ./a.out set:hdBjS1I4gQ8BohwImELo8Zh > 0272 > 0a8f > 12b4 > 1f1c > 1fb0 > 23f5 > 31a1 > 3571 > 35d3 > 3bcb Как я понял, это хеши символов. По какому алгоритму они вычисляются? Мне нужно для имеющегося списка символов вычислить аналогичные хеши для дальнейшего сравнения. > > Ещё было бы полезно знать, как получить список символов для каждой > > библиотеки до вычисления хешей. > > Список для Provides делается через /usr/lib/rpm/provided_symbols. > Список для Requires делается более сложным образом с использованием > /usr/lib/rpm/ldd. Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-26 15:10 ` Andrey Savchenko @ 2019-10-26 22:38 ` Alexey Tourbin 2019-10-26 22:47 ` Andrey Savchenko 0 siblings, 1 reply; 10+ messages in thread From: Alexey Tourbin @ 2019-10-26 22:38 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 1197 bytes --] On Sat, Oct 26, 2019 at 6:10 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > On Sat, 26 Oct 2019 17:17:25 +0300 Alexey Tourbin wrote: > > $ rpm -q --provides glibc-core |grep 'libdl.*set' > > libdl.so.2()(64bit) = set:hdBjS1I4gQ8BohwImELo8Zh > > $ ./a.out set:hdBjS1I4gQ8BohwImELo8Zh > > 0272 > > 0a8f > > 12b4 > > 1f1c > > 1fb0 > > 23f5 > > 31a1 > > 3571 > > 35d3 > > 3bcb > > Как я понял, это хеши символов. По какому алгоритму они вычисляются? > Мне нужно для имеющегося списка символов вычислить аналогичные хеши > для дальнейшего сравнения. Это set.c:hash(), но можно воспользоваться set_new/set_add, который хеширует и сортирует строки по хешу. Прикрепил более полный пример. $ /usr/lib/rpm/provided_symbols /lib64/libdl.so.2 |./a.out set:hdBjS1I4gQ8BohwImELo8Zh 1 0272 dladdr1 0a8f _dlfcn_hook 12b4 dlsym 1f1c dlerror 1fb0 dlclose 23f5 dlopen 31a1 dlinfo 3571 dlvsym 35d3 dladdr 3bcb dlmopen [-- Attachment #2: printset.c --] [-- Type: text/x-csrc, Size: 1184 bytes --] #include <stdio.h> #include "set.c" int main(int argc, char **argv) { assert(argc == 2); const char *s = argv[1]; assert(strncmp(s, "set:", 4) == 0); s += 4; int bpp, m; int rc = decode_set_init(s, &bpp, &m); assert(rc == 0); size_t len = strlen(s); int n = decode_set_size(len, m); assert(n > 0); unsigned v[n]; n = decode_set(s, m, v); assert(n > 0); // Read the list of symbols from stdin. struct set *set = set_new(); char *line = NULL; size_t alloc = 0; while ((len = getline(&line, &alloc, stdin)) != -1) { assert(len > 1); len--; assert(line[len] == '\n'); line[len] = '\0'; set_add(set, line); } // Hash and sort the symbols by hash. s = set_fini(set, bpp); assert(s && "non-empty set"); s = _free(s); // don't neeed the result, only the internal structure // Join v[] and set->sv[]. int w = (bpp + 3) / 4; for (int i = 0; i < n; i++) { // TODO: handle collisions and/or missing elements, // advance lists separately like in mergesort. assert(set->sv[i].v == v[i]); printf("%0*x %s\n", w, v[i], set->sv[i].s); } set_free(set); return 0; } ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-26 22:38 ` Alexey Tourbin @ 2019-10-26 22:47 ` Andrey Savchenko 2019-10-29 18:23 ` Andrey Savchenko 0 siblings, 1 reply; 10+ messages in thread From: Andrey Savchenko @ 2019-10-26 22:47 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 1422 bytes --] On Sun, 27 Oct 2019 01:38:40 +0300 Alexey Tourbin wrote: > On Sat, Oct 26, 2019 at 6:10 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > > On Sat, 26 Oct 2019 17:17:25 +0300 Alexey Tourbin wrote: > > > $ rpm -q --provides glibc-core |grep 'libdl.*set' > > > libdl.so.2()(64bit) = set:hdBjS1I4gQ8BohwImELo8Zh > > > $ ./a.out set:hdBjS1I4gQ8BohwImELo8Zh > > > 0272 > > > 0a8f > > > 12b4 > > > 1f1c > > > 1fb0 > > > 23f5 > > > 31a1 > > > 3571 > > > 35d3 > > > 3bcb > > > > Как я понял, это хеши символов. По какому алгоритму они вычисляются? > > Мне нужно для имеющегося списка символов вычислить аналогичные хеши > > для дальнейшего сравнения. > > Это set.c:hash(), но можно воспользоваться set_new/set_add, который > хеширует и сортирует строки по хешу. Прикрепил более полный пример. > > $ /usr/lib/rpm/provided_symbols /lib64/libdl.so.2 |./a.out > set:hdBjS1I4gQ8BohwImELo8Zh 1 > 0272 dladdr1 > 0a8f _dlfcn_hook > 12b4 dlsym > 1f1c dlerror > 1fb0 dlclose > 23f5 dlopen > 31a1 dlinfo > 3571 dlvsym > 35d3 dladdr > 3bcb dlmopen Спасибо! Как раз это мне и нужно. Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-26 22:47 ` Andrey Savchenko @ 2019-10-29 18:23 ` Andrey Savchenko 2019-10-30 2:04 ` Alexey Tourbin 0 siblings, 1 reply; 10+ messages in thread From: Andrey Savchenko @ 2019-10-29 18:23 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 2310 bytes --] On Sun, 27 Oct 2019 01:47:00 +0300 Andrey Savchenko wrote: > On Sun, 27 Oct 2019 01:38:40 +0300 Alexey Tourbin wrote: > > On Sat, Oct 26, 2019 at 6:10 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > > > On Sat, 26 Oct 2019 17:17:25 +0300 Alexey Tourbin wrote: > > > > $ rpm -q --provides glibc-core |grep 'libdl.*set' > > > > libdl.so.2()(64bit) = set:hdBjS1I4gQ8BohwImELo8Zh > > > > $ ./a.out set:hdBjS1I4gQ8BohwImELo8Zh > > > > 0272 > > > > 0a8f > > > > 12b4 > > > > 1f1c > > > > 1fb0 > > > > 23f5 > > > > 31a1 > > > > 3571 > > > > 35d3 > > > > 3bcb > > > > > > Как я понял, это хеши символов. По какому алгоритму они вычисляются? > > > Мне нужно для имеющегося списка символов вычислить аналогичные хеши > > > для дальнейшего сравнения. > > > > Это set.c:hash(), но можно воспользоваться set_new/set_add, который > > хеширует и сортирует строки по хешу. Прикрепил более полный пример. > > > > $ /usr/lib/rpm/provided_symbols /lib64/libdl.so.2 |./a.out > > set:hdBjS1I4gQ8BohwImELo8Zh 1 > > 0272 dladdr1 > > 0a8f _dlfcn_hook > > 12b4 dlsym > > 1f1c dlerror > > 1fb0 dlclose > > 23f5 dlopen > > 31a1 dlinfo > > 3571 dlvsym > > 35d3 dladdr > > 3bcb dlmopen > > Спасибо! Как раз это мне и нужно. К сожалению, для решения реальной проблемы этого недостаточно: $ /usr/lib/rpm/provided_symbols /usr/lib64/libharfbuzz-subset.so.0 | ./get_hash set:nkVnoZa9uXJTAxpulY0e0jZy0 warning: hash collision: _ZN10__cxxabiv115__forced_unwindD1Ev _ZNK2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EE8sanitizeEP21hb_sanitize_context_tPKv get_hash: get_hash.c:45: main: Assertion `set->sv[i].v == v[i]' failed. Aborted (core dumped) Понятно, что нужно обрабатывать коллизии хешей, но код set.c слишком велик, чтоб в нём разобраться за разумное время без детальной документации. Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-29 18:23 ` Andrey Savchenko @ 2019-10-30 2:04 ` Alexey Tourbin 2019-10-30 9:06 ` Andrey Savchenko 0 siblings, 1 reply; 10+ messages in thread From: Alexey Tourbin @ 2019-10-30 2:04 UTC (permalink / raw) To: ALT Linux Team development discussions On Tue, Oct 29, 2019 at 9:23 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > К сожалению, для решения реальной проблемы этого недостаточно: Давайте решим реальную проблему. Что вы хотите сделать? Left outer join? > $ /usr/lib/rpm/provided_symbols /usr/lib64/libharfbuzz-subset.so.0 | ./get_hash set:nkVnoZa9uXJTAxpulY0e0jZy0 > warning: hash collision: _ZN10__cxxabiv115__forced_unwindD1Ev _ZNK2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EE8sanitizeEP21hb_sanitize_context_tPKv > get_hash: get_hash.c:45: main: Assertion `set->sv[i].v == v[i]' failed. > Aborted (core dumped) > > Понятно, что нужно обрабатывать коллизии хешей, но код set.c слишком > велик, чтоб в нём разобраться за разумное время без детальной документации. В примере в TODO сказано, что это не настоящий join, и что нужно для настоящего join'а продвигать списки по-отдельности. Вы зря валите на код set.c. У вас есть два примитива: 1) распаковать set-строку в массив хешей v[]; 2) прохешировать заданный набор строк и отсортировать их по хешу, будет массив пар <str,v>[]. Этим задача set.c исчерпывается, и дальше разбираться в его коде не нужно. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-30 2:04 ` Alexey Tourbin @ 2019-10-30 9:06 ` Andrey Savchenko 2019-10-30 10:46 ` Vladimir D. Seleznev 0 siblings, 1 reply; 10+ messages in thread From: Andrey Savchenko @ 2019-10-30 9:06 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 1034 bytes --] On Wed, 30 Oct 2019 05:04:27 +0300 Alexey Tourbin wrote: > On Tue, Oct 29, 2019 at 9:23 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > > К сожалению, для решения реальной проблемы этого недостаточно: > > Давайте решим реальную проблему. Что вы хотите сделать? Left outer join? Задача следующая: 1) Есть библиотека foo-1.0 2) Она обновилась до foo-1.0.1 3) Возник unmet пакета bar на libfoo.so (>= set:abcdef) Мне нужно знать, каких именно символов из foo стало не хватать bar. Будет при этом left outer join или right inner join — мне абсолютно не важно. От rpm мне нужна возможность отображать set в список символов (при наличии библиотеки, разумеется). Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-30 9:06 ` Andrey Savchenko @ 2019-10-30 10:46 ` Vladimir D. Seleznev 2019-10-30 11:38 ` Andrey Savchenko 0 siblings, 1 reply; 10+ messages in thread From: Vladimir D. Seleznev @ 2019-10-30 10:46 UTC (permalink / raw) To: ALT Linux Team development discussions On Wed, Oct 30, 2019 at 12:06:26PM +0300, Andrey Savchenko wrote: > On Wed, 30 Oct 2019 05:04:27 +0300 Alexey Tourbin wrote: > > On Tue, Oct 29, 2019 at 9:23 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > > > К сожалению, для решения реальной проблемы этого недостаточно: > > > > Давайте решим реальную проблему. Что вы хотите сделать? Left outer join? > > Задача следующая: > > 1) Есть библиотека foo-1.0 > 2) Она обновилась до foo-1.0.1 > 3) Возник unmet пакета bar на libfoo.so (>= set:abcdef) > > Мне нужно знать, каких именно символов из foo стало не хватать bar. > > Будет при этом left outer join или right inner join — мне абсолютно > не важно. От rpm мне нужна возможность отображать set в список > символов (при наличии библиотеки, разумеется). Я думаю, проще воспользоваться утилитой rpmsodiff(1) из состава пакета qa-robot, которая в т.ч. сравнивает символы в пределах SONAME: $ rpmsodiff /ALT/repo/sisyphus/date/2017/01/01/x86_64/RPMS.classic/libglusterfs3-3.8.4-alt1.x86_64.rpm \ /ALT/repo/sisyphus/date/2018/01/01/x86_64/RPMS.classic/libglusterfs3-3.12.4-alt1.x86_64.rpm | head -n 15 common sonames: libgfchangelog.so.0 /usr/lib64/libgfchangelog.so.0.0.1 /usr/lib64/libgfchangelog.so.0.0.1 libgfrpc.so.0 /usr/lib64/libgfrpc.so.0.0.1 /usr/lib64/libgfrpc.so.0.0.1 libgfxdr.so.0 /usr/lib64/libgfxdr.so.0.0.1 /usr/lib64/libgfxdr.so.0.0.1 libglusterfs.so.0 /usr/lib64/libglusterfs.so.0.0.1 /usr/lib64/libglusterfs.so.0.0.1 --- libglusterfs3-3.8.4-alt1/libgfchangelog.so.0 2016-10-02 02:02:01.000000000 +0300 +++ libglusterfs3-3.12.4-alt1/libgfchangelog.so.0 2017-12-17 20:05:18.000000000 +0300 @@ -74,3 +74,3 @@ gf_readline T -gf_rfc3986_encode T +gf_rfc3986_encode_space_newline T gf_thread_cleanup T 1 symbols removed -- С уважением, Владимир Селезнев ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [devel] Утилиты для работы с setversions? 2019-10-30 10:46 ` Vladimir D. Seleznev @ 2019-10-30 11:38 ` Andrey Savchenko 0 siblings, 0 replies; 10+ messages in thread From: Andrey Savchenko @ 2019-10-30 11:38 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 3415 bytes --] On Wed, 30 Oct 2019 13:46:26 +0300 Vladimir D. Seleznev wrote: > On Wed, Oct 30, 2019 at 12:06:26PM +0300, Andrey Savchenko wrote: > > On Wed, 30 Oct 2019 05:04:27 +0300 Alexey Tourbin wrote: > > > On Tue, Oct 29, 2019 at 9:23 PM Andrey Savchenko <bircoph@altlinux.org> wrote: > > > > К сожалению, для решения реальной проблемы этого недостаточно: > > > > > > Давайте решим реальную проблему. Что вы хотите сделать? Left outer join? > > > > Задача следующая: > > > > 1) Есть библиотека foo-1.0 > > 2) Она обновилась до foo-1.0.1 > > 3) Возник unmet пакета bar на libfoo.so (>= set:abcdef) > > > > Мне нужно знать, каких именно символов из foo стало не хватать bar. > > > > Будет при этом left outer join или right inner join — мне абсолютно > > не важно. От rpm мне нужна возможность отображать set в список > > символов (при наличии библиотеки, разумеется). > > Я думаю, проще воспользоваться утилитой rpmsodiff(1) из состава пакета > qa-robot, которая в т.ч. сравнивает символы в пределах SONAME: Она мне ответит на вопрос чем отличается новая и старая библиотека, но не на вопрос какие символы из этой разницы нужны заданному пакету. Понятно, что можно прообждампить все бинарники пакета и затем сопоставить списки символов с вытащенными из разницы. Но ведь rpm уже обладает всей нужной информацией в виде set! Просто нет инструментов для работы с ней :/ P.S. Конкретно возникшую прошблему с libharfbuzz я уже решил иными методами, но безусловно, что подобные задачи будут возникать и в дальнейшем, и было бы очень полезно иметь инструменты для их решения. > $ rpmsodiff /ALT/repo/sisyphus/date/2017/01/01/x86_64/RPMS.classic/libglusterfs3-3.8.4-alt1.x86_64.rpm \ > /ALT/repo/sisyphus/date/2018/01/01/x86_64/RPMS.classic/libglusterfs3-3.12.4-alt1.x86_64.rpm | > head -n 15 > common sonames: > libgfchangelog.so.0 /usr/lib64/libgfchangelog.so.0.0.1 /usr/lib64/libgfchangelog.so.0.0.1 > libgfrpc.so.0 /usr/lib64/libgfrpc.so.0.0.1 /usr/lib64/libgfrpc.so.0.0.1 > libgfxdr.so.0 /usr/lib64/libgfxdr.so.0.0.1 /usr/lib64/libgfxdr.so.0.0.1 > libglusterfs.so.0 /usr/lib64/libglusterfs.so.0.0.1 /usr/lib64/libglusterfs.so.0.0.1 > > --- libglusterfs3-3.8.4-alt1/libgfchangelog.so.0 2016-10-02 02:02:01.000000000 +0300 > +++ libglusterfs3-3.12.4-alt1/libgfchangelog.so.0 2017-12-17 20:05:18.000000000 +0300 > @@ -74,3 +74,3 @@ > gf_readline T > -gf_rfc3986_encode T > +gf_rfc3986_encode_space_newline T > gf_thread_cleanup T > > 1 symbols removed > Best regards, Andrew Savchenko [-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2019-10-30 11:38 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-10-26 13:31 [devel] Утилиты для работы с setversions? Andrey Savchenko 2019-10-26 14:17 ` Alexey Tourbin 2019-10-26 15:10 ` Andrey Savchenko 2019-10-26 22:38 ` Alexey Tourbin 2019-10-26 22:47 ` Andrey Savchenko 2019-10-29 18:23 ` Andrey Savchenko 2019-10-30 2:04 ` Alexey Tourbin 2019-10-30 9:06 ` Andrey Savchenko 2019-10-30 10:46 ` Vladimir D. Seleznev 2019-10-30 11:38 ` Andrey Savchenko
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git