Введение
Во время установки операционной системы обычно программа установки задает ряд вопросов, связанных с настройкой базовых параметров системы таких, как: имя машины, настройка часового пояса, локализации и прочие. Но довольно часто бывает так, что или пропускают эти настройки, или установка автоматизирования, или мы имеем виртуальную машину полученную в результате клонирования. Соответственно нужно задать несколько параметров системы, чтобы персонализировать настройки ОС. Далее мы расскажем как выполнять такую настройку и где в этом могут быть «подводные камни». В примерах рассмотрим ситуацию клонирования виртуальной машины без предварительной подготовки. В качестве источника будет использоваться ОС Debian 12.Имя машины и Machine ID
Для получения и изменения имени машины мы можем использовать команду hostnamectl:Получение имени машины перед клонированием:
sa@debian12-template:~$ hostnamectl
Static hostname: debian12-template
Icon name: computer-vm
Chassis: vm ????
Machine ID: 50090a30564a4052bbe9006c4b2345f2
Boot ID: 4d6d515e09da4ad3b2aeb5bcea74a51e
Virtualization: kvm
Operating System: Debian GNU/Linux 12 (bookworm)
...
После клонирования получим:
sa@debian12-template:~$ hostnamectl
Static hostname: debian12-template
Icon name: computer-vm
Chassis: vm ????
Machine ID: 50090a30564a4052bbe9006c4b2345f2
Boot ID: 17c0fe9f85d84fc2ac614c5ee5b81c84
Virtualization: kvm
Operating System: Debian GNU/Linux 12 (bookworm)
...
Как видим отличается только Boot ID. И это потенциальная проблема. Изменим имя машины и проверим, что получилось:
sa@debian12-template:~$ sudo hostnamectl hostname debian12-clone
sa@debian12-template:~$ sudo hostnamectl
sudo: unable to resolve host debian12-clone: Неизвестное имя или служба
Static hostname: debian12-clone
Icon name: computer-vm
Chassis: vm ????
Machine ID: 50090a30564a4052bbe9006c4b2345f2
...
Имя машины мы изменили, но сразу же получили две проблемы: во-первых команда sudo hostnamectl выполняется с большой задержкой, а во-вторых выдает ошибку: Неизвестное имя или служба. Фактически это одна проблема, новое имя не может быть преобразовано в IP адрес, задержка возникает, из-за невозможности преобразовать имя в DNS сервере. Некоторые утилиты и службы очень к этому критичны, поэтому определим соответствие IP адреса и имени в файле /etc/hosts.
Как только мы опишем новое имя в /etc/hosts, ошибка sudo исчезает.
sa@debian12-template:~$ sudo grep 127.0.1.1 /etc/hosts
127.0.1.1 debian12-clone
Внимательный читатель заметит, что в приглашении командной строки по-прежнему старое имя. Проблема решается просто — перезапуском оболочки.
Надо заметить, что в системах основанных на дистрибутиве Red Hat, при выполнении команды sudo проблем с разрешением имен не будет. Но могут неожиданно возникнуть проблемы с работой некоторых служб, которые чувствительны к именам, например: libvirtd или почтовые сервисы.
Теперь обратим внимание на параметр Machine ID. Мы видим, что он одинаковый на источнике и клоне. К чему это может привести. Например создадим мост на двух машинах:
sa@debian12-template:~$ sudo ip link add br0 type bridge
sa@debian12-template:~$ ip -br link show br0
br0 DOWN 7e:b9:dc:59:0e:f9
и
sa@debian12-clone:~$ sudo brctl addbr br0
sa@debian12-clone:~$ ip -br link show br0
br0 DOWN 7e:b9:dc:59:0e:f9
В примере выше специально использовались разные инструменты по созданию сетевого моста, но все равно МАС адрес созданного моста получился одинаковый. Как это починить?
Обнулим Machine ID:
sa@debian12-clone:~$ echo -n '' | sudo tee /etc/machine-id
sa@debian12-clone:~$ echo -n '' | sudo tee /var/lib/dbus/machine-id
sa@debian12-clone:~$ hostnamectl | grep Machine
Создадим новый ID и проверим результат:
sa@debian12-clone:~$ sudo systemd-machine-id-setup
Initializing machine ID from VM UUID.
sa@debian12-clone:~$ hostnamectl | grep Machine
Machine ID: 0fa932191f6a42b8bf42cc743bec2eff
sa@debian12-clone:~$ sudo ip link del br0
sa@debian12-clone:~$ sudo brctl addbr br0
sa@debian12-clone:~$ ip -br link show br0
br0 DOWN aa:58:ab:bb:b4:a9
Теперь после пересоздания моста его МАС адрес получился уникальным.
Настройка языка
Для настройки параметров локализации имеется утилита localectl. Воспользуемся ей и проверим текущие настройки:sa@debian12-clone:~$ localectl
System Locale: LANG=C
VC Keymap: (unset)
X11 Layout: us,ru
X11 Model: pc105
X11 Variant: ,
X11 Options: grp:alt_shift_toggle,grp_led:scroll
sa@debian12-clone:~$ localectl list-locales
C.UTF-8
sa@debian12-clone:~$ date -d 14:00
Tue Jul 22 14:00:00 GMT 2025
Сейчас язык локали установлен как С (ANSI/ISO C Specification Language — ACSL) — стандартная локаль. Настройки локали влияют на язык интерфейса, форматы даты, времени, чисел и т.д. Изменим локаль на американскую (это чтобы получить непривычный формат времени).
sa@debian12-clone:~$ sudo localectl set-locale en_US.UTF-8
sa@debian12-clone:~$ localectl list-locales
C.UTF-8
en_US.UTF-8
После выхода из сеанса и повторного входа получим неудобные и непривычные форматы, например:
sa@debian12-clone:~$ date -d 14:00
Tue Jul 22 02:00:00 PM GMT 2025
Установим теперь русскую локализацию.
sa@debian12-clone:~$ sudo localectl set-locale ru_RU.UTF-8
sa@debian12-clone:~$ localectl list-locales
C.UTF-8
en_US.UTF-8
ru_RU.UTF-8
И снова посмотрим на формат вывода времени, после повторного входа.
sa@debian12-clone:~$ date -d 14:00
Вт 22 июл 2025 14:00:00 GMT
Так значительно лучше.
Команда localectl set-locale создает описание локали в файле /etc/locale.gen:
sa@debian12-clone:~$ egrep -v '^#|^$' /etc/locale.gen
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
В описании локали первые два символа это код языка (ISO 639), затем код страны (ISO 3166-1) и затем набор символов. Попробуем получить в разных форматах время.
sa@debian12-clone:~$ LANG=ru_RU.UTF-8 date -d 14:00
Вт 22 июл 2025 14:00:00 GMT
sa@debian12-clone:~$ LANG=en_US.UTF-8 date -d 14:00
Tue Jul 22 02:00:00 PM GMT 2025
sa@debian12-clone:~$ LANG=zh_CN.UTF-8 date -d 14:00
Tue Jul 22 14:00:00 GMT 2025
На русском и американском английском время отображается правильно, но на китайском не получается получить время. Все из-за того, что саму китайскую локаль не создавали. Тут мы видим еще один подводный камень. В некоторых Линукс системах все возможные локали не определены заранее и их надо явно генерировать.
Чтобы создать локаль, нужно отредактировать файл /etc/locale.gen, убрав комментарий с нужной локали. И выполнить команду locale-gen:
sa@debian12-clone:~$ egrep -v '^#|^$' /etc/locale.gen
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
sa@debian12-clone:~$ sudo locale-gen
Generating locales (this might take a while)...
en_US.UTF-8... done
ru_RU.UTF-8... done
zh_CN.UTF-8... done
Generation complete.
sa@debian12-clone:~$ LANG=zh_CN.UTF-8 date -d 14:00
2025年 07月 22日 星期二 14:00:00 GMT
Теперь мы можем использовать и китайский язык в командах.
Заметим, что в Red Hat подобных системах все возможные локали предустановлены и там их явно генерировать не надо.
И почему мы так подробно описываем работу с локалью? В некоторых случаях надо явно создавать локали для правильной работы сервисов, например при установке сервера мониторинга Zabbix вы не сможете добавить русский язык, если предварительно его не определите в настройках самой ОС.
Настройка времени
Среди множества утилит из семейства systemd имеется и утилита для настройки времени — timedatectl.Что она может? Вот некоторые ее возможности.
• Устанавливать системное время с использованием команды set-time;
• Изменять часовой пояс — set-timezone;
• Настраивать синхронизацию времени с источником NTP — set-ntp.
Посмотрим текущие настройки:
sa@debian12-clone:~$ timedatectl
Local time: Вт 2025-07-22 10:51:49 GMT
Universal time: Вт 2025-07-22 10:51:49 UTC
RTC time: Вт 2025-07-22 10:51:49
Time zone: Etc/GMT (GMT, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Использовать часовой пояс Гринвича на практике не удобно, поэтому определим нужный нам часовой пояс.
sa@debian12-clone:~$ sudo timedatectl set-timezone Asia/Yekaterinburg
sa@debian12-clone:~$ timedatectl
Local time: Вт 2025-07-22 15:54:06 +05
Universal time: Вт 2025-07-22 10:54:06 UTC
RTC time: Вт 2025-07-22 10:54:06
Time zone: Asia/Yekaterinburg (+05, +0500)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Устанавливать время вручную тоже не самая лучшая идея. Поэтому настроим синхронизацию с Интернетом:
sa@debian12-clone:~$ sudo timedatectl set-ntp true
sa@debian12-clone:~$ timedatectl timesync-status
Server: 188.68.222.140 (2.debian.pool.ntp.org)
...
Поменяем еще NTP сервер в файле /etc/systemd/timesyncd.conf:
sa@debian12-clone:~$ grep ^NTP /etc/systemd/timesyncd.conf
NTP=3.ru.pool.ntp.org 1.ru.pool.ntp.org
sa@debian12-clone:~$ sudo systemctl restart systemd-timesyncd.service
sa@debian12-clone:~$ timedatectl timesync-status
Server: 89.109.251.28 (3.ru.pool.ntp.org)
Poll interval: 1min 4s (min: 32s; max 34min 8s)
...
В настройке синхронизации времени то же может быть особенность. Имеются специализированные службы для синхронизации: ntpd или chrony. Если у вас установлена одна из этих служб, то синхронизацию времени надо настраивать в ней. Нельзя синхронизировать время разными способами одновременно, часы-то одни.
Заключение
В Linux системах, в основе которых лежит systemd (а это подавляющие большинство), имеется несколько полезных утилит для выполнения базовой настройки ОС. Но не забывайте, что некоторые дистрибутивы имеют свои особенности их использования.• hostnamectl — управляет именем машины и другими идентификационными настройками.
• localectl — настраивает локаль и все, что с этим связанно.
• timedatectl — настройка времени.
В данной статье совсем ничего нет про настройку сетевых параметров. Ранее автором уже публиковалась статья на эту тему. В общем тут тоже не все так просто и очевидно, именно поэтому системному администратору надо постоянно учиться и совершенствоваться. Приходите к нам и мы вам поможем освоить этот многогранный и интересный мир.
Будьте в курсе всех событий
Подпишись на рассылку актуальных новостей
и читай нас в соц. сетях