Открытой системе — открытый курс: автоматизированный Linux курс для корпоративного обучения

Kate

Administrator
Команда форума
Возможно, вы ловили себя на мысли, что было бы неплохо провести для коллег-новичков в Linux небольшой курс с практическими задачками. Такой курс, чтобы после его прохождения, они могли использовать ОС на уровне продвинутого пользователя, активно пользоваться терминалом, писать bash-скрипты, шарить за wildcard и SSH-туннели и прочую магию Linux. При этом было бы здорово, чтобы оценка за выполнение практической работы выставлялась в LMS автоматически, а вы бы только отслеживали прогресс коллег в электронном журнале и помогали с затыками. Если вы узнали себя в описании - эта статья для вас. Материалы этого курса также могут быть полезными для преподавателей учебных заведений, желающих добавить практики в свои курсы по Linux.

Приветственная ASCII-графика утилиты проверки практических работ

Приветственная ASCII-графика утилиты проверки практических работ
Сразу отмечу, этот курс не для индивидуального прохождения, поскольку требует развертывание инфраструктуры. Для индивидуального прохождения есть много отличных бесплатных курсов, например, на платформе Stepik.

Курс был разработан и прочитан мною в период работы в компании Haulmont (многие материалы, однако, были переработаны с того момента), с любезного разрешения коллег, я решил опубликовать учебные материалы, т.к. работа была проведена немалая, и возможно, готовый курс сэкономит кому-нибудь время.

Курс оформлен в качестве репозитория на Github https://github.com/GurSergey/Open-Linux-Course

Что находится в составе репозитория?​

  1. Директория lectures - Лекционные материалы оформленные в формате Markdown с картинками. Также там содержатся некоторые файлы для практических работ.
  2. Директория lms-export-course - файлы архивы для экспорта курса в LMS. На данный момент есть файл для экспорта в Canvas
  3. Директория presentations - файлы презентации для проведения лекций в формате pdf и pptx
  4. Директория task-checker - исходный код утилиты для проверки практических заданий. Написана на языке C.
  5. Директория virtual-machine-ssh - файлы необходимые для создания виртуальной машины, которая нужна для задания связанного с ssh. Виртуалка собирается с помощью Vagrant файла.
  6. Директория webuihelper - исходный код вспомогательного Web-приложения, написан на Python с использованием фреймворка Django

Какая программа курса?​

  1. Введение. Сравнение Windows и Linux
    Основные вводные понятия: ОС, ядро ОС, лицензия, дистрибутивы
    В качестве задания: установка Ubuntu на виртуальную машину
  2. Дистрибутивы Linux
    Описание популярных дистрибутивов и их различия, графические оболочки, дисплейный сервер
  3. Командная оболочка
    Введение в использование терминала, основные команды для работы с файлами, поиска, архивации. Работа с историей консоли. Понятие внутренних и внешних команд
    В качестве задания: тест и нулевая задачка, направленная на знакомство с task_checker
  4. Работа с файлами в Linux. Часть 1
    Абстракция файла, спец. пути и стандартные каталоги. Подробное изучение команд для работы с файлами.
    В качестве задания: задачка на создание иерархии директорий и файлов
  5. Работа с файлами в Linux. Часть 2
    Абстракция ссылок, редактирование файлов в Vim и Nano, команды для поиска в текстовых файлах, права доступа
    В качестве задания: две задачи - "Архивация, фильтрация текста и регулярные выражения" и "Права доступа и ссылки"
  6. Процессы
    Понятие процесса и его состояние, дерево процессов, procfs, команды для работы с процессами, приоритеты процессов
    В качестве задания: задача по процессам, завязанная на запусках программы sleep
  7. Продвинутые возможности Bash
    Конвейеры, код возврата, объединение команд, перенаправление потоков ввода и вывода, команды часто используемые в конвейерах, подстановки, операторы, выражения, функции
    В качестве задания: 4 задачи на написание bash-скриптов - вывод инфо о компьютере, подсчет суммы арифметической прогрессии, поиск НОД, использование позиционных параметров
  8. Администрирование
    Понятие пользователя и его свойства, управление пакетами, системные службы, использование SSH и создание тоннелей
    В качестве задания: задача на установку пакетов, подключение по ssh, копирование и чтение файлов с удаленного хоста, запуск скриптов на удаленном хосте, создание SSH-тоннелей
На лекционных материалах заострять внимание сильно не будем. Они стандартны для подобного типа курсов - текст с картинками и небольшими вставками кода. Объем курса соответствует примерно 2 месяцам изучения, если каждый модуль проходить за одну неделю.

Что представляет собой task-checker?​

Это небольшая консольная утилита, которая нужна обучающемуся для проверки практических заданий. При запуске утилиты студент видит ASCII-графику, персонализированное текстовое приветствие и список задач доступных для проверки:

Запуск утилиты проверки

Запуск утилиты проверки
Студенту предлагается ввести с клавиатуры номер задачи, которую он хочет проверить.

Рассмотрим как происходит процесс проверки на примере нулевой задачки - Hello world. Задача рассчитана на ознакомление с системой проверки, поэтому цель очень простая. Нужно создать файл 1.txt с текстом Hello World и положить рядом с linux_task_checker, после чего запустить его. Попробуем схитрить и сдать задачу, не выполнив ее. Не создаем файл и вводим номер задачи - 0:

Пример вывода при неправильном решении

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

Попробуем сдать честно. Создаем файл 1.txt и вводим Hello world. Запускаем:

Пингвин Tux поздравляет нас

Пингвин Tux поздравляет нас
Теперь все хорошо и появился пингвин Tux, чтобы поздравить нас с выполненным заданием. После этого оценка выставляется в LMS (утилита не ходит напрямую в LMS, но об этом дальше). Идем в LMS и радуемся нашей оценке:

0ec5420b3c05bd948533d089a7cafc17.png

Как студенту получить task-checker? Зачем нужен webuihelper?​

Утилиту где-то нужно скомпилировать и студенту выдать. Для этого есть веб-приложение webuihelper. Ее интерфейс очень прост. При первом входе предлагается ввести логин и пароль (при первом входе выдается администратором курса):

Вход от имени студента

Вход от имени студента
После входа есть три ссылки - скачать task_checker, выйти и сменить пароль:

Интерфейс webuihelper от имени студента

Интерфейс webuihelper от имени студента
Нажимаем Get Linux task_checker. Получаем сообщение, что компиляции нашего экземпляра task_checker началась "Your checker start compiling, please wait several seconds, and reload this page". Ждем две секунды и нажимаем Reload. После этого браузер загружает task_checker на компьютер студента.

Webuihelper также нужен выставление оценок в LMS, т.к. task_checker не ходит напрямую в LMS, он обращается к webuihelper. Webuihelper производит аутентификацию пользователя по токену, зашитому при компиляции в task_checker. После чего webuihelper ходит от имени админа в LMS и ставит студенту оценку.

Схема взаимодействия компонентов при сдаче задания

Схема взаимодействия компонентов при сдаче задания

Как развернуть инфраструктуру для курса?​

Поднимаете LMS или арендуете ее в облаке. На данный момент готова только интеграция с Canvas. В будущем могут появится другие популярные открытые LMS.

Импортируете файл с материалами в LMS из директории lms-export-course

Развернутый курс в LMS

Развернутый курс в LMS
Разворачиваете webuihelper. Для этого в директории webuihelper есть файл docker-compose. Единственное - перед сборкой контейнера нужно не забыть в webuihelper подложить директорию task-checker. Можете также поменять в файле docker-compose переменные окружения, связанные с кредами админа. Вводим:

cd webuihelper
docker-compose up
После этого заходите в панель администратора webuihelper'а, используя креды из файла docker-compose. Панель открывается по url /admin :

509d009b0a779521ee01eec7150b6722.png

Заходим в Config. Там есть ряд настроек:

  • HELPER_URL - это url, по которому можно обратиться к webuihelper
  • CANVAS_LMS_URL - это базовый url, на котором развернута LMS
  • ADMIN_TOKEN - токен администратора, который может выставлять оценки на курсе. С использованием этого токена webuihelper выставляет оценку в LMS
  • COURSE_ID - идентификатор курса в LMS. Посмотреть его вы можете если перейдете на страницу курса в LMS. Вы увидите url, например для Canvas, <base_url>/courses/7460851. Цифры это и есть идентификатор курса
  • ZERO_TASK_ID ... NINE_TASK_ID - идентификаторы задачек с автоматизированной проверкой. Посмотреть их также можно, если перейти на страницу с задачей. Для Canvas, <base_url>/assignments/40258880.
Добавляем студентов в курс в интерфейсе LMS. Далее их нужно добавить в webuihelper. К сожалению, на текущем этапе нет реализации интеграции, которая автоматически подтянула из LMS всех зачисленных студентов на курс. Поэтому пока придется ввести руками. Создаем запись User'а, задаем ему логин и пароль (пароль потом можно сменить). Далее создаем запись студента. Выбираем пользователя из списка, токен студента генерируется автоматически, а идентификатор ищем в LMS по url страницы пользователя. Он может выглядеть так - <base_url>/users/108696783.

Последний штрих - поднимаем виртуальную машину с помощью Vagrant. Она нужна для последнего задания, связанного с ssh. Вводим команду:

cd virtual-machine-ssh
vagrant up

Ближайшие планы по развитию проекта​

  1. Нужно добавить возможность вытягивать список студентов одной кнопкой в webuihelper
  2. Добавить поддержку других популярных LMS, например, OpenOlat, OpenEdx, Moodle
  3. Есть проблема, связанная с запуском task_checker в другом окружении. Если версия библиотек не совпадает с теми, что были при сборке, то падает ошибка. Придумать как обойти эту проблему
  4. Подумать над реализацией сборки курса для импорта из файлов Markdown
  5. Добавление английской версии лекционных файлов
Буду очень рад любой обратной связи, идеям по улучшению и помощи в развитии проекта. На этом все.
Благодарю за внимание!

 
Сверху