За курс операционных систем в моем институте мне всегда было обидно. На протяжении семестра раз в неделю к нам приходил лаборант с методичкой и полтора часа, иногда запинаясь, читал из своего пособия сначала общую информацию о том, что такое ОС и из чего они сделаны, а позже — что такое Linux и как с ним работать.
Даже если отнестись с пониманием к нехватке преподавателей, которые могли бы рассказывать предмет без необходимости постоянно подглядывать в методичку, я всё еще считал, что такая интересная область обделена вниманием незаслуженно. К тому моменту я уже близко познакомился с Linux и понял, насколько ОС на его основе логичны, гибки и просты в настройке, а самое главное — вездесущи. Ну нельзя про него рассказывать только то, что «права на папку — это цэашмод семь-семь-семь, энтер». Поэтому, когда я поступил в магистратуру и пришло время педагогической практики, я сам вызвался вести курс операционных систем с намерением сделать это правильно. И, судя по отзывам студентов, у меня получилось. Пара человек даже сказали, что это был лучший курс за всё время их обучения. Им, правда, еще предстояло посетить занятия по проектированию информационных систем и компьютерной графике других преподавателей, но я спорить не стал — работы было проделано много.
Прошло время, наступил тот самый 2020-й. К этому моменту я уже более пяти лет работал инженером по Unix-системам в сервисном центре компании «Инфосистемы Джет»; прошел обучение на внутренних курсах; опыт моего взаимодействия с Linux одновременно расширился и углубился благодаря нескольким сложным проектам. Мне было что рассказать, и, откровенно говоря, я немного скучал по преподаванию. В этот момент в СЦ обратился отдел обучения с просьбой подготовить курс по основам Linux. Разве можно было упустить такую возможность?
Как и из чего я составил курс?
Отдел обучения предоставил мне главное: полную творческую свободу при составлении курса. Посовещавшись с коллегами, знакомыми преподавателями и методистами, я сформулировал для себя несколько правил:
Готовые инструкции не нужны. По итогу у студентов должна сформироваться эдакая ментальная модель взаимодействия с системой. При ее использовании с помощью мануала они смогут выполнить поставленные задачи.
Одна лекция не должна длиться более 40 минут. Оптимально — 30 минут.
К лекциям нужны слайды, которые можно было бы легко разобрать на раздаточный материал и шпаргалки: таблицы с описанием команд, диаграммы, разбор компонентов.
В лекциях приветствуется юмор и щепотка шитпостинга по делу.
После лекции нужна самостоятельная практическая работа для закрепления знаний.
Между лекцией и практикой потребуется небольшой перерыв. Желающие смогут задать вопросы или сделать себе перед практической частью кружку чая. Те, кому перерыв не нужен, могут приступать к работам сразу.
К каждой практической работе необходимо руководство: на начальном этапе с основами — подробное, по мере продвижения вспомогательные материалы будут нужны реже.
В конце курса — небольшой тест. В ходе проверки можно использовать любые источники информации. Вопросы теста — практические задачи, чтобы их нельзя было просто взять и загуглить.
В любой момент студенты могут задавать вопросы. Понадобится немного времени в конце курса для тем, которые не вошли в основную программу, но интересны отдельным студентам.
Важна обратная связь от студентов. Корректировать занятия лучше в моменте, а не в конце курса. Если кому-либо из студентов требуются более подробные разъяснения, не стоит отказывать. Это полезно не только тем, кто задает вопрос.
Аудитория курса оказалась широкая: сюда записались и инженеры по продуктам Microsoft, и специалисты по сетям, и дежурные инженеры, и тестировщики, и менеджеры. У всех разный уровень технической подготовки и задачи. Было опасение, что на практике могло понадобится намного больше времени. Мелькала мысль включить дополнительные задачи «со звездочкой», но в итоге таких проблем не возникло. Успевающие либо занимались рабочими делами, либо задавали мне еще вопросы.
Последним препятствием на пути к реализации стало уместить семестровый курс в неделю. Пара часов глубоких раздумий и вот программа:
День 1:
Введение: что такое Linux, откуда он пошёл и как связан с Unix. Практическая работа: установка CentOS на виртуальную машину.
Навигация по файловой системе: что подразумевается под файловой системой, как выглядит древо каталогов, как перемещаться по ФС, какие операции с ней можно выполнять, перенаправление вывода. Практическая работа: со шпаргалками по лекции студенты повторяют действия за инструктором.
День 2:
Работа с устройствами и дисками: что находится в каталоге /dev, как взаимодействовать с файлами устройств, какие они бывают, чем может быть полезен /dev/zero или /dev/urandom, что такое блочное устройство и как с ними работать, как смонтировать и размонтировать файловую систему, как работают таблицы разделов и немного об LVM. Практическая работа: добавить в виртуалку новый диск, поделить его на разделы, смонтировать, записать данные из /dev/urandom, зачистить диск и повторить с LVM.
Пользователи и права доступа: что такое пользователь и группа, какие файлы в каталоге etc за них отвечают, что такое UID и GID, кто такой этот ваш суперпользователь, как устанавливаются права доступа на файлы и каталоги. Практическая работа: создать учетку, установить ей пароль, выставить права на каталог, выдать пользователю права на sudo.
Процессы: что это такое, что такое PID, что можно сделать с процессом, зная его, что есть в каталоге /proc, как между процессами делятся права, как выставить приоритет, как запустить процесс в фоне, какие есть инструменты для работы с процессами. Практическая работа: позапускать процессы, потюнить им приоритеты, посмотреть, как от этого меняется нагрузка на процессор.
День 3:
Загрузка и режимы восстановления: как в общих чертах происходит загрузка Linux, начиная с нажатия на кнопку питания, что такое initrd и зачем он нужен, что такое GRUB и как с ним работать, что такое аргументы ядра и чем они могут быть полезны. Практическая работа: работа с GRUB, загрузка в режим восстановления, сброс пароля суперпользователя, .autorelabel для корректной работы SELinux, внесение изменений в меню загрузки и генерация файлов конфигурации GRUB.
Установка ПО: что такое система управления пакетами и как она работает, что такое репозиторий, как еще в Linux можно устанавливать программы. Практическая работа: установка программ из репозиториев, настройка репозитория из образа диска, сборка и установка дополнений гостевой ОС VirtualBox скриптом, установка нового ядра и обновление всех пакетов из репозитория, установка графического окружения.
Полезное ПО: небольшая лекция с рекомендациями о том, как можно сделать свою жизнь в Linux приятнее, а взаимодействие с ним других систем — проще. Практической работы в этом разделе не предусмотрено.
День 4:
Сервисы и планирование задач: что такое systemd, как жилось до systemd, что такое сервис и чем он отличается от демона, что такое юнит, как со всем этим работать. Плюс планирование заданий с помощью крона. Практическая работа: работа с systemd, написание юнит-файла для своего сервиса, планирование заданий в кроне.
Работа с сетью: почему сетевых устройств нет в /dev, как же тогда с ними работать, какие конфигурации сетевых интерфейсов возможны, что такое сетевые мосты и бондинг. Практическая работа: склонировать настроенную виртуальную машину и поднять между оригиналом и клоном сначала один линк, а потом собрать бонд, плюс тесты обеих конфигураций с помощью iperf.
День 5: темы по заявкам и финальный тест.
Чтобы снизить вероятность отказов, практические работы написаны и обкатаны в той же среде, где собираются работать студенты. Первая из них — установка системы в виртуалку. На примере — в установке Linux ничего сложного нет.
Вот и мой курс. Составляя его, я опирался на опыт изучения химии. В школе преподаватель показал, что изучение сложных предметов не обязано быть скучным и муторным. Я до сих пор помню множество небольших стишков и даже сказок о химических элементах, соединениях и реакциях. К чему это всё? Я, к сожалению, поэтическим даром обделен, но нашел другой способ поддерживать интерес студентов к материалу — шитпостинг:
Тут много картинок
Техническая сторона вопроса — оснащение
Курс разрабатывался под дистанционное обучение. Я рассудил, что с технической точки зрения работа преподавателя на удаленке мало чем отличается от работы стримера на Твиче. К тому же хотелось провести курс хорошо. Поэтому к обеспечению трансляции я подошел основательно:
На транслирующий компьютер установлен любимый многими OBS.
К компьютеру подключены две платы захвата: к одной — камера, ко второй — видеовыход ноутбука с тачскрином. Оба видеоисточника заведены в OBS.
Ноутбук с тачскрином показывает презентации, крутит виртуалку с демонстрацией и подрабатывает на полставки доской для рисования.
В OBS настроены несколько сцен: вывод захвата камеры и ноутбука крупным планом, поменьше — в углу; заставка в перерыве и настроечная таблица на случай технических сложностей. На всякий случай добавил сцены с демонстрацией обоих потоков захвата без оформления и захват рабочего стола самого компьютера, который занимается трансляцией. Звук изначально шел с петличного микрофона напрямую в комп, позже в конфигурацию добавился пульт.
Для оформления сцен я наделал скриншотов из потомка незаслуженно забытой операционки BeOS (Haiku) и немного их отредактировал:
По закону жанра всё это было настроено в ночь перед первым днем нового курса. Но за два года преподавания конфигурация OBS не претерпела никаких существенных изменений. Чтобы быстро переключать сцены, я подключил midi-клавиатуру с пэдами и использовал ее как стримдек.
Во время перерывов я захотел поставить легкую музыку жанра Chill Hip-Hop Beats to Relax and Study to. Для этого через дискорд связался с одним небольшим лейблом и попросил разрешения использовать их музыку. Ребята оказались не против, и у меня появилась приличная библиотека приятной фоновой музыки для перерывов.
В результате для ведения обучения была собрана совершенно оверкилльная конфигурация:
(для чересчур любопытных: к монитору справа в первый день занятий не нашлось кабеля DVI-HDMI)
Слишком сложно? Да. Было ли это интересно собирать и настраивать? Безусловно. Работает? Еще как! Кому интересно, могу рассказать еще детальнее.
Как всё прошло + котики
Когда я писал эту статью, мой курс прошли 10 групп по 15–17 человек.
Немного отступлю. Думаю, за время тотальной удаленки и бесконечных созвонов в зуме мы все уяснили одно важное правило: если во время видеоконференции в кадре появляется домашнее животное, непременно прервитесь и покажите его всем. Мой курс не исключение. Тигр иногда заходил посидеть на плече и порадовать студентов.
Тайминги совпали с планом: 30–40 минут на лекцию, 15 минут перерыва, полтора-два часа на практические работы, разбор проблем и вопросы о Linux, которые в курсе не освещаются.
С обратной связью получилось чуть хуже, чем я ожидал: многие только здоровались утром и прощались в конце занятий. Но учитывая общее настроение учащихся в разгар пандемии, это вполне неплохой результат. К тому же практические работы успешно выполняли все. Помимо этого, мы обсуждали интересующие вопросы и разбирали возникающие проблемы совместно с другими студентами.
В остальном курс оказался удачным. Многие студенты оставляли благодарности и, что важно, отмечали, что он помог им упорядочить знания о линуксе, что и было моей главной целью.
Что осталось за пределами и просто не получилось
К сожалению, не все темы удалось включить в курс. Что-то — из-за нехватки ресурсов, что-то — из-за недостатка времени. К некоторым из этих идей я бы хотел при возможности вернуться. Например?
Некоторые студенты не имеют возможности настроить VirtualBox с аппаратной виртуализацией, из-за чего вынуждены проводить работы на 32-битных виртуалках с пониженной производительностью. Для них хотелось бы предоставить централизованный стенд с вложенными виртуальными машинами, который можно было бы легко откатывать на исходное состояние.
В презентации к лекциям и в практические работы я хотел добавить постоянного персонажа опоссума, срисованного с опоссума из Awoo Comic по имени Тоби (в некоторых переводах Витёк). Я даже связался с автором комикса, ЭйСи Стюартом, и получил его разрешение на использование его персонажа. К сожалению, времени как следует продумать эту идею и заказать рисунки иллюстратору не осталось, а сам я рисую не то чтобы хорошо:
Помимо этого, из-за ковидных ограничений не удалось договориться с труппой Нидерландского балета о постановке интерпретативного танца о процессе загрузки ядра, пришлось выкручиваться без него. К тому же такие расходы не понравились бы отделу финансового контроля.
Погодите, это разве не обычный класс, только в зуме?
Так и есть. Курс рождался в кратчайшие сроки в странном 2020-м под очень большой спрос внутри компании. После 10 групп и 120 обученных сотрудников стало понятно: формат виртуальной классной комнаты не всегда подходит, несмотря на хорошие отзывы студентов. Обучающимся часто невозможно полностью выключиться из рабочих процессов, более того — каждый усваивает материал со своей скоростью.
В этом году отдел обучения приступил к тестированию и внедрению новой платформы, которой может воспользоваться любой сотрудник компании. Я планирую немного обновить этот курс под более актуальные дистрибутивы, после чего его вместе с другими программами преобразовать в набор юнитов для самостоятельного изучения. В итоге каждый обучающийся сможет составить собственный трек под рабочие задачи. Например, инженеры по сетям добавят темы по углубленному изучению сетевого стэка, проектировщики СХД — работу дисковой подсистемы, менеджеры ограничатся быстрым обзорным курсом.
Шитпосты, конечно же, никуда не денутся.