package linuxmodules import ( "fmt" "rubric/utils" ) var SysconfigModule = Module{ Key: "sysconfig", Aliases: []string{"cfg", "time", "ntp", "chrony", "настройка"}, Title: "Конфигурация системы", Description: "Темы 53–54: установка RHEL, настройка времени, NTP, chronyd", Run: showSysconfig, } func showSysconfig() { utils.Header("Linux — Конфигурация системы") // ─── 53. Установка RHEL ─────────────────────────────────────── utils.Section("53. Установка RHEL и первоначальная настройка") utils.Println("RHEL (Red Hat Enterprise Linux) — коммерческий дистрибутив.") utils.Println("Бесплатные альтернативы: AlmaLinux, Rocky Linux (1:1 совместимы с RHEL).") fmt.Println() utils.Println(utils.ColorBold + "Получение RHEL:" + utils.ColorReset) utils.Code(`# Бесплатная подписка для разработчиков (до 16 машин): # https://developers.redhat.com/articles/faqs-no-cost-red-hat-enterprise-linux # Скачать ISO: # https://access.redhat.com/downloads # Альтернативы без подписки: # AlmaLinux: https://almalinux.org # Rocky Linux: https://rockylinux.org # CentOS Stream: https://www.centos.org/centos-stream/`) utils.Println(utils.ColorBold + "Первоначальная настройка после установки:" + utils.ColorReset) utils.Code(`# Обновить систему: dnf update -y # Настроить hostname: hostnamectl set-hostname server01.example.com hostnamectl status # Настроить часовой пояс: timedatectl set-timezone Europe/Moscow # Включить автоматическую синхронизацию времени: timedatectl set-ntp true # Добавить репозиторий EPEL (Extra Packages): dnf install epel-release -y # или для RHEL: subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms # Включить CRB (CodeReady Builder) — нужен для некоторых пакетов EPEL: dnf config-manager --set-enabled crb # RHEL 9 dnf config-manager --set-enabled powertools # RHEL 8`) utils.Println(utils.ColorBold + "subscription-manager — управление подпиской RHEL:" + utils.ColorReset) utils.Code(`# Зарегистрировать систему: subscription-manager register --username=myuser --password=mypass # Присоединить подписку: subscription-manager attach --auto # Список доступных репозиториев: subscription-manager repos --list # Включить репозиторий: subscription-manager repos --enable rhel-9-for-x86_64-baseos-rpms subscription-manager repos --enable rhel-9-for-x86_64-appstream-rpms # Отключить регистрацию: subscription-manager unregister`) utils.Println(utils.ColorBold + "hostnamectl — управление именем хоста:" + utils.ColorReset) utils.Command("hostnamectl", "показать всю информацию о хосте") utils.Command("hostnamectl set-hostname myserver", "установить hostname") utils.Command("hostnamectl set-hostname 'My Server' --pretty", "красивое имя") utils.Command("hostname", "показать текущий hostname") utils.Command("cat /etc/hostname", "hostname из файла") fmt.Println() utils.Println(utils.ColorBold + "localectl — настройка локали и раскладки:" + utils.ColorReset) utils.Command("localectl", "показать текущую локаль") utils.Command("localectl list-locales | grep ru", "русские локали") utils.Command("localectl set-locale LANG=ru_RU.UTF-8", "установить русскую локаль") utils.Command("localectl set-keymap ru", "русская раскладка для консоли") utils.Command("localectl list-keymaps | grep ru", "доступные раскладки") // ─── 54. Настройка времени ──────────────────────────────────── utils.Section("54. Настройка времени. NTP и chronyd") utils.Println(utils.ColorBold + "Типы часов в Linux:" + utils.ColorReset) utils.Code(`RTC (Hardware Clock) — аппаратные часы (BIOS/UEFI), работают без питания System Clock — системные часы ядра, синхронизируются от RTC при загрузке UTC vs LOCAL: RTC рекомендуется хранить в UTC, чтобы избежать проблем с летним временем. Отображение в локальном времени — задача ОС.`) utils.Println(utils.ColorBold + "timedatectl — управление временем:" + utils.ColorReset) utils.Command("timedatectl", "показать время, часовой пояс, NTP") utils.Command("timedatectl status", "то же самое") utils.Command("timedatectl list-timezones", "список часовых поясов") utils.Command("timedatectl list-timezones | grep Moscow", "найти московский пояс") utils.Command("timedatectl set-timezone Europe/Moscow", "установить часовой пояс") utils.Command("timedatectl set-time '2024-01-15 14:30:00'", "установить время вручную") utils.Command("timedatectl set-ntp true", "включить синхронизацию по NTP") utils.Command("timedatectl set-ntp false", "отключить NTP") utils.Command("timedatectl set-local-rtc 0", "хранить RTC в UTC") fmt.Println() utils.Println(utils.ColorBold + "hwclock — работа с аппаратными часами:" + utils.ColorReset) utils.Command("hwclock", "показать время RTC") utils.Command("hwclock --systohc", "записать системное время в RTC") utils.Command("hwclock --hctosys", "установить системное время из RTC") utils.Command("hwclock --utc", "RTC в UTC") fmt.Println() utils.Println(utils.ColorBold + "NTP — Network Time Protocol:" + utils.ColorReset) utils.Code(`NTP — протокол синхронизации времени по сети. Иерархия серверов (stratum): Stratum 0 — атомные часы, GPS Stratum 1 — серверы напрямую подключённые к stratum 0 Stratum 2 — синхронизируются от stratum 1 ... Stratum 16 — несинхронизированы Популярные публичные NTP-серверы: pool.ntp.org — пул серверов (рекомендуется) time.google.com — Google time.cloudflare.com — Cloudflare ntp1.vniiftri.ru — Россия (ВНИИФТРИ) ntp2.vniiftri.ru — Россия`) utils.Println(utils.ColorBold + "chronyd — рекомендуемый NTP-клиент в RHEL:" + utils.ColorReset) utils.Code(`# Установка (обычно предустановлен): dnf install chrony # RHEL/Fedora apt install chrony # Debian/Ubuntu # Управление: systemctl enable --now chronyd systemctl status chronyd`) utils.Command("chronyc tracking", "статус синхронизации") utils.Command("chronyc sources", "список NTP-источников") utils.Command("chronyc sources -v", "подробно") utils.Command("chronyc sourcestats", "статистика источников") utils.Command("chronyc makestep", "принудительно синхронизировать (мгновенный шаг)") utils.Command("chronyc ntpdata", "NTP-данные каждого источника") fmt.Println() utils.Println(utils.ColorBold + "Конфигурация chronyd (/etc/chrony.conf):" + utils.ColorReset) utils.Code(`# Серверы синхронизации: server pool.ntp.org iburst server ntp1.vniiftri.ru iburst server ntp2.vniiftri.ru iburst pool 2.rhel.pool.ntp.org iburst # iburst — отправлять несколько пакетов при первом контакте (быстрее) # Разрешить синхронизацию для подсети (NTP-сервер): allow 192.168.1.0/24 # Синхронизировать RTC с системными часами: rtcsync # Сохранять данные о дрейфе: driftfile /var/lib/chrony/drift # Принять шаг > 1 сек только при старте: makestep 1.0 3 # Применить изменения: systemctl restart chronyd`) utils.Println(utils.ColorBold + "Настройка chronyd как NTP-сервера для локальной сети:" + utils.ColorReset) utils.Code(`# /etc/chrony.conf на сервере: server pool.ntp.org iburst allow 192.168.1.0/24 # разрешить клиентам из этой подсети # На клиентах /etc/chrony.conf: server 192.168.1.10 iburst # указать IP локального NTP-сервера # Открыть порт на файрволе сервера: firewall-cmd --permanent --add-service=ntp firewall-cmd --reload # Проверить что клиент синхронизирован: chronyc sources`) utils.Footer() }