rubric/modules/linuxmodules/linux_sysconfig.go
2026-07-21 14:52:55 +03:00

191 lines
9.4 KiB
Go
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package linuxmodules
import (
"fmt"
"rubric/utils"
)
var SysconfigModule = Module{
Key: "sysconfig",
Aliases: []string{"cfg", "time", "ntp", "chrony", "настройка"},
Title: "Конфигурация системы",
Description: "Темы 5354: установка 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()
}