Разработка решений на базе Cockpit (Руслан Рахманбердиев, OSSDEVCONF-2025)
Материал из 0x1.tv
- Докладчик
- Руслан Рахманбердиев
Cockpit— это открытый веб-интерфейс, который предоставляет возможность удалённого доступа и настройки Linux сервера.В докладе рассматривается выбор решения
Cockpit, его архитектура и возможность расширения функционала с актуальными примерами.
Содержание
Видео[править вики-текст]
Презентация[править вики-текст]
Thesis[править | править вики-текст]
Ключевые слова: Администрирование, Cockpit, Linux, разработка.
Зачастую в Linux системах для удобства могут потребоваться графические утилиты для выполнения того или иного функционала. Как правило это настройка или управление каким-либо компонентом системы.
После ознакомления с Cockpit, тестовых проб, были выявлены несколько преимуществ, которые склонили решение в пользу Cockpit:
- полноценная многофункциональная платформа, которую можно доработать и добавить необходимый функционал;
- понятное пользователю поведение и расположение;
- целостный вид интерфейса в едином стиле;
- в основе WEB-технологии;
- можно использовать разнообразные инструменты в качестве бекенда;
- возможность использовать как локально, так и удалённо;
- пакеты уже присутствуют в системе, достаточно установить и запустить сокет;
- процесс не занимает память постоянно, запускается для каждой сессии пользователя.
Cockpit позволяет посмотреть на свой сервер в обычном веб-браузере и выполнить системные задачи с помощью нескольких кликов мышки. Некоторые из основных возможностей приложения:
- проверять и изменять сетевые настройки;
- управлять хранилищем (включая RAID и разделы LUKS);
- создавать виртуальные машины и управлять ими;
- загружать и запускать контейнеры;
- проверять аппаратное обеспечение системы;
- обновлять программное обеспечение;
- управлять пользователями;
- терминал;
- даже подключаться к удалённым машинам.
Одна из важных черт панели управления Cockpit — он модульный. Что само собой подразумевает возможность расширения с помощью плагинов или даже исправлять его «родной» функционал. Cockpit предоставляет достаточно внушительный API для взаимодействия с системой:
- работа с файлами;
- вызов исполняемых файлов;
- взаимодействие с DBUS;
- HTTP клиент;
- локализация;
- чтение данных о пользователе и текущей сессии.
Для разработчика плагина предоставлена документация на ресурсе проекта, есть примеры в самом репозитории проекта. И достаточно хорошая стартовая точка в виде репозитория starter-kit, который может полноценно использоваться как шаблон для будущего плагина.
В целом разработка плагина выглядит относительно просто. Плагин с точки зрения Cockpit — каталог в определённом месте, с определённым названием и наполнением. Для написания используется JS фреймворк React и CSS фреймворк PatternFly. В файле метаданных (в формате JSON) описываются дополнительные настройки и указывается наименование html файла, с которого начнётся подключение плагина.
Рассмотрим более детально структуру плагина на базе репозитория starter-kit:
/usr/share/cockpit/cockpit-starter-kit |– index.css |– index.css.map |– index.html |– index.js |– index.js.LEGAL.txt |– index.js.map |– manifest.json |– po.de.js |– po.manifest.de.js
Также покажу чуть более сложный пример — наш плагин для управления настройками загрузчика. Можно управлять настройками по умолчанию и аргументами каждого из ядер загрузчика. UI получается в общем стиле Cockpit, в качестве бекенда — обращение к скрипту, написанному на Python, для изменения настроек и чтения конфигов. Результат возвращается в JSON формате, читается в UI и отображается пользователю в привычном ему виде.
На текущий момент так выглядит основная страница плагина, и у нас реализованы такие плагины, как:
- Aide;
- Bootloader;
- Multi-seat;
- Quota;
- USBGuard;
- LibreOffice;
- Виртуальные терминалы.
Все плагины в открытом доступе.
