April 1

Пробуем SelectOS

Автор: Шубин Роман Олегович

Привет, господа и дамы. Дошли у меня руки потыкать в боевых условиях серверный дистрибутив SelectOS. В нашем чатике про этот дистрибутив было много разговоров, сегодня посмотрим всё на практике и потыкаем палкой.

Сразу уточню, что это не очередная поделка Попова и Бабушкина, а профессионально собранное решение от наших коллег — Selectel.

Дистрибутив SelectOS серверная операционная система общего назначения, которая устанавливается как на виртуальные машины, так и на железные.

Установить можно даже за пределами Selectel инфраструктуры. То есть условно я могу взять исошник и раскатить себе на домашний сервак с proxmox или на тот же virtualbox.

Тут снимаю шляпу, ребята сделали удобно и универсально.

Что примечательно, для поддержки дистрибутива существует внутренняя команда ментейнеров. Команда отслеживает патчи безопасности и актуальность версий ПО.

За основу был взять Debian и допилен. Повышена стабильность репозитория и работы сети, добавлена функциональность DPDK (Data Plane Development Kit).

DPDK — это набор библиотек и драйверов, который ускоряет обработку пакетов в сетевых приложениях.

То есть дает ускорение сети в 3–5 раз. Заманчиво!

У меня всегда была боль с debian и версиями ПО, вроде и дистрибутив свежий, а внутри доисторический nginx, rsyslog и т.п. А хочется нового!

С лирикой заканчиваем, пошли тыкать.


Для начала я раздобыл ссылку на сам дистрибутив. Написал тикет в поддержку и в ответ получил желаемое.

Доступно 2 версии, Базовая и VPS.

Базовая версия более универсальная и подходит для всего.

Облачная (VPS) заточена конкретно под Облачную платформу Selectel.

Последний релиз: SelectOS 1.1 (Версия ядра: 6.1.0)

Технические требования:⁠​

  • архитектура процессора x86
  • частота процессора не менее 2 Ггц
  • оперативная память не менее 512 Мб
  • место на жестком диске не менее 5 Гб

Технические требования у нас имеются, значит будем им соответствовать, заодно и проверим.

Создаем новый сервер: 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

Есть контакт:


Проверяем включен ли 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

Создаем systemd unit:

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 — сколько запросов сервер обрабатывает в секунду

Latency — задержка в ответе

Transfer/sec — сколько мегабайт отдает сервер в секунду

В это время htop показывает такую картину:

ДО нагрузки:

ВО время нагрузки:

Видим что процессор ушел в полку. Но в это же время в браузере спокойно открывается страница с установкой zabbix. Слону дробина.

Докинул еще 3 ядра ради интереса.

SelectOS не выпал в Kernel Panic и достойно отработал все мои шалости. Причем и память не выжрало и в swap не залезло. Отлично? Супер!


Заключения и выводы

Думаю на этом можно и заканчивать и так много всего потыкали. Давай сделаем какие-то выводы про SelectOS.

  • Все поставленные задачи мне удалось решить, причем с минимальными усилиями. Да, в некоторых моментах надо было подумать, но серверные дистрибутивы от тебя другого и не ждут. Учись решать проблемы, читать ошибки и у тебя всё всегда будет взлетать.
  • Не совсем очевидна была установка Docker, чисто интуитивно пофиксил, тем более SelectOS совместима в Debian.
  • В минимальных требованиях всяко нужно поправить 512 на 1024, потому что рядовой инженер потратит много времени, чтобы это выяснить.
  • В саппорт я обращался минимально, привык решать проблемы самостоятельно. Обращался больше, чтобы подтвердить свои догадки.
  • Версии пакетов соответствуют стабильным веткам Debian.
  • По ощущениям не возникло никакого дискомфорта при работе, грабли не разбросаны, костыли не вставлены. И это очень ценно!
  • Дистрибутив не перегружен мусором и какими-то дополнительными ненужными пакетами. Например, часто встречаю что по умолчанию из коробки воткнут apache2, а его терпеть не могу. Тут же, то что тебе нужно, то и ставишь.
  • По нагрузочному тестированию нареканий нет, ничего не упало и продолжило работать. В системных логах чистенько.
  • Мне опыт понравился, думаю даже разверну пару серваков в проде на этом дистрибутиве, может в процессе работы увижу глазками дополнительные ништяки.