Система доставки и эксплуатации виртуалок
Постановка задачи
- Имеется несколько классов с компьютерами, чья мощность достаточна для запуска минимум одной виртуальной машины
 - Виртуальные машины (далее VE) запускаются путём выбора из образов, которые заранее разложены на компьютеры (возможно, для разных классов разные) 
- VE могут быть с сохранением состояния: после перезагрузки, в т. ч. хост-системы остаются проделанные изменения в гостевой системы
 VE могут быть без сохранения состояния: после выключения гостевой системы все изменения в ней пропадают
- Хост-система должна аутентифицировать пользователя
 - В гостевые системы может потребоваться пробрасывать персональные каталоги пользователей и/или подходящие файлопомойки
 - Гостевые системы бывают, как минимум, Linux-based и Windows8
 
 - Образы подготавливаются заранее (администратором или преподавателем) и заливаются на все подходящие машины
 
Структура
- рабочее место администратора
 - torrent-сервер
 - сервер разделяемых каталогов
 - (?) сервер сетевой загрузки
 - Хост-машина
 
Рабочее место админа
- Задачи 
- приём и подготовка образов
 - выкладывание образов
 
 - Как работает сейчас 
- Сейчас используется голый образ диска .vdi, который потом вручную обмазывается конфигом
 Клиентский работающий VDI-образ конвертируется в RO, есть проблемы автоматизации для VB
 - Как планируется делать 
- (Перейти на .ova/.ovf) 
FrBrGeorge утверждает, что .ov[af] отлично импортируется в VirtualBox, при этом все хост-специфичные подробности конфигов меняются на специфичные для target-хоста
 - Сконвертировать в RO-образ
 - Запаковать в торрент и положить на торрент-сервер
 
 - (Перейти на .ova/.ovf) 
 
Torrent-сервер
- Задачи 
- отдача подкаталогов с виртуалками
 - отдача плееров, репозиторий центрального управления
 для VirtualBox: раздача конфигов.
FrBrGeorge что это, поясните!
 - как работает сейчас и что не так 
 TODO (если длинный текст, лучше сделать подстраницу) 
 - Как должно работать 
- Образы: Torrent client+torrent tracker 
 формат образа 
 - torrent client настроен таким образом, что не даёт скачать с себя много, после отдачи 2x объёма (каждого блока минимум дважды) пускай клиенты друг у друга тянут (защита от request storm). 
- возможно стоит больше, чем 2x, на случай если оба клиента, скачавшие некий блок, будут преждевременно выключены пользователем, например.
 
 - Иногда классы качают не одновременно, а сервер мог отдать 2х в другой класс, который сейчас выключен, поэтому cподручнее не переставать раздавать, а выжидать академическую пару. Также у админа должна быть возможность оперативно включить раздачу насильно (на совсем чёрный день). Такой режим ещё называют super-seed.
 - клиенты должны репортить, когда скачали образ, чтобы можно было централизованно наблюдать, кто обновился, а кто нет.
 
 - Образы: Torrent client+torrent tracker 
 
Прошивка
- Задачи 
- Поиск и запуск плеера по умолчанию (собственно, хост-системы)
 - Ручной выбор другого плеера (если есть)
 - Выбор другого плеера по общей команде из сети
 - По команде из сети делать дефолтным другой плеер
 
 - Как должно работать 
- Прошивка грузится
 - Находит все имеющиеся на диске образа плеера  
- Если сеть есть: лезет по сети на сервер, видит там, какая версия считается актуальной, записывает себе на будущее
 
 - Показывает меню выбора плеера. если юзер не выбрал, то версия по умолчанию (из предыдущего пункта)
 - Запускает плеер 
- Зависит от того, в каком виде упакован плеер
 
 
 
 
 TODO 
 разобрать  
Плеер (ОС машин в классах)
Задачи
- Запуск виртуалок из образов
 - Хранение и обновление образов
 - (на будущее) изготовление новых образов
 - Всё вышеописанное — независимо от используемого гипервизора.
 Нужна возможность централизованной автоматической конфигурации классов.
- Скачивание по команде из сети свежих версий образов виртуалок и плеера (если идем по пути ro-образов)
 
Как распространяется на машины
Несколько путей с преимуществами и недостатками:
- Использовать раздел на диске (как сейчас) и размножать его Clonezilla. 
- Минус: неудобно заменять хост-систему, но часто ли это необходимо?
 - Сейчас так на машину попадает первоначальная копия системы.
 
 - Использовать раздел на диске (как сейчас) и распаковывать туда файлы. 
- Можно комбинировать с предыдущим (сейчас классы ровно так и тюнингуются по требованию)
 - Достоинство: простота устройства — система отлаживается на dev-машине (например, та, что в 762), файлы уходят на сервер, оттуда распаковываются на клиенты.
 - Недостаток — необходимо прикрутить контроль версий либо на уровне ФС (zfs? btrfs? у них свои недостатки, возможно, преувеличенные), либо использовать какой-нибудь rsync в транзакционном режиме. Сложно доказать отказоустойчивость.
 - Интересное наблюдение: с одной стороны, сейчас конфигурация (/etc/*) так и подкладывается (переносится tar-архив), с другой стороны некоторые выступают против wget -O- | tar -xf -.
 
 - Использовать ro-образы систем. 
- Преимущество — полный контроль над состоянием машины и транзакционность. 
- Образы (как плееров, так и виртуалок) лежат на локальном хранилище.
 - Свежие образы систем можно хранить как поблочную разницу с предыдущим
 
 - Пути решения: 
- squashfs-root + kernel + custom initrd
 - iso-образ, подобный образу загрузочного CD/USB
 
 - Недостаток: сложно администрировать, готовое к деплою решение есть только в Альте, в других linux-системах задача решена частично как недостаточно ценная.
 
 - Преимущество — полный контроль над состоянием машины и транзакционность. 
 
Как работает
Для заливки используется торрент, т. к. это помогает избежать request storm
- синхронизует все торрент-файлы с условленным местом 
- (на будущее) это место может для разных классов быть разным
 
 - торрентом скачивает сам образ
 - когда торрент готов: 
- разрегистрирует удалённые виртуалки
 - регистрирует виртуалку
 - обновляет меню образов
 - продолжает раздавать соседям (да и в другие классы)
 
 - (?) авторизует пользователей, монтирует home 
- по опыту, проброс папки из хоста через VB shared folder в гостевой юникс к добру не всегда приводит;
 
 - предлагает меню образов и запускает соотв. виртуалку с подкладыванием RW-дифференшиал поверх RO-исходного образа
 - дифференшиал это временный, удаляется, например, при обновлении образа или при перезагрузке (можно вынести в опцию, спрятать в отдельное меню и менять поведение для пары юзер-машина)
 - (на будущее) в отдельном меню позволяет из RO+differential сделать новый RO
 - ?? как потом этот образ забирать? Множество способов, все одинаково подходят. Например, уведомлять администратора по почте, что на машине M в классе N лежит свежий образ V от преподавателя ABC.
 
Гостевая виртуалка
Задачи
- отлично работает, импортируется, и ничего уныло хакать не надо, что нужно преподу — софт, какая-то сеть и т. п.
 
Как работает
- Нужен какой-то стандарт на оформление настроек виртуалки, чтобы она из коробки сразу работала (вообще-то так и должно, но мало ли) 
- Выполняет ли эту задачу OVF? Проверить. 
Преимущество OVF в том, что с ним дружат все гипервизоры в какой-либо мере, и готовить образ можно в том же VirtualBox.
 
 - Выполняет ли эту задачу OVF? Проверить. 
 - Нужно договориться, что делать с сетью. 
- ??? Сеть везде из коробки работает. Есть специфические запросы (например, проброс портов), с ними каждый раз надо решать новую проблему каждого препода (пока только один такой случай был — ВМШ)
 
 
TODO
- Другие не-VB гипервизоры: qemu{,-kvm}, xen 
- Ни тот, ни другой не проверялись на актуальном железе классов.
 - qemu успешно 100% раз запускается на личной машинке 5-летней давности, визуально не лагает, позволяет работать с типовыми учебными приложениями, собирать код на сях. Тестировался стартеркит Alt p8 со средой MATE и дебиан 8 с XFCE.
 - Преимущество qemu - простая архитектура управления, которая не мешает админу. Вся конфигурация виртуалки выразима в опциях командной строки, никаких служебных избыточных БД, никаких внезапных изменений прав. Нечему ломаться, кроме багов гипервизора и гостя.
 
 
