PDA

Просмотр полной версии : Разработка парсера образов дисков RT11 Files11 различных БКшных итд для индексации



SuperMax
01.03.2020, 13:42
на тему проблемы https://zx-pk.ru/threads/21450-vsjo-po-pvk-elektronika-ms-0585-mneniya-foto-voprosy/page107.html

Есть большой архив софта https://mirrors.pdp-11.ru/ снабженный системой поиска
система поиска использует имена файлов и полного пути для индексации
те достаточно выкладывать файлы или образа дисков в разумную иерархию директорий и имен

Систему поиска можно улучшить - сделать извлекалку списка файлов из образов RT-11 и Files11 под линукс
можно даже на яве (тк индексатор у меня на яве написан)
и тогда система поиска будет искать образа где есть нужный файл

Соответственно необходимо определить следующие важные моменты
1. список расширений файлов с образами которые парсер будет проверять - у меня это dsk img - если есть еще варианты - добавляем
2. список файловых систем которые надо индексировать - RT11 и по каким признакам файловую систему можно быстро и однозначно идентифицировать
3. описание формата файловой системы
тк большим запасом свободного времени увы не обладаю то прошу сразу кидать ccылки или саму документацию
те в случае с БК я честно уже плохо помню как там файлы хранятся в МКДОС-е и уж тем более в CSIDOS
4. какую информацию имеет смысл использовать в индексе - те что кроме имени файла ? дату ? длину ? адрес ?

сам индексатор написан на яве, соответственно если кто-то готов помочь с написанием каких-либо кусков парсера
Вообще мне представляется модульный парсер, который сначала получает путь до файла с нужным расширением (в индексе уже это есть)
затем открывает его, выясняет тип файловой системы, вызывает модуль парсера этой файловой системы, получает список файлов и кладет в базу поиска

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

Hunta
01.03.2020, 14:01
4. какую информацию имеет смысл использовать в индексе - те что кроме имени файла ? дату ? длину ? адрес ?
Я для ускорения поиска в своей файловой помойке сохраняю в файле-описателе каталога и хеш файла (сейчас MD5 и SHA1). Соответственно, есть программа, которая для файла вычисляет их же и пробегая по файл-помойке - показывает, где есть ещё файлы с такими же хешами

Raydac
01.03.2020, 14:09
архив исходников эмулятора BK (http://gid.pdp-11.ru/f/3.10.2001.7927/BK_v3.10_src.rar) содержит парсинг для форматов разных ОС

shattered
01.03.2020, 14:20
Парсеров rt-11 имеется в количестве, например
- PUTR (http://www.dbit.com/pub/putr/putr.asm)
- https://gitlab.com/NF6X_Retrocomputing/pyRT11
- rt11dsk (https://github.com/nzeemin/ukncbtl-utils)

Некоторые изыскания по этому поводу -- здесь: https://zx-pk.ru/threads/21137-fajlovaya-sistema-rt-11.html

nzeemin
01.03.2020, 15:50
Тоже думал на эту тему.
У Хобота например тоже составлен текстовый индекс файло-архива, но вложенные *.dsk не показаны, плюс есть архивы *.lza, *.lzs, *.fcu итп, хорошо бы их тоже раскрывать, но вопрос чем.
rt11dsk (https://github.com/nzeemin/ukncbtl-utils) можно собрать через make под линуксом.
Помимо имени файла интересно: дата, размер в блоках, размер в байтах, хеши md5/sha1.

Hunta
01.03.2020, 15:57
Помимо имени файла интересно: дата
Если бы, как Windows сохранялись даты создания и последней записи - возможно. А так дата в RT-11 - она как бы почти не о чем. В RSX в этом плане дела получше

- - - Добавлено - - -


размер в байтах,
Тоже самое - в RT такого понятия нет, придётся смотреть - какого типа файл и в зависимости от этого ставить или по размеру в блоках или искать - по содержимому и/или служебной информации (для RSX)

SuperMax
01.03.2020, 16:32
Спасибо всем за участие!

итого получается:
1. парсер образов RT11 возьму rt11dsk - немного подпилю для удобства вызова
2. открытый вопрос по идентификации файловой системы образа
те хорошо бы какой-то список сигнатур или иных простых признаков
дабы можно было на сях написать идентификатор который бы возвращал результат типа FS в базу


Обдумываю структуру таблиц для сохранения информации
1. табличка с информацией о самом образе
- тип файловой системы в разрезе выбора парсера
- имя тома
- владелец
- id системы
- размер в блоках


2. табличка с информацией о файле - список сохраняемой информации
-имя файла
-количество блоков
-дата
-размер в байтах
-адрес
-хеш

nzeemin
01.03.2020, 16:55
Всё же хеши было бы оч хорошо иметь, дублированных файлов бывает очень много.
Вспомнил что для УКНЦ ещё используется формат дисков *.rtd - для системы Net-RT11, отличается заголовком в 256 байт, rt11dsk это учитывает.

Ну и удачи в этом деле, иметь текстовое оглавление всего архива - это было бы очень полезно.

xolod
01.03.2020, 17:06
Для инфо
http://www.trailing-edge.com/~shoppa/rt11fs/
https://github.com/aaru-dps/Aaru/blob/master/Aaru.Filesystems/RT11.cs

SuperMax
01.03.2020, 17:11
Всё же хеши было бы оч хорошо иметь, дублированных файлов бывает очень много.
есть возможность прикрутить это в rt11dsk в режиме листинга ? тк это у тебя получится быстрее чем у меня пока я разберусь что и где
или явно подсказать куда смотреть


Вспомнил что для УКНЦ ещё используется формат дисков *.rtd - для системы Net-RT11, отличается заголовком в 256 байт, rt11dsk это учитывает.
Ну и удачи в этом деле, иметь текстовое оглавление всего архива - это было бы очень полезно.
спасибо!

hobot
02.03.2020, 11:07
хорошо бы их тоже раскрывать, но вопрос чем.
руками содержимое подготовить и внести в данные по вложенным архивам (заняться этим не предлагать!).

предупреждение к оглавлению в общедоступном архиве - достаточно информативное, о том что оно содержит и не содержит, более подробная информация (как правило) находится уже внутри папок с образами, кто лазил туда - тот всё сам видел - читал. Не смотря на критику (супер знатоков как надо делать) - количество обращений к архиву и смежным темам на нескольких форумах растёт (имею в виду суточные просмотры - статистика косвенная), по поводу критики, могу добавить : у одного из главных ненавистников архива есть свой сайт дико правильно оформленный с занудством до каждой буковки не докопаешься, табличками и прочее, кто про него знает? кто его видел? (я знаю и видел - поскольку сочувствую проблеме и интересуюсь любыми материалами вообще по теме), а критикуемый архив - знает толпа людей, в том числе за пределами РФ (чуть не написал Кольцевого шоссе), очень, кстати говоря, отрадно, что такой важный и уже знакомый олдовый ресурс - сайт Арсения Гордина - очень красочное переживает переоформление! На данном этапе я не планирую глобально что-то менять у себя на сайте. Спасибо.

:redface:

SuperMax
02.03.2020, 12:09
2hobot речь идет об индексации ресурсов на площадке *.pdp-11.ru в частности https://mirrors.pdp-11.ru/
те в принципе эта поисковая система будет работать и по всему pdp-11.ru и зеркалу твоего архива


2All: концепция сформировалась и уложилась в единую поисковую структуру которая сейчас есть
сейчас обдумываю как лучше написать распознавалку контейнеров тк задачу надо решать в общем виде ибо контейнеров с файлами достаточно много
соответственно прошу подсказать сколько надо читать в начале файла для гарантированного распознавания типа (надо понимать что будут образа от всех старых систем)
и где копнуть консолидированную инфу по образам

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

nzeemin
02.03.2020, 12:40
SuperMax, определение винчестера УКНЦ - можно всё посмотреть в коде rt11dsk файл hardimage.cpp:
1. Образ должен быть кратен 512 байт, образ большого объёма (например от 2 МБ)
2. Читаем первый блок в 512 байт
3. Образ может быть инверсным, смотрим байты по смещению 0x1f0..0x1fb, если все 0xff то это инверсный образ, инвертируем этот блок и все остальные.
4. Считаем контрольную сумму блока, если совпала то это точно винчестер. Но винчестер может быть и с неправильной контрольной суммой.
5. Байт по смещению 0 это Sectors, байт по смещению 1 это Heads - оба должны быть ненулевыми.
6. Берём размер файла в блоках, делим на Sectors и Heads, получаем число цилиндров, должно быть больше 0 и меньше 1024.
7. Смотрим таблицу разделов, что она не бессмысленная - сумма размеров разделов меньше или равна размеру винчестера.

Можно ещё вот тут почитать: https://github.com/nzeemin/ukncbtl-doc/wiki/IDE-HDD-ru

Hunta
02.03.2020, 12:58
Некоторая проблема с образом Files-11 - раскрутка files-11 начинается home блока, который может находится в блоке 1, 400(8), 1000(8), 1400(8), ...
Обычно он будет в блоке 1, но это не 100 процентов

shattered
02.03.2020, 14:11
архивы *.lza, *.lzs, *.fcu итп, хорошо бы их тоже раскрывать, но вопрос чем.

запускать в эмуляторе rt11 соотв. архиватор?

hobot
02.03.2020, 14:23
запускать в эмуляторе rt11 соотв. архиватор?
c ключом текущей задачи! гениально! просмотр(состав архива), распаковка отдельного файла, там всё это ест

SuperMax
02.03.2020, 14:26
запускать в эмуляторе rt11 соотв. архиватор?

слона надо есть по частям

сейчас первая часть - идентификация типа образа
вопрос открытый
те сколько читать в начале образа для гарантированного распознавания ?
как распознавать ?

shattered
02.03.2020, 14:35
а сколько всего вариантов образов? дисков / архивов / etc?

SuperMax
02.03.2020, 16:51
а сколько всего вариантов образов? дисков / архивов / etc?
я думаю много
RT11
Files-11
HDD УКНЦ
БК ANDOS (FAT12)
БК MKDOS
БК MicroDOS
БК CSIDOS
HDD БК
MSXDOS (FAT12)
MSX HDD MSXDOS2 SUNRISE (FAT12)
MSX HDD NEXTOR (FAT16)
TRDOS (спектрум)
диски для амиги
итд

архивы пойдут отдельно

если говорить о количестве то на зеркалах, то только сейчас файлов с расширением DSK 13905шт

SuperMax
04.03.2020, 18:46
базовый идентификатор образов написал на сях
остается его наполнить информацией для идентификации всех образов
сейчас распознает три типа образов с RT11

сейчас займусь написанием
1. "вызывалки" которая дергает нужный парсер образа и засовывает с него данные в базу
2. обтачиванием rt11dsk до парсера

hobot
04.03.2020, 23:07
SuperMax,

три типа образов с RT11
учитывайте так же как минимум две разновидности образов ЖД для эмулятора ДВК !
Файлы типа .DW и .DSK - там нюанс местный ЕМНИП связанный с контроллером и или драйвером, по сути разная разметка у хардов таких в итоге...подробнее я не вникал, пользуюсь файлом .DW просто для разнообразия )))

- - - Добавлено - - -


прасёр - нельзя это "нечто" нормальным термином на Русском заменить?
Извините.

SuperMax
05.03.2020, 06:19
SuperMax,

учитывайте так же как минимум две разновидности образов ЖД для эмулятора ДВК !
Файлы типа .DW и .DSK - там нюанс местный ЕМНИП связанный с контроллером и или драйвером, по сути разная разметка у хардов таких в итоге...подробнее я не вникал, пользуюсь файлом .DW просто для разнообразия )))
а надо вникать ибо нужны подробности
и мне нужны конкретные примеры

hobot
05.03.2020, 13:56
подробности
Patron описал в теме эмулятора!
И примеры там описываются и суть разницы этих образов (и аналогов в реале).

SuperMax
05.03.2020, 14:45
Patron описал в теме эмулятора!
И примеры там описываются и суть разницы этих образов (и аналогов в реале).
ccылка ?
у меня не так много времени и я потому и прошу сразу конкретику о чем писал в заголовке темы


пока написал демона который считает хеш у всех файлов в архиве, ориентировочно через неделю справится (дабы сервер сильно не грузить)
самый быстрый sha1 оказался у openssl-я, он в два раза быстрее sha1sum

SuperMax
06.03.2020, 13:34
дописываю вызывалку и выяснилось что rt11dsk не любит длинные имена



./rt11dsk l /u01/html/vhost/pdp-11.ru/#mirrors/_main_/ibiblio.org/pub/academic/computer-science/history/pdp-11/rt/dsk/decus11/110743.dsk
RT11DSK Utility by Nikita Zimin [Mar 2 2020 00:16:20]

Unknown option: /u01/html/vhost/pdp-11.ru/#mirrors/_main_/ibiblio.org/pub/academic/computer-science/history/pdp-11/rt/dsk/decus11/110743.dsk

а это еще достаточно короткий путь

придется таки лезть внутрь...

Hunta
06.03.2020, 13:36
Unknown option: /u01/html/vhost/pdp-11.ru/#mirrors/_main_/ibiblio.org/pub/academic/computer-science/history/pdp-11/rt/dsk/decus11/110743.dsk
А это точно длинное имя, а не попытка воспринять это как набор ключей?
Если так:
./rt11dsk l "/u01/html/vhost/pdp-11.ru/#mirrors/_main_/ibiblio.org/pub/academic/computer-science/history/pdp-11/rt/dsk/decus11/110743.dsk"
?

SuperMax
06.03.2020, 13:51
А это точно длинное имя, а не попытка воспринять это как набор ключей?
Если так:
./rt11dsk l "/u01/html/vhost/pdp-11.ru/#mirrors/_main_/ibiblio.org/pub/academic/computer-science/history/pdp-11/rt/dsk/decus11/110743.dsk"
?
по сути ошибки - да
те я пробовал экранировать ' ' и " " - ответ тот же самый

Hunta
06.03.2020, 13:54
по сути ошибки - да
Просто ошибка как бы намекает, что идёт попытка воспринять путь как набор ключей - Unknown option
Но пo unix системам я не спец, так что...

nzeemin
06.03.2020, 14:00
Да, в rt11dsk всё что начинается на / или - считается ключом. Видимо для *nix систем это не особенно удобно.
Как решение в вашем случае предлагаю убрать в коде проверку на /, оставить только минус.

SuperMax
06.03.2020, 15:00
Да, в rt11dsk всё что начинается на / или - считается ключом. Видимо для *nix систем это не особенно удобно.
Как решение в вашем случае предлагаю убрать в коде проверку на /, оставить только минус.
да, так и сделал

сначала запущу весь комплект а потом уже займусь хешами и прочими приседаниями

SuperMax
09.03.2020, 09:15
Итого:

1. демон-хешер обработал уже 4'6 млн файлов. вывод хешей файлов еще не сделал - надо разбираться с CSS - форматирование съезжает.
2. на данный момент распознано дисков RT11 в распакованном виде (те не в архиве) 784шт
3. написана "вызывалка" парсеров контейнеров, сейчас работает только на один вид RT11 но тк задача решена в общем виде, то достаточно добавить файл парсера + в базе прописать как его вызывать
ну и для новых типов контейнеров дописать их распознавание
4. написан универсальный настраиваемый парсер результатов выдачи парсеров контейнеров - те можно в базе сразу настроить какие поля и как брать, сделана поддержка хешей и доп.информации
5. первая порция загружена и проиндексирована

поиск работает:
https://mirrors.pdp-11.ru/search.php?text=VT52X+.TEC++&page=1
5й результат это как раз контейнер DSK


Что планируется:
1. расширение зоны поиска - те сейчас сканер файлов работает только на mirrors.pdp-11.ru, планируется добавить всю зону pdp-11.ru, те туда попадет и архив Хобота. те поиск на https://mirrors.pdp-11.ru/ будет выдавать результаты со всего pdp-11.ru
2. расширение списка поддерживаемых контейнеров и модулей извлечения
3. доработка модулей извлечения - дабы они выдавали хеш
4. каскадирование модулей извлечения - те DSK в архиве, архив рассматривается как контейнер, DSK тоже. индексируются файлы и в архиве и в самом контейнере. если в самом DSK есть вложенный логический диск то его тоже извлекаем и индексируем.

Принимается помощь в виде:
1. формализованных правил определения типа контейнера
2. исходники ПО работы с контейнерами - те нужно а) выдавать листинг с хешами б) извлекать файл
исходники на С/С++ тк все ПО работает на Linux

hobot
21.03.2020, 07:50
SuperMax, я вот о чём,
в первое сообщение (шапку) темы по архиву доб. ссылки с инф. строкой
https://zx-pk.ru/threads/16861-poisk-fajlov-dlya-uknts-dvk.html?p=417669&viewfull=1#post417669

а хочется многого (как всегда!),
иметь на главной мордочке архива строку поиска и кнопку отправляющую запрос и активизирующая
поиск по твоей ссылке, и в оглавлении что то такое подвесить сразу после текстового предупреждения.

не совсем представляю насколько это сложно и возможно ли в принципе?

- - - Добавлено - - -

https://pic.maxiol.com/thumbs2/1584734625.1520060551.bupser.png (https://pic.maxiol.com/?v=1584734625.1520060551.bupser.png&dp=2)

у себя этих BUP(три пробела).SAV - штук 8 с разных систем (соотв. разных версий\размеров) ,
это всё не зархивированные образы RT-11

SuperMax
21.03.2020, 10:57
SuperMax, я вот о чём,
в первое сообщение (шапку) темы по архиву доб. ссылки с инф. строкой
https://zx-pk.ru/threads/16861-poisk-fajlov-dlya-uknts-dvk.html?p=417669&viewfull=1#post417669

а хочется многого (как всегда!),
иметь на главной мордочке архива строку поиска и кнопку отправляющую запрос и активизирующая
поиск по твоей ссылке, и в оглавлении что то такое подвесить сразу после текстового предупреждения.

я правильно понял про встраивание поиска в http://hobot.pdp-11.ru/ ?



не совсем представляю насколько это сложно и возможно ли в принципе?

встроить в http://hobot.pdp-11.ru/ можно
а в http://archive.pdp-11.org.ru/ очевидно нет тк код не сможет обращаться к базе с запросами
[строить сложную систему с API для обслуживания внешних сайтов не планирую]

https://pic.maxiol.com/thumbs2/1584734625.1520060551.bupser.png (https://pic.maxiol.com/?v=1584734625.1520060551.bupser.png&dp=2)
у себя этих BUP(три пробела).SAV - штук 8 с разных систем (соотв. разных версий\размеров) ,
это всё не зархивированные образы RT-11[/QUOTE]
так пока индексирование еще не работает по всему *.pdp-11.ru, но это в ближайших планах, да.

hobot
21.03.2020, 11:41
встроить в http://hobot.pdp-11.ru/ можно
а в http://archive.pdp-11.org.ru/ очевидно нет тк код не сможет обращаться к базе с запросами
[строить сложную систему с API для обслуживания внешних сайтов не планирую]

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

SuperMax
06.09.2020, 13:27
Поисковый движок сейчас работает в автоматическом режиме обновления информации

а именно полный цикл обновления информации производится каждую неделю

ближайшие планы:
1. добавить обработку архивов, рекурсивную, с вычислением хешей для начала
2. подключить openMSX-базу ROMов для идентификации ROM-ов