КС:2015:Проект:rpmdb-alien-repos-sync

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
ВНИМАНИЕ! При реализации проекта настоятельно рекомендуется использовать отдельную инсталляцию Linux в виртуальной машине,

иначе вы рискуете получить неработоспособную систему!

Метаданные

ID проекта: rpmdb

Презентация проекта: http://1drv.ms/1VmeBQ0

Что это за проект

Введение

Современные Linux-системы имеют встроенных пакетный менеджер (rpm или deb), который управляет установкой программного обеспечения и обеспечивает его обновления (включая зависимости).

Однако, многие программне системы имеют свои, альтернативные пакетные системы: pip для Python, gems для Ruby или npm для Node.js. Изменения в установленное программное обеспечение, которые вносятся альтернативными пакетными менеджерами, никак не отражаются в системном пакетном менеджере.

Пример коллизии:

sudo pip3 install numpy  
# Ok, установлен numpy для Python3

sudo rpm -i python3-matplotlib.rpm  
# Ошибка! Matplotlib зависит от python3-numpy, который
# установлен через pip, но пакетный менеджер про него
# ничего не знает


Что требуется

Реализовать инструмент для синхронизации базы данных установленных пакетов RPM с пакетными менеджерами:

1. pip (Python2 и Python3)

2. gem (Ruby)

3. npm (Node.js)

Синхронизация должна выполняться прозрачно для пользователя, то есть не требовать ввода отдельных команд.


Чему вы научитесь

1. Познаете устройство механизмов установки и сопровождения ПО

2. Работать с inotify

Начальные требования

1. Умение разрабатывать программы на C++ или Python

Критерии оценивания

Первая контрольная точка (24 октября 2015 г.)

Необходимо иметь git-репозиторий с проектом, в который приглашен ментор. В репозитории должно быть:

  • Файл README.md, который содержит описание проекта, написанный в расчета на "конечного пользователя". Это описание должно быть написано самостоятельно, а не скопировано из Wiki, и отражать Ваше понимание того, что нужно сделать.
  • Программу, которая генерирует корректный текстовый SPEC-файл, из которого можно собрать RPM-пакет с помощью команды rpmbuild.
  • Для тех, кто реализует проект на C++, - проектный файл CMakeLists.txt.

Вторая контрольная точка (14 ноября 2015 г.)

Реализован инструмент, который умеет вносить осмысленные изменения в базу данных RPM

Итоговая оценка

  • 4 балла. Реализована программа, которая при явном запуске вносит изменения о пакетах pip в базу данных rpm
  • 6 баллов. Реализована работа с пакетными менеджерами gem и npm
  • 8 баллов. Реализован демон, который отслеживает изменения и вызывает инструмент для синхронизации
  • +1 балл. Демон оформлен в виде системной службы для systemd
  • +2 балла. Реализована синхронизация в обратную сторону, то есть по данным из rpm выполняется регистрация или удаление программ в

альтернативных пакетных менеджерах

  • +1 балл. Демон использует не более 10 обработчиков событий inotify