Advertisement
gluk47

dsilakov: 28 September

Sep 28th, 2014
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.48 KB | None | 0 0
  1.  
  2. On 28.09.2014 16:53, Egor Kochetoff wrote:
  3. > Добрый день, Денис!
  4. >
  5. > Нам нужно немного сведений, чтобы сделать программу по высшему разряду.
  6. > Вот например, какой Ваш второй инициал для титульного листа ТЗ? И Ваша должность — туда же.
  7.  
  8. Силаков Д.В., начальник отдела Технологических разработок и сопровождения
  9.  
  10. >
  11. > Как должны выглядеть отчёты? Если это будет yaml-файл в указанной в конфиге папке — нормально? Или надо json? html?
  12. yaml - ok.
  13.  
  14. > Имеются ли какие-то сформулированные требования к быстродействию? Мы себе не очень представляем, в каких терминах их формулировать, а писать в ТЗ «чтоб работала с приемлемой скоростью» совершенно бессмысленно.
  15.  
  16. Смотри - нам необходимо анализировать достаточно много репозиториев; как минимум, все репозитории из этих папок:
  17. http://mirror.rosalab.ru/rosa/rosa2014.1/repository/
  18. http://mirror.rosalab.ru/rosa/rosa2012lts/repository/
  19. http://mirror.rosalab.ru/rosa/server/6.5/repository/
  20. http://mirror.rosalab.ru/openmandriva/openmandriva2014.0/repository/
  21. http://mirror.rosalab.ru/openmandriva/cooker/repository/
  22.  
  23. Там счет идет на десятки, если не сотни тысяч пакетов (правда, можно заранее отсечь всякие -devel, -debuginfo и прочие, где точно нет бинарных символов).
  24.  
  25. В идеале, весь анализ надо уложить в несколько часов - поскольку он выполняется как часть более общего набора тестов (которые лежат на http://fba.rosalinux.ru/), и хотелось бы, чтобы все эти тесты проходили за ночь (~12 часов). А там и без того немало "тяжелых" вещей (например, rpmlint).
  26.  
  27. > А ещё: обязательно ли использовать питон?
  28. > Потому что можно сделать так (используя /bin/bash):
  29. > nm -Cu для всех исполнимых файлов с выводом результатов в соответствующие файлы
  30. > uniq ото всех полученных файлов с формированием результата в выходной файл requires-all
  31. > nm -Cg для всех библиотек и аналогично собрать все в список provides-all.
  32. > Потом grep -Fxvf provides-all requires-all
  33. >
  34. > Ну и если найдутся такие requires, для которых нет provides, то детально формировать отчёт об ошибке.
  35. > Для всего этого bash удобней питона — меньше кода, его логичней использовать для вызова внешних программ.
  36.  
  37. > Или есть какие-то требования к встраиванию программы как модуль питона куда-нибудь? Если да, то какие?
  38. >
  39.  
  40. А оно сейчас так и реализовано. Можешь тут глянуть, например:
  41. https://abf.io/dsilakov/repo-checkers
  42.  
  43. И главное требование, с которым bash и grep радикально не справляются - это быстродействие.
  44.  
  45. Во-первых, невозможно проанализировать все репозитории "с нуля" - куча времени уходит просто на распаковку rpm-пакетов. Поэтому там сейчас реализована некоторая инкрементность - результаты "nm" для пакета складываются в файл, и при повторном запуске идет проверка - если такой файл для пакета уже есть, то пакет вооще не распаковывается.
  46.  
  47. Но даже с такой инкрементальностью возникают сложности - иметь дело с десятками тысяч файлов уже непросто, тут напрашивается какая-нибудь база данных. Например, если есть 100.000 файлов с данными от nm в одной директории, то ФС начинает притормаживать. И даже если на обработку одного файла (проверку того, что он есть, и считывание данных из него) мы затратим 0.1 секунды, то на 100.000 файлов у нас уйдет ~2.5 часа. Плюс grep на таких объемах данных работает очень не быстро и кушает кучу ресурсов. Вплоть до того, что может быть убит ядром.
  48.  
  49. Оценки грубые, но реальность такова, что при текуем подходе с использованием bash и nm мы вынуждены разносить проверки разных репозиториев по дням недели - посмотри на файл https://abf.io/dsilakov/repo-checkers/blob/master/launch_tests.sh, там есть такие сообщения - "Skipping - not today".
  50.  
  51. В принципе, были пробные попытки использовать sqlite, но как-то до дела не дошло.
  52.  
  53. В принципе, против bash возражений. Но есть ощущение, что данные лучше складывать не в файлы, а в базу данных, и отчеты строить средствами sql, а не grep.
  54.  
  55. > PS. Ну и ещё маленький вопрос: есть ли требования к формату конфига? Подойдёт ли yaml или bash (как /etc/bashrc)?
  56. >
  57.  
  58. нет, никаких требований. Как удобно, так и делаете.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement