Пробуем SelectOS
Автор: Шубин Роман Олегович
Привет, господа и дамы. Дошли у меня руки потыкать в боевых условиях серверный дистрибутив SelectOS. В нашем чатике про этот дистрибутив было много разговоров, сегодня посмотрим всё на практике и потыкаем палкой.
Сразу уточню, что это не очередная поделка Попова и Бабушкина, а профессионально собранное решение от наших коллег — Selectel.
Дистрибутив SelectOS серверная операционная система общего назначения, которая устанавливается как на виртуальные машины, так и на железные.
Установить можно даже за пределами Selectel инфраструктуры. То есть условно я могу взять исошник и раскатить себе на домашний сервак с proxmox или на тот же virtualbox.
Тут снимаю шляпу, ребята сделали удобно и универсально.
Что примечательно, для поддержки дистрибутива существует внутренняя команда ментейнеров. Команда отслеживает патчи безопасности и актуальность версий ПО.
За основу был взять Debian и допилен. Повышена стабильность репозитория и работы сети, добавлена функциональность DPDK (Data Plane Development Kit).
DPDK — это набор библиотек и драйверов, который ускоряет обработку пакетов в сетевых приложениях.
То есть дает ускорение сети в 3–5 раз. Заманчиво!
У меня всегда была боль с debian и версиями ПО, вроде и дистрибутив свежий, а внутри доисторический nginx, rsyslog и т.п. А хочется нового!
С лирикой заканчиваем, пошли тыкать.
Для начала я раздобыл ссылку на сам дистрибутив. Написал тикет в поддержку и в ответ получил желаемое.
Доступно 2 версии, Базовая и VPS.
Базовая версия более универсальная и подходит для всего.
Облачная (VPS) заточена конкретно под Облачную платформу Selectel.
Технические требования у нас имеются, значит будем им соответствовать, заодно и проверим.
Создаем новый сервер: 1 CPU / 512Mb RAM / 5Gb NVMe
Я буду раскатывать базовую версию на proxmox. Импортируем iso'шник (около 360 мегабайт) в templates. Создаем новую виртуальную машину.
Производим установку дистрибутива. Всё стандартно, как и с другим Linux.
Всё интуитивно понятно, не запутаешься. В официальной документации этот процесс подробно описан.
Нюанс, SelectOS 1.1 не запускается (моргает курсор) если размер памяти 512 мегабайт, хотя в требованиях написано именно 512. Я тёртый калач и сразу понял, что дело в памяти, накинул еще 512 и тогда всё взлетело.
По итогу я получил такой конфиг:
И после установки порадовался результатом:
Что дальше, первым делом я закидываю публичную часть своего ssh ключа для пользователя root. Чтобы избавить себя от паролей.
Как это сделать, я уже 100500 раз показывал и рассказывал. У нас сегодня про SelectOS, а не про админство.
Если коротко, ключи заработали с первого раза, никаких отличий от других дистрибутивов я не заметил.
Подключаюсь по ssh к серверу, ай да красота! Динозавр!
Смотрим что у нас за дистрибутив:
cat /etc/issus
Моё почтение! Было подозрение что покажет Debian, но нет, тут всё четко, молодцы ребята!
apt update && apt upgrade
Видим что по умолчанию используются зеркала Selectel:
Проверяем установлен ли selinux:
dpkg -l | grep selinux
apt install policycoreutils sestatus
Выключен. То есть по умолчанию из коробки эта штука в disabled. Не знаю почему, но я был уверен, что она включена. Ну да ладно, в дальнейшем будет меньше танцев с бубном.
Давай посмотрим, что у нас со свободным местом:
df -h
Используется 1.5 ГБ на чистой системе, вполне достойно. В debian эта цифра колеблется ~1.2–1.5 ГБ.
Дальше я ставлю необходимые пакеты для комфортной работы:
apt install mc htop git rsync curl psmisc
Зеркала не подводят. Да и с версиями какая-то сказка. У меня на ubuntu 24.04 версия midnight commander == 4.8.30, а в SelectOS == 4.8.29.
В SelectOS всё достаточно новенькое. Ну и самое главное рабочее, то есть при запуске того же mc он не выпадает в segmentation fault core dumped.
Теперь поинтереснее, попробуем поставить docker и посмотреть, фурычит ли он вообще.
Берем команды из официальной документации по docker:
# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update
Err:3 https://download.docker.com/linux/debian selectos Release 404 Not Found [IP: 3.164.206.102 443]
E: The repository 'https://download.docker.com/linux/debian selectos Release' does not have a Release file.
Такс... начались танцы с бубном. Давай попробуем заменить selectos на bookworm. В официальной документации docker был такой пунктик, как быстрофикс.
В файле /etc/apt/sources.list.d/docker.list пишем:
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable
Кстати каталога /etc/apt/sources.list.d/ в SelectOS из коробки нет, пришлось заранее его создать.
apt update
Всё ок! Полечили! Пробуем установить docker с плагинами.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
И знаешь что? Всё получилось! Docker установился корректно, это меня очень порадовало, совместимость отличная.
Версия docker == 28.0.4, у меня в локальном окружении установлена 27.3.1.
Этот кейс завершился успехом, было волнительно!
Что у нас дальше... А дальше я всегда втыкаю nginx. Давай воткнем, но я прям уверен что всё у нас получится. Тем более пакет найден в репозиториях:
apt search nginx
Нашлось такое: nginx/stable 1.22.1-9 amd64
apt install nginx
systemctl status nginx
Взлетело. Иначе и быть не могло. Идем в браузер и проверяем дефолтную заглушку.
Давай проведем эксперимент, перезагрузим сервер и посмотрим, стартанет ли автоматически nginx. Отправляем сервер в перезагрузку.
Работает чертяка! Никакого дискомфорта, всё устанавливается и взлетает как я и привык. Быстро, чётко и по делу. Раздражающих факторов нет, как это было с Centos подобными дистрибутивами.
Пока думал что еще тебе показать, решил взгромоздить prometheus и zabbix.
apt install prometheus zabbix
Не прошло, но оно и ежу понятно, в том же debian такое себе тоже позволить нельзя. Ну ладно, давай всё сделаем ручками.
sudo useradd --no-create-home --shell /bin/false prometheus cd /tmp wget https://github.com/prometheus/prometheus/releases/download/v2.52.0/prometheus-2.52.0.linux-amd64.tar.gz tar xvf prometheus-*.linux-amd64.tar.gz cd prometheus-*.linux-amd64 sudo mv prometheus /usr/local/bin/ sudo mv promtool /usr/local/bin/ sudo mkdir -p /etc/prometheus /var/lib/prometheus sudo cp -r consoles/ console_libraries/ /etc/prometheus/ sudo cp prometheus.yml /etc/prometheus/ sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF [Unit] Description=Prometheus Monitoring Wants=network-online.target After=network-online.target [Service] User=prometheus ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus/ [Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl enable --now prometheus
Отлично, сервис prometheus запустился и работает, можем собирать метрики.
Проверяем вебморду, обычно prometheus слушается на 9090 порту
Вообще без нареканий и каких-то граблей, меня такой исход событий радует.
Prometheus это хорошо, но без Zabbix мы как без рук. Я конечно больше Grafana предпочитаю, но ради интереса попробую поставить Zabbix, вдруг где-то запнусь.
sudo apt install zabbix-server-pgsql zabbix-agent zabbix-frontend-php
ЧЁ??? Оно прям из репы установилось без ручных манипуляций с моей стороны.
Пошли проверим: http://192.168.10.82/zabbix
Хм, не хватает пакета: zabbix-apache-conf, через поиск в репозиториях тоже не нашлось. Ну да ладно. Это ничего не меняет.
Создаем файл: /etc/apache2/conf-available/zabbix.conf и пишем в него:
Alias /zabbix /usr/share/zabbix <Directory "/usr/share/zabbix"> Options FollowSymLinks AllowOverride None Require all granted </Directory> <Directory "/usr/share/zabbix/conf"> Require all denied </Directory> <Directory "/usr/share/zabbix/app"> Require all denied </Directory> <Directory "/usr/share/zabbix/include"> Require all denied </Directory> <Directory "/usr/share/zabbix/local"> Require all denied </Directory> # PHP settings <IfModule mod_php7.c> php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value always_populate_raw_post_data -1 php_value date.timezone Europe/Moscow </IfModule> <IfModule mod_php8.c> php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value date.timezone Europe/Moscow </IfModule>
sudo a2enconf zabbix sudo systemctl reload apache2
Ну и закончим вишенкой, проведем нагрузочное тестирование. Будем грузить apache. Буду использовать wrk, про эту утилиту я уже писал как-то, ты про нее знаешь.
wrk -t10 -c100 -d30s http://192.168.10.82/zabbix/setup.php
10 потоков, 100 соединений, 30 секунд длительность
Requests/sec
— сколько запросов сервер обрабатывает в секунду
Transfer/sec
— сколько мегабайт отдает сервер в секунду
В это время htop показывает такую картину:
Видим что процессор ушел в полку. Но в это же время в браузере спокойно открывается страница с установкой zabbix. Слону дробина.
Докинул еще 3 ядра ради интереса.
SelectOS не выпал в Kernel Panic и достойно отработал все мои шалости. Причем и память не выжрало и в swap не залезло. Отлично? Супер!
Заключения и выводы
Думаю на этом можно и заканчивать и так много всего потыкали. Давай сделаем какие-то выводы про SelectOS.
- Все поставленные задачи мне удалось решить, причем с минимальными усилиями. Да, в некоторых моментах надо было подумать, но серверные дистрибутивы от тебя другого и не ждут. Учись решать проблемы, читать ошибки и у тебя всё всегда будет взлетать.
- Не совсем очевидна была установка Docker, чисто интуитивно пофиксил, тем более SelectOS совместима в Debian.
- В минимальных требованиях всяко нужно поправить 512 на 1024, потому что рядовой инженер потратит много времени, чтобы это выяснить.
- В саппорт я обращался минимально, привык решать проблемы самостоятельно. Обращался больше, чтобы подтвердить свои догадки.
- Версии пакетов соответствуют стабильным веткам Debian.
- По ощущениям не возникло никакого дискомфорта при работе, грабли не разбросаны, костыли не вставлены. И это очень ценно!
- Дистрибутив не перегружен мусором и какими-то дополнительными ненужными пакетами. Например, часто встречаю что по умолчанию из коробки воткнут apache2, а его терпеть не могу. Тут же, то что тебе нужно, то и ставишь.
- По нагрузочному тестированию нареканий нет, ничего не упало и продолжило работать. В системных логах чистенько.
- Мне опыт понравился, думаю даже разверну пару серваков в проде на этом дистрибутиве, может в процессе работы увижу глазками дополнительные ништяки.