Одно время мне никак не удавалось заставить работающую внутри VMware систему типа Arch заставить показывать корректное время сразу после загрузки. В системе был указан корректный московский часовой пояс и был запущен и настроен ntpd. Вот только, по всей видимости, VMware подставляет виртуальной машине системное время под видом UTC, и в итоге после запуска мы получаем в виртуалке время, сдвинутое на +4 часа. А ntpd не торопился его выправлять, в итоге получить точное время можно было лишь спустя 5-10 минут после запуска системы.
Проблему можно было бы разрешить путем задания в Archlinux’е пояса UTC, и таким образом заставить систему никуда не сдвигать время относительно выставляемого VMware. Но так как это было бы слишком просто, пойдем другим путем, и попутно научимся создавать скрипт rc.local в системе с непонятным и неудобным systemd.
Создаем описание нового сервиса rc.local, для этого пишем файл /etc/systemd/system/rc-local.service:
[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target
Активируем его:
[root@arch] # systemctl enable rc-local.service
Создаем файл /etc/rc.local и добавляем в него команду синхронизации времени:
#!/bin/bash sleep 10 ntpdate -u ntp1.vniiftri.ru
Команда sleep организует искусственную задержку, без которой мне не удалось заставить это работать.
Возможно, не успевала прогрузиться сеть.
Делаем скрипт запускаемым:
[root@arch] # chmod +x /etc/rc.local
Перезапускаем виртуалку, и через 10 секунд после старта получаем корректное системное время.
PS: Да, я допускаю, что должна быть какая-то возможность настроить VMware так, чтобы оно выдавало в виртуалки реальное UTC-время, а не выдавало системное время MSK хост-машины за UTC, тем самым вводя виртуальные машины в заблуждение.