191 lines
9.4 KiB
Go
Executable file
191 lines
9.4 KiB
Go
Executable file
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()
|
||
}
|