Bug 32346

Summary: Настройка времени / часового пояса
Product: Sisyphus Reporter: Evgeniy Korneechev <ekorneechev>
Component: systemdAssignee: mrdrew <mrdrew>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: arseny, boyarsh, cas, evg, grenka, grenka, iv, lav, ldv, m, mike, mrdrew, mvoronov, rider, sem, shaba, vladimir.didenko, vseleznv, zerg
Version: unstableKeywords: RS
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 30940, 32650    
Attachments:
Description Flags
Скриншот с подробностями
none
учит chrooted делать симлинк вместо копирования none

Description Evgeniy Korneechev 2016-08-03 10:47:04 MSK
Created attachment 6782 [details]
Скриншот с подробностями

Некорректные значения часового пояса после установки ОС, в результате чего требуются дополнительные настройки после установки.
Важно: После изменения часового пояса с помощью timedatectl, в граф. интерфейсе нельзя будет выбрать страну часового пояса.
----------------   
        timedatectl
      Local time: Вт 2016-08-02 13:02:46 UTC
  Universal time: Вт 2016-08-02 13:02:46 UTC
        RTC time: Вт 2016-08-02 13:02:46
       Time zone: n/a (UTC, +0000)
 Network time on: n/a
NTP synchronized: no
 RTC in local TZ: no
Comment 1 Evgeniy Korneechev 2016-09-07 14:57:53 MSK
необходимо выполнить команду:
timedatectl set-timezone Europe/Moscow (ну или другой)

хотелось бы внести это исправление, чтобы после установки ОС, сразу был верный часовой пояс.
Comment 2 Evgeniy Korneechev 2016-11-28 17:05:07 MSK
На Рабочей станции 8.1 (от 22.11.16) - все тоже самое:

# timedatectl 
      Local time: Пн 2016-11-28 13:59:58 UTC
  Universal time: Пн 2016-11-28 13:59:58 UTC
        RTC time: Пн 2016-11-28 13:59:58
       Time zone: n/a (UTC, +0000)
 Network time on: n/a
NTP synchronized: no
 RTC in local TZ: no

# rpm -q alterator-datetime 
alterator-datetime-2.6-alt1
Comment 3 Michael Shigorin 2016-11-28 17:54:55 MSK
Эх, блокер не сообразил тогда повесить и забыл.  На 8.2 теперь.
Comment 4 Grigory Ustinov 2017-12-25 13:32:23 MSK
Вроде бы имеет смысл просто создать симлинк вместо файла /etc/localtime на нужную зону из ../usr/share/zoneinfo/

И если я правильно понимаю, это может касаться alterator-tzone
Comment 5 Grigory Ustinov 2017-12-25 16:53:22 MSK
Значит так. При установки совершенно верно вызывается tzupdate и делает хардлинк в /etc/localtime на ../usr/share/zoneinfo/$tzname.
Но timedatectl его не принимает.
При вызове 
(In reply to comment #1)
> timedatectl set-timezone Europe/Moscow (ну или другой)
создаётся симлинк.
Даже если просто руками сделать его, то timedatectl начинает показывать то, что нам всем так хочется увидеть.
Comment 6 Grigory Ustinov 2017-12-26 18:32:41 MSK
Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime не симлинк, а хардлинк.
Comment 7 Michael Shigorin 2017-12-26 20:13:07 MSK
(В ответ на комментарий №6)
> Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime
> не симлинк, а хардлинк.
Читать и писать можно содержимое в файл, а симлинк/хардлинк -- то, чем сам /etc/localtime может являться :)

ldv@ говорит, что патч такой в systemd был, но безумный апстрим его выкинул -- мол, "у всех уже симлинк".  То, что эти дятлы идут наперекор unix-концепции (когда простые программы работают для неограниченного круга задач) и сужают мир до стационарной орбиты своего распухающего глюкодрома -- их личный выбор, но нам этот патч хорошо бы вернуть (а для этого сначала идентифицировать).
Comment 8 Grigory Ustinov 2017-12-26 20:23:21 MSK
(In reply to comment #7)
> (В ответ на комментарий №6)
> > Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime
> > не симлинк, а хардлинк.
> Читать и писать можно содержимое в файл, а симлинк/хардлинк -- то, чем сам
> /etc/localtime может являться :)

Спасибо, Миш, за то, что дополнил мой комментарий. Я написал коротко, потому побоялся ляпнуть не то. Я совершенно не понимаю, по какой причине они переходят от "хорошей идеи" к "плохой идее".
Comment 9 Grigory Ustinov 2018-01-09 11:33:42 MSK
ping
Comment 10 Alexey Shabalin 2018-01-09 15:07:23 MSK
(В ответ на комментарий №6)
> Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime не симлинк, а
> хардлинк.
Но зачем хардлинк? Ведь /usr может быть на отдельной партиции?
Comment 11 Mikhail Efremov 2018-01-09 18:26:31 MSK
(In reply to comment #10)
> (В ответ на комментарий №6)
> > Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime не симлинк, а
> > хардлинк.
> Но зачем хардлинк? Ведь /usr может быть на отдельной партиции?

tzupdate делает хардлинк если может. Если не может - копирует файл. Симлинк не подходит, т.к. /usr может быть не смонтирован.
Comment 12 Alexey Shabalin 2018-01-09 19:10:17 MSK
(В ответ на комментарий №11)
> (In reply to comment #10)
> > (В ответ на комментарий №6)
> > > Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime не симлинк, а
> > > хардлинк.
> > Но зачем хардлинк? Ведь /usr может быть на отдельной партиции?
> 
> tzupdate делает хардлинк если может. Если не может - копирует файл. Симлинк не
> подходит, т.к. /usr может быть не смонтирован.
Почему он может быть не смонтирован?
И зачем запускать tzupdate когда не смонтирован /usr (ведь настройки зон в /usr)?
Когда не смонтирован /usr, надо разбираться почему он не смонтирован, в этот момент как настроена зона никого не волнует.
Comment 13 Andrey Cherepanov 2018-01-10 10:20:05 MSK
(В ответ на комментарий №12)
> (В ответ на комментарий №11)
> > (In reply to comment #10)
> > > (В ответ на комментарий №6)
> > > > Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime не симлинк, а
> > > > хардлинк.
> > > Но зачем хардлинк? Ведь /usr может быть на отдельной партиции?
> > 
> > tzupdate делает хардлинк если может. Если не может - копирует файл. Симлинк не
> > подходит, т.к. /usr может быть не смонтирован.
> Почему он может быть не смонтирован?
> И зачем запускать tzupdate когда не смонтирован /usr (ведь настройки зон в
> /usr)?
> Когда не смонтирован /usr, надо разбираться почему он не смонтирован, в этот
> момент как настроена зона никого не волнует.
В настоящий момент хотелось бы вернуть ранний патч, который работал с обоими вариантами, так как на уже установленных системах это обычный файл.
Comment 14 Mikhail Efremov 2018-01-10 12:53:28 MSK
(В ответ на комментарий №12)
> (В ответ на комментарий №11)
> > (In reply to comment #10)
> > > (В ответ на комментарий №6)
> > > > Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime не симлинк, а
> > > > хардлинк.
> > > Но зачем хардлинк? Ведь /usr может быть на отдельной партиции?
> > 
> > tzupdate делает хардлинк если может. Если не может - копирует файл. Симлинк не
> > подходит, т.к. /usr может быть не смонтирован.
> Почему он может быть не смонтирован?
> И зачем запускать tzupdate когда не смонтирован /usr (ведь настройки зон в
> /usr)?
> Когда не смонтирован /usr, надо разбираться почему он не смонтирован, в этот
> момент как настроена зона никого не волнует.

Я не знаю, может ли такой повисший симлинк вызвать какие-то проблемы, но тем не менее гораздо лучше иметь этот файл, а не симлинк, указывающий в никуда. Вообще мне кажется очевидным, что файл точно не хуже, чем симлинк на него. Друге дело если systemd читает содержимое симлинка и как-то использует как конфигурационное значение.
Comment 15 Alexey Shabalin 2018-01-11 19:43:38 MSK
(В ответ на комментарий №13)
> (В ответ на комментарий №12)
> > (В ответ на комментарий №11)
> > > (In reply to comment #10)
> > > > (В ответ на комментарий №6)
> > > > > Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime не симлинк, а
> > > > > хардлинк.
> > > > Но зачем хардлинк? Ведь /usr может быть на отдельной партиции?
> > > 
> > > tzupdate делает хардлинк если может. Если не может - копирует файл. Симлинк не
> > > подходит, т.к. /usr может быть не смонтирован.
> > Почему он может быть не смонтирован?
> > И зачем запускать tzupdate когда не смонтирован /usr (ведь настройки зон в
> > /usr)?
> > Когда не смонтирован /usr, надо разбираться почему он не смонтирован, в этот
> > момент как настроена зона никого не волнует.
> В настоящий момент хотелось бы вернуть ранний патч, который работал с обоими
> вариантами, так как на уже установленных системах это обычный файл.

Если я правильно понимаю, то этот код был удалён более 5 лет назад, в версии v190(2012-09-20). Я опасаюсь его возвращать, т.к. не знаю где ещё этот легаси может вылезти.
Comment 16 Alexey Shabalin 2018-01-11 19:52:06 MSK
(В ответ на комментарий №14)
> (В ответ на комментарий №12)
> > (В ответ на комментарий №11)
> > > (In reply to comment #10)
> > > > (В ответ на комментарий №6)
> > > > > Надо пропатчить systemd, чтобы он читал и писал в /etc/localtime не симлинк, а
> > > > > хардлинк.
> > > > Но зачем хардлинк? Ведь /usr может быть на отдельной партиции?
> > > 
> > > tzupdate делает хардлинк если может. Если не может - копирует файл. Симлинк не
> > > подходит, т.к. /usr может быть не смонтирован.
> > Почему он может быть не смонтирован?
> > И зачем запускать tzupdate когда не смонтирован /usr (ведь настройки зон в
> > /usr)?
> > Когда не смонтирован /usr, надо разбираться почему он не смонтирован, в этот
> > момент как настроена зона никого не волнует.
> 
> Я не знаю, может ли такой повисший симлинк вызвать какие-то проблемы, но тем не
> менее гораздо лучше иметь этот файл, а не симлинк, указывающий в никуда. Вообще
> мне кажется очевидным, что файл точно не хуже, чем симлинк на него. Друге дело
> если systemd читает содержимое симлинка и как-то использует как
> конфигурационное значение.

Надо не забывать, что в RH приняли решение, что отдельного /usr больше не бывает. Поэтому их не волнуют другие ситуации, и им хватает простого симлинка /etc/localtime.
Мы, типа, поддерживаем вариант с отдельным /usr. Его монтирование происходит на самой ранней стадии. Поэтому у нас тоже должен быть симлинк /etc/localtime, и не в коем случае не хардлинк (вдруг я завтра решу перенести /usr на отдельную партицию).
Если мы решили сидеть на двух стульях (поддерживать и sysV, и systemd), то давайте подстраиваться друг под друга.

PS: вроде проблем с переездом /etc/mtab на симлинк ни у кого не было, давайте и тут просто переедем на симлинк.
Comment 17 Michael Shigorin 2018-01-12 00:05:09 MSK
(В ответ на комментарий №16)
> PS: вроде проблем с переездом /etc/mtab на симлинк ни у кого не было,
> давайте и тут просто переедем на симлинк.
А копировать не лучше ли тогда?

(что в редхате с /usr шорох затеяли четверорукие, и так хорошо известно)
Comment 18 Alexey Shabalin 2018-03-12 17:33:28 MSK
Кажется я понял, почему хочется /etc/localtime как файл или hardlink.
Потому что copy_resolv_conf в /etc/chroot.d/functions не умеет разыменовывать symlink, и в chroot попадает битый symlink.
Может научим /etc/chroot.d/functions обрабатывать /etc/localtime как symlink?
Comment 19 Grigory Ustinov 2018-04-02 14:44:04 MSK
*** Bug 34743 has been marked as a duplicate of this bug. ***
Comment 20 mikhailnov 2018-04-02 21:05:38 MSK
Правильно ли я понял, что симлинк /etc/localtime -> /usr/share/zoneinfo/Europe/Moscow рабочее решение, но вся проблема только в update chroot /etc/chroot.d/ , и это останаливает от переобучения Альтератора с хадлинка на симлинк?
Comment 21 mikhailnov 2018-04-03 01:08:53 MSK
Created attachment 7485 [details]
учит chrooted делать симлинк вместо копирования
Comment 22 mikhailnov 2018-04-03 01:11:37 MSK
> Может научим /etc/chroot.d/functions
> обрабатывать /etc/localtime как symlink?
Вроде бы научил. Патч выше.
Теперь нужно, чтобы Альтератор делал симлинк + какой-то механизм миграции обновлением существующих установок с просто файла на симлинк
Comment 23 Alexey Shabalin 2018-04-03 02:17:05 MSK
Сначала пакет tzdata надо обучить стилинку
Comment 24 Alexey Shabalin 2018-04-03 02:17:20 MSK
Сначала пакет tzdata надо обучить стилинку
Comment 25 mikhailnov 2018-04-03 11:02:37 MSK
На sysvinit тоже симлинк делать, или только на systemd?
Comment 26 mikhailnov 2018-04-03 11:05:38 MSK
# rpm -qf /etc/localtime
glibc-core-2.27-alt3.x86_64

почему glibc-core...?
Comment 27 mikhailnov 2018-04-03 11:21:11 MSK
Нашел.
/usr/sbin/tzupdate обновляет /etc/localtime, а postinstall-скрипт пакета tzdata его вызывает
Comment 28 Maxim Voronov 2018-04-04 09:52:24 MSK
Заменил файл/хардлинк на софтлинк

http://git.altlinux.org/people/mvoronov/packages/?p=tzdata.git;a=commitdiff;h=e982ba0c53598d6c95cc52d2086bb4d09212574a
Comment 29 Andrey Cherepanov 2018-05-07 15:21:09 MSK
(В ответ на комментарий №28)
> Заменил файл/хардлинк на софтлинк
> 
> http://git.altlinux.org/people/mvoronov/packages/?p=tzdata.git;a=commitdiff;h=e982ba0c53598d6c95cc52d2086bb4d09212574a

Алексей?
Comment 30 Anton Farygin 2018-05-07 15:55:07 MSK
Вроде как уже всё в Sisyphus и работает как надо
Comment 31 Andrey Cherepanov 2018-05-08 11:45:20 MSK
(В ответ на комментарий №30)
> Вроде как уже всё в Sisyphus и работает как надо

Тогда почему статус NEW? Проверьте и закройте, пожалуйста.
Comment 32 mikhailnov 2018-07-27 02:35:01 MSK
В сизифе - не знаю, а в p8 проблема все еще актуальна.

$ timedatectl status
                      Local time: Чт 2018-07-26 23:34:12 UTC
                  Universal time: Чт 2018-07-26 23:34:12 UTC
                        RTC time: Чт 2018-07-26 23:34:11
                       Time zone: n/a (UTC, +0000)
       System clock synchronized: no
systemd-timesyncd.service active: n/a
                 RTC in local TZ: no
Comment 33 Владимир Диденко 2018-10-02 17:17:12 MSK
(In reply to comment #30)
> Вроде как уже всё в Sisyphus и работает как надо

А точно как надо, потому что после установки регулярки с Cinnamon у людей вылезло

https://bugzilla.altlinux.org/show_bug.cgi?id=35467
Comment 34 Grigory Ustinov 2018-10-03 19:20:23 MSK
(В ответ на комментарий №32)
> В сизифе - не знаю, а в p8 проблема все еще актуальна.

В сизифе всё по-прежнему.
Comment 35 mrdrew@altlinux.org 2019-04-09 17:15:01 MSK
Сделал тестовый таск 225782, предлагаю потестировать.
Comment 36 Mikhail Efremov 2019-04-10 17:18:12 MSK
В commit message не написано ничего о том, что в этом коммите делается и зачем. Хотелось бы, что там это было написано, особенно когда изменений много, иначе сам автор уже через пару лет не поймет что этот патч делает и зачем нужен.
Comment 37 mrdrew@altlinux.org 2019-04-11 12:24:37 MSK
Commit message поправил.
Comment 38 Anton Farygin 2019-04-18 11:48:08 MSK
У меня в целом работает.
Comment 39 Anton Farygin 2019-04-18 11:51:33 MSK
# l /etc/localtime 
lrwxrwxrwx 1 root root 35 апр 18 11:43 /etc/localtime -> ../usr/share/zoneinfo/Europe/Moscow

# timedatectl set-timezone Europe/Kaliningrad
# l /etc/localtime 
lrwxrwxrwx 1 root root 40 апр 18 10:48 /etc/localtime -> ../usr/share/zoneinfo/Europe/Kaliningrad
# egrep '^ZONE.*' /etc/sysconfig/clock 
ZONE=Europe/Kaliningrad

Далее поменял в /etc/sysconfig/clock зону на Europe/Moscow 
# timedatectl 
               Local time: Чт 2019-04-18 10:50:12 EET
           Universal time: Чт 2019-04-18 08:50:12 UTC
                 RTC time: Чт 2019-04-18 08:50:12
                Time zone: Europe/Kaliningrad (EET, +0200)
System clock synchronized: yes
              NTP service: n/a
          RTC in local TZ: no
Warning: The timezone set in the system is different from the timezone systemd.

Установил через timedatectl - всё поменялось.

Поведение как задумано, спасибо.
Comment 40 Michael Shigorin 2019-04-18 12:18:17 MSK
(В ответ на комментарий №39)
> Warning: The timezone set in the system is different from the timezone systemd.
Вот здесь только два последних слова стоит местами поменять, шоб в жёсткий порядок слов аглицкого встало.
Comment 41 Michael Shigorin 2019-04-18 12:19:22 MSK
(В ответ на комментарий №39)
> Warning: The timezone set in the system is different from the timezone systemd.
Точнее, так:

-the timezone systemd
+systemd timezone
Comment 42 Dmitry V. Levin 2019-04-18 12:31:04 MSK
(In reply to comment #37)
> Commit message поправил.

Отформатируйте его, пожалуйста, чтобы
- первая строка являлась кратким содержанием,
- вторая строка пустая,
- последующие строки являлись развёрнутым описанием.

Спасибо.
Comment 43 Dmitry V. Levin 2019-04-18 12:41:11 MSK
(In reply to comment #35)
> Сделал тестовый таск 225782, предлагаю потестировать.

Исправьте, пожалуйста, содержание коммита d24293946b4c5550bc2f1a41fb2151fdeab9e61b.

Я посмотрел мельком, из того, что заметил:
- fflush не на тот файл;
- отсутствие атрибута _cleanup_fclose_ и fclose вручную;
- новая глобальная функция replace_or_add_line_atomic ищёт строку по префиксу, но из имени функции это совсем не очевидно.
Comment 44 Repository Robot 2019-04-19 06:48:13 MSK
systemd-1:242-alt1 -> sisyphus:

Sat Apr 13 2019 Alexey Shabalin <shaba@altlinux> 1:242-alt1
- 242
- move execute systemctl daemon-reexec from post-script to filetrigger
- add requires systemd to libnss-systemd package (ALT #36267)
- move LOCKFILE to /run/lock in udev init script (ALT #35888)

Tue Apr 09 2019 Andrey Bychkov <mrdrew@altlinux> 1:241-alt5
- this change includes the following (closes: #32346):
  + possibility to get the time zone from /etc/sysconfig/clock
  + set-timezone call adds the time zone to /etc/sysconfig/clock as well
  + user notification shown when two sources have different time zones
  + rollback of the change that had the file copied in case of separate /usr;
  now a symlink is created when calling set-timezone.