altctl чинит и обновляет ALT Linux без привязки к конкретной версии. При каждом запуске он определяет по самой системе:
- ветку (Sisyphus, p10, p11, c10f2…), архитектуру и тип ядра;
- гипервизор (VirtualBox, VMware, KVM, Hyper-V или физическая машина);
- рабочее зеркало и имена служб в пакетах.
Поэтому одна и та же команда работает на Simply Linux 10/11/11.2, Альт Рабочая станция, Альт Сервер и Sisyphus, на железе и в виртуальной машине.
| Дистрибутив | Ветка репозитория |
|---|---|
| Simply Linux 10 | p10 |
| Simply Linux 11, 11.2 | p11 |
| Альт Рабочая станция 10 / 11 | p10 / p11 |
| Альт Сервер 10 / 11 | p10 / p11 |
| Sisyphus (ALT Regular и другие сборки на нём) | Sisyphus |
Номера версий в коде не прописаны. Ветка определяется по ALT_BRANCH_ID в /etc/os-release, по /etc/altlinux-release или по VERSION_ID. Архитектура берётся из rpm --eval %_arch (x86_64, aarch64, i586…). Будущая ветка (например, p12) подхватится автоматически, если её ключ подписи есть в пакете alt-gpgkeys.
sudo ./install.sh # установить и включить ежедневное обслуживание в 04:00
sudo altctl doctor # проверить системуЕсли install.sh обнаружит виртуальную машину, он сразу применит профиль vm: отключит сон и гашение экрана, настроит chrony и синхронизирует часы с хостом.
Ключи: --no-timer — без ежедневного таймера, --no-profile — не применять профиль, --uninstall — удалить.
Можно запускать и без установки, прямо из папки: sudo ./altctl doctor.
| Команда | Что делает |
|---|---|
altctl doctor |
диагностика: ветка, источники, ядро, гипервизор, время, сон, графика, службы. Ничего не меняет |
altctl fix |
самовосстановление (список ниже) |
altctl update |
полное обновление: пакеты → ядро и модули → flatpak → очистка |
altctl kernel |
только ядро и модули к нему |
altctl maintain |
fix + update; именно это запускает таймер |
altctl profile status|apply |
показать или применить профиль среды (vm / server / desktop) |
altctl time sync |
установить chrony, сразу выставить точное время, записать его в RTC |
altctl time status|check|watch on|off |
состояние часов / быстрая проверка / периодическая проверка |
altctl power status|nosleep|allow-sleep |
спящие режимы systemd и гашение консоли |
altctl display wake |
разбудить чёрный экран без потери сеанса |
altctl display restart |
после проверок перезапустить LightDM/SDDM/GDM |
altctl display status|noblank |
состояние графики / отключить гашение экрана X и XFCE |
altctl guest status |
гостевые дополнения: модули, службы, группа vboxsf, буфер обмена, общие папки |
altctl guest install |
установить дополнения гипервизора и настроить их |
altctl guest fix |
доустановить недостающее, добавить пользователей в vboxsf, перезапустить VBoxClient |
altctl repo auto |
подобрать живое зеркало под ветку системы (HTTPS в приоритете) и переписать источники |
altctl repo https |
перевести текущие источники с http:// на https://, проверить apt-get update, при сбое — откатить |
altctl repo tune |
записать сетевые настройки APT (99altctl-network.conf) |
altctl repo set p11 |
перейти на другую ветку (затем altctl update) |
altctl repo restore |
вернуть источники, какими они были до последнего изменения |
altctl install mc 'apache2-base|apache2' |
установить пакеты; a|b — альтернативные имена |
altctl services |
установить и запустить службы из SERVICES |
altctl firewall apply|status|off |
межсетевой экран из настроек FW_* |
altctl timer on|off|status |
расписание автоматического обслуживания |
Опции: -n — показать, что будет сделано, ничего не меняя (в том числе каждую команду и содержимое файлов); -y — без вопросов.
Профиль выбирается автоматически (PROFILE=auto). Его можно закрепить в /etc/altctl.conf.
| Профиль | Когда | Что настраивается |
|---|---|---|
vm |
найден гипервизор | сон и гашение консоли и экрана выключены; гостевые дополнения (буфер обмена, общие папки, подстройка экрана); chrony шагает часы в любой момент; часы гостя синхронизируются с хостом; часы проверяются каждые 2 мин |
server |
физическая машина без display manager | сон и гашение консоли выключены |
desktop |
физическая машина с графикой | энергосбережение не трогается; chrony только поддерживается в рабочем состоянии |
fix и maintain доприменяют профиль, если что-то «слетело» после обновления или ручных правок.
Причина. Гость пытается уйти в сон или погасить монитор (DPMS). Виртуальная видеокарта после этого часто не просыпается, а LightDM, Xorg или xfdesktop зависают или падают. Что делает профиль vm:
- Маскирует
sleep,suspend,hibernate,hybrid-sleepиsuspend-then-hibernate(.target). После этого systemd физически не сможет усыпить систему, кто бы этого ни попросил. - Отключает гашение консоли:
BLANK_TIME=0иPOWERDOWN_TIME=0в/etc/sysconfig/console; в работающей системе это применяется сразу черезsetterm. - Отключает гашение на уровне X-сервера: пишет
/etc/X11/xorg.conf.d/90-altctl-noblank.confсBlankTime,StandbyTime,SuspendTime,OffTime= 0. Это действует и на экран входа LightDM. - Отключает гашение в открытых сеансах XFCE. От имени владельца сеанса выставляет через
xfconf-queryblank-on-ac,dpms-on-ac-sleep,dpms-on-ac-off= 0 (и то же для батареи), выключает хранитель экрана XFCE и сразу выполняетxset -dpms.
Если экран уже чёрный. Сначала sudo altctl display wake: включает DPMS и переключает виртуальные консоли, сеанс не теряется. Если не помогло — sudo altctl display restart. Перед перезапуском altctl проверит:
- конфигурацию LightDM (
lightdm --show-config); - свободное место в
/tmpи/var; - права
/tmp/.X11-unix; - что сейчас не идёт установка пакетов.
Перезапуск ставится в очередь systemd (--no-block), поэтому он сработает, даже если команда запущена из того самого графического терминала.
Причина. Когда хост встаёт на паузу или засыпает, часы гостя отстают. Chrony в настройках по умолчанию резко поправляет время только при старте (makestep 1.0 3), а дальше подводит его медленно, часами. Пока время неверное, ломаются TLS, подписи репозиториев и таймеры.
В ALT службой времени является chrony (chronyd.service); systemd-timesyncd в базовой поставке нет. Что делает altctl time sync:
- Ставит chrony, если его нет. Если часы сбиты сильнее чем на 5 минут, сначала грубо выставляет время, иначе apt может отвергнуть подписи.
- Отключает конкурирующие службы (
systemd-timesyncd,ntpd): два демона, подводящие одни часы, дают скачки времени. - В профиле
vmдобавляет блок в/etc/chrony.confмежду метками# >>> altctlи# <<< altctl:makestep 1 -1— шагать часы при расхождении больше 1 с в любой момент;rtcsync— держать RTC синхронными;- для KVM и Hyper-V —
refclock PHC: часы гостя идут прямо от часов хоста через PTP-устройство гипервизора. Для KVM модульptp_kvmзагружается и закрепляется в автозагрузке.
- Сразу синхронизирует время:
chronyc burst→chronyc makestep→hwclock --systohc. - Если NTP недоступен (закрыт UDP 123), выставляет время по заголовку
Dateответа зеркала с точностью около 1 с. - Включает
altctl-clock.timer: каждые 2 минутыaltctl time checkсверяет смещение и при необходимости поправляет часы. В журнал попадают только коррекции, а не каждый запуск.
Если после правки конфигурации chronyd не запустится, altctl вернёт прежний chrony.conf из резервной копии.
Гостевые инструменты гипервизора (VBoxService, open-vm-tools, qemu-guest-agent), которые тоже подводят часы от хоста, ставит altctl guest install — он входит в profile apply.
altctl guest install (входит в профиль vm) и altctl guest fix настраивают три вещи, которые в ALT чаще всего не работают «из коробки».
altctl сам определяет источник модулей vboxguest/vboxsf и действует по-разному:
| Источник | Как определяется | Что нужно при новом ядре |
|---|---|---|
| встроены в ядро | vboxguest.ko есть в /lib/modules/<ядро> из kernel-image |
ничего — они уже в новом ядре |
| пакет ALT | установлен kernel-modules-virtualbox-addition-<тип> |
update-kernel сам ставит его версию для нового ядра |
ISO (VBoxLinuxAdditions.run) |
есть rcvboxadd, службы vboxadd* |
заголовки kernel-headers-modules-<тип>, gcc, make → rcvboxadd quicksetup <ядро> |
| DKMS | dkms status знает модуль vbox |
те же заголовки → dkms autoinstall -k <ядро> |
Заголовки в ALT называются по типу ядра: kernel-headers-modules-6.12, kernel-headers-modules-std-def. Пакета с полной версией в имени (kernel-headers-modules-$(uname -r)) нет; тип altctl берёт из версии ядра, например 6.12.20-6.12-alt1 → 6.12.
Обновление ядра. altctl update до update-kernel ставит заголовки и компилятор, если модули собираются из исходников. После update-kernel проверяет, что в ядре, которое загрузится следующим, есть vboxguest. Если модуля нет, altctl собирает его или ставит пакет. Если это не удалось:
- выводится ошибка;
AUTO_REBOOTне перезагрузит систему;doctorпоказывает проблему до перезагрузки, а не после.
Видеодрайвер и сеть от гостевых дополнений не зависят:
- при видеоконтроллере VMSVGA (по умолчанию для Linux-гостей) экран обслуживает
vmwgfxиз ядра,vboxvideoне нужен; - сетевые карты VirtualBox (e1000, virtio-net) тоже работают на драйверах ядра.
При «отвалившихся» дополнениях пропадают буфер обмена, общие папки и автоподстройка экрана.
Папки хоста монтируются с группой vboxsf. Пользователь вне этой группы получает Permission denied. altctl создаёт группу, если её нет, и добавляет в неё всех обычных пользователей.
Список пользователей определяется так:
- кто считается обычным пользователем — диапазон UID берётся из
/etc/login.defs(UID_MIN/UID_MAX), а не жёстко «от 1000». В ALT обычные пользователи начинаются с UID 500, и фильтр «UID ≥ 1000» пропустил бы их всех; - кто ещё добавляется — пользователи, вошедшие в систему (
loginctl), например доменные; - кто исключается — служебные учётные записи с оболочкой
nologin/false; - как задать вручную —
GUEST_USERS="user student".
Права появляются после повторного входа в сеанс.
- Режимы. Набор берётся из
VBoxClient --helpустановленной версии:--clipboard,--draganddrop,--seamless, а для экрана —--vmsvga(контроллер VMSVGA, загруженvmwgfx) или--display(старые контроллеры). - Автозапуск. Если в
/etc/xdg/autostartнет записи с VBoxClient, создаётсяaltctl-vboxclient.desktop. Запись пакета или ISO не трогается. - Открытые сеансы. Недостающие режимы запускаются от имени владельца сеанса.
guest fixперезапускает VBoxClient принудительно: при «зависшем» буфере процесс жив, но не работает.
fix и maintain проверяют всё это сами: утилиты, vboxguest, службы, группу, автозапуск, буфер в каждом сеансе. Если что-то не так — доустанавливают недостающее, а если всё в порядке, выводят одну строку.
- Блокировки APT. Ждёт Synaptic или Центр приложений и снимает «мёртвые» lock-файлы. Чужие процессы не убивает.
- Базу RPM. Если
rpmне читает базу, удаляет__db.*и выполняетrpm --rebuilddb. - Время. chrony не установлен, не запущен, часы не синхронизированы или смещение больше
TIME_MAX_OFFSET→time sync. - Источники пакетов. Если ветки смешаны (например, Sisyphus поверх p10), источники не совпадают с веткой системы или их нет, — переписывает их.
- Зеркало. Если зеркало не отвечает,
updateочищает списки пакетов и переключается на следующее изMIRRORS(по HTTPS, при сбое TLS — по HTTP). - Сеть APT. Восстанавливает
99altctl-network.conf; переводит источники с HTTP на HTTPS, если зеркала это поддерживают (с проверкой и откатом). - Зависимости. Нарушенные зависимости исправляет через
apt-get -f install. - Место. При нехватке места на
/очищает кэш, при нехватке в/bootудаляет старые ядра. - Модули ядра. Восстанавливает
modules.depи сообщает, если модули не загрузились. - Службы. Поднимает упавшие службы из
WATCH_UNITSиSERVICES. - Профиль. Заново маскирует сон и отключает гашение консоли и экрана, если это «слетело».
- Гостевые дополнения VirtualBox. Утилиты, модуль
vboxguest, службы, группаvboxsf, автозапуск и работа VBoxClient. - Межсетевой экран. Если
FW_ENABLE=yes, а правила пропали, загружает их заново.
Симптом. apt-get update качает pkglist (30+ МБ на ветку) со скоростью около 50 КБ/с или зависает намертво, особенно в ВМ за NAT или сетевым мостом.
Причины.
- DPI-шейпинг режет открытый HTTP-трафик;
- конвейер HTTP-запросов APT (pipelining) ломается на прокси, middlebox-ах и виртуальных мостах.
/etc/apt/apt.conf.d/99altctl-network.conf создаётся при установке (install.sh). fix, maintain и update проверяют его и восстанавливают, если файла нет или его изменили:
Acquire::http::Pipeline-Depth "0"; // без конвейера запросов
Acquire::https::Pipeline-Depth "0";
Acquire::http::Timeout "30"; // «повисшее» соединение рвётся и повторяется
Acquire::https::Timeout "30";
Acquire::Retries "3"; // повтор неудачной загрузки
Значения задаются в /etc/altctl.conf (APT_PIPELINE_DEPTH, APT_TIMEOUT, APT_RETRIES); altctl repo tune переписывает файл. После записи altctl проверяет, что apt-config читает конфигурацию. Если нет — файл удаляется, чтобы apt-get не сломался.
APT в ALT — собственная ветка apt-rpm. Неизвестные ей параметры она молча игнорирует. Поддержку
Acquire::Retriesв конкретной версии я не проверял. Независимо от неё altctl сам повторяетapt-get update: очищает списки, затем переключается на другое зеркало.
Зашифрованный трафик DPI не может избирательно резать по содержимому, поэтому HTTPS — основной протокол (REPO_HTTPS=auto).
altctl repo auto. Для каждого зеркала изMIRRORSсначала пробуетhttps://, причём схема в списке — только подсказка: старые конфиги сhttp://тоже получают HTTPS. Из ответивших по HTTPS выбирается самое быстрое. Наhttp://altctl переходит, только если TLS не работает ни на одном зеркале, и пишет причину для каждого: ошибка рукопожатия, недействительный сертификат, тайм-аут, нет ветки.altctl repo https. Проверяет каждыйhttp://-источник по HTTPS и переводит те, что отвечают. Затем выполняетapt-get update; если он не прошёл, источники возвращаются как были. Остальные зеркала остаются на HTTP, и altctl называет их.fixиmaintainделают то же автоматически. Если HTTPS не работает, источники остаются на HTTP с предупреждением, а не с ошибкой.
Метод https для APT в ALT — отдельный пакет apt-https (+ ca-certificates). Без него строка https:// ломает apt-get update (метод /usr/lib64/apt/methods/https не найден). altctl ставит его по HTTP до перевода источников. doctor предупреждает, если источники уже на HTTPS, а метода нет.
Почему время важно. Для HTTPS нужны правильные часы: со сбитыми часами сертификат выглядит недействительным. Поэтому fix сначала синхронизирует время, а запасная установка времени по заголовку Date всегда идёт по http://.
doctor в разделе «Источники пакетов» показывает протокол ([WARN] Репозитории используют незашифрованный HTTP) и наличие 99altctl-network.conf.
Симптом. Условия стенда:
- хост — Windows 11, подключённый к сети по Wi-Fi;
- VirtualBox 7.x;
- сетевой адаптер ВМ в режиме «Сетевой мост» (Bridged Adapter).
Входящий трафик гостя зажимается на уровне 30–50 КБ/с. Не помогают ни HTTPS, ни отключённый конвейер APT (Pipeline-Depth 0), ни смена зеркала: узкое место не в APT и не в зеркале, а в сетевом режиме ВМ.
Причина. Стандарт 802.11 разрешает Wi-Fi-клиенту отправлять кадры только от своего MAC-адреса. Поэтому «мост» через беспроводной адаптер VirtualBox делает не настоящим мостом, а подменой MAC-адресов в своём NDIS-фильтре на хосте. На этом пути, в связке с драйвером Wi-Fi, входящий трафик гостя деградирует.
Как убедиться. Скорость скачивания большого файла из гостя:
curl -o /dev/null --max-time 20 -w 'скорость: %{speed_download} байт/с\n' \
https://mirror.yandex.ru/altlinux/p11/branch/x86_64/base/pkglist.classic.xzЕсли на хосте скорость нормальная, а в госте десятки КБ/с при любом зеркале и протоколе — дело в сетевом мосте.
Решение. Переключите сетевой адаптер ВМ с «Сетевого моста» на «NAT»: Настройки ВМ → Сеть → Адаптер 1 → Тип подключения: NAT.
- В режиме NAT трафик гостя идёт через сетевой стек хоста как обычное соединение программы, без подмены MAC-адресов.
- Ограничение полностью исчезает, и скорость раскрывается до максимума интернет-канала.
- Гость получает адрес от встроенного DHCP VirtualBox (обычно
10.0.2.15); APT и altctl работают без изменений.
Доступ по SSH через NAT. В режиме NAT гость не виден из сети хоста напрямую, поэтому для SSH нужен проброс порта (Port Forwarding): Настройки ВМ → Сеть → Адаптер 1 (NAT) → Дополнительно → Проброс портов → «+»:
| Имя | Протокол | Адрес хоста | Порт хоста | Адрес гостя | Порт гостя |
|---|---|---|---|---|---|
| SSH | TCP | (пусто) | 2222 | (пусто) | 22 |
То же из командной строки хоста:
VBoxManage modifyvm "Имя ВМ" --natpf1 "SSH,tcp,,2222,,22" # ВМ выключена
VBoxManage controlvm "Имя ВМ" natpf1 "SSH,tcp,,2222,,22" # ВМ работаетПодключение с хоста:
ssh -p 2222 user@127.0.0.1
scp -P 2222 файл user@127.0.0.1:~/ # копирование файлов — тот же портЧто ещё учесть:
- В госте должен работать sshd:
sudo altctl services(по умолчаниюSERVICES="openssh-server:sshd"). - Пустой «Адрес хоста» означает все сетевые интерфейсы хоста. К порту 2222 смогут подключиться и другие устройства в той же сети Wi-Fi, если их не остановит брандмауэр Windows. Чтобы SSH был доступен только с самого хоста, укажите адрес хоста
127.0.0.1. - Межсетевой экран altctl этому не мешает: внутри гостя соединение по-прежнему приходит на порт 22 (
FW_TCP_PORTS="22").
В ALT apt-get dist-upgrade не ставит новое ядро: версия входит в имя пакета ядра (kernel-image-6.12-…). Новое ядро и согласованные с ним модули (kernel-modules-*-<тип>) ставит update-kernel — altctl update вызывает его сам. Старые ядра удаляются только после того, как система загрузилась в новое, чтобы рабочее ядро никогда не пропало. Если нужна перезагрузка, altctl сообщит об этом. Перезагружаться автоматически он будет только при AUTO_REBOOT=yes.
Все параметры собраны в одном файле с комментариями. Чаще всего меняют:
PROFILE=auto # или vm / server / desktop
BRANCH=auto # или p11 / Sisyphus — закрепить ветку
REPO_HTTPS=auto # yes — только HTTPS, no — только HTTP
APT_TIMEOUT=30; APT_RETRIES=3 # затем: sudo altctl repo tune
NTP_SERVERS="ntp1.vniiftri.ru" # свои NTP-серверы в дополнение к chrony.conf
SERVICES="openssh-server:sshd apache2-base|apache2:httpd2 samba:smb,nmb"
FW_ENABLE=yes; FW_TCP_PORTS="22 80" # затем: sudo altctl firewall apply
TIMER_SCHEDULE="Sun 03:00" # затем: sudo altctl timer on
AUTO_REBOOT=noЛюбой параметр можно задать разово: sudo PROFILE=vm altctl profile apply.
| Путь | Назначение |
|---|---|
/opt/altctl/, /usr/local/sbin/altctl |
программа |
/etc/apt/sources.list.d/altctl.list |
источники, которые пишет altctl (остальные закомментированы с пометкой #altctl#) |
/etc/apt/apt.conf.d/99altctl-network.conf |
сетевые настройки APT: без конвейера, тайм-аут, повторы |
/etc/chrony.conf |
блок между # >>> altctl и # <<< altctl (только он меняется) |
/etc/X11/xorg.conf.d/90-altctl-noblank.conf |
отключение гашения экрана X (профиль vm) |
/etc/sysconfig/console |
BLANK_TIME=0, POWERDOWN_TIME=0 |
/etc/modules-load.d/altctl-ptp.conf |
автозагрузка ptp_kvm (KVM) |
/etc/xdg/autostart/altctl-vboxclient.desktop |
автозапуск VBoxClient (если пакет не поставил свой) |
/var/backups/altctl/ |
резервные копии источников, chrony.conf, console и правил экрана |
/etc/sysconfig/iptables, ip6tables |
сохранённые правила; поднимает altctl-firewall.service |
journalctl -u altctl-maintain |
журнал ежедневного обслуживания |
journalctl -u altctl-clock |
журнал коррекций часов (профиль vm) |
| Что | Команда |
|---|---|
| сон | sudo altctl power allow-sleep и PROFILE=desktop в настройках (иначе fix снова его отключит) |
| гашение экрана X | sudo rm /etc/X11/xorg.conf.d/90-altctl-noblank.conf |
| HTTPS в источниках | REPO_HTTPS=no в настройках, затем sudo altctl repo auto (или altctl repo restore) |
| сетевые настройки APT | APT_NET_TUNING=no в настройках и sudo rm /etc/apt/apt.conf.d/99altctl-network.conf |
| настройки chrony | удалить блок # >>> altctl … # <<< altctl из /etc/chrony.conf |
| проверка часов | sudo altctl time watch off |
| автозапуск VBoxClient | sudo rm /etc/xdg/autostart/altctl-vboxclient.desktop |
altctl точка входа и разбор команд
install.sh установка в систему (+ профиль vm в виртуальной машине)
etc/altctl.conf настройки по умолчанию
lib/common.sh вывод, dry-run, итоговая сводка, конфигурация
lib/detect.sh ветка, архитектура, ядро, гипервизор, текущие источники
lib/profile.sh профили vm / server / desktop
lib/time.sh chrony, шаг часов, RTC, гостевые инструменты, проверка часов
lib/power.sh спящие режимы и гашение консоли
lib/display.sh гашение экрана X/XFCE, пробуждение и перезапуск display manager
lib/guest.sh гостевые дополнения: модули, vboxsf, VBoxClient, проверка нового ядра
lib/repo.sh выбор зеркала (HTTPS в приоритете), перевод на HTTPS, сетевые настройки APT, откат
lib/heal.sh самовосстановление
lib/update.sh обновление пакетов, ядра, модулей
lib/services.sh установка пакетов и служб
lib/firewall.sh межсетевой экран IPv4/IPv6
lib/timer.sh таймер ежедневного обслуживания
lib/doctor.sh диагностика
Если файлы правились в Windows и bash ругается на $'\r', выполните sed -i 's/\r$//' altctl install.sh lib/*.sh. install.sh делает это сам.