Pull to refresh

Смена временных зон в Mac OS X Snow Leopard

Reading time 2 min
Views 17K

Введение


В связи с отменой перехода на летнее/зимнее время посвящается.

В Mac OS X настройки часовых поясов находятся в двух местах: /etc/localtime и /usr/share/icu/icudtXXX.dat.
/etc/localtime, который является сиволической ссылкой на /usr/share/zoneinfo/[установленная time zone, например Europe/Moscow], задает настройки временных зон для консоли.
Системные часы, приложения Mail и прочие берут настройки тайм-зон из /usr/share/icu/icudtXXX.dat.

30 октября 2011г. у меня случилось следующее: в Terminal'е и различных консольных утилитах время правильное(localtime был заранее обновлен), а в Mail, системных часах и прочем отстает на час.

Решение проблемы


Модификация /etc/localtime

  • Скачиваем актуальную версию tzdata(я использовал tzdata2011l.tar.gz, последнюю версию можно взять здесь).
  • Распаковываем (tar xzf ./tzdata2011l.tar.gz).
  • Применяем (sudo zic europe).
  • Проверяем (zdump -v /etc/localtime | grep 2011).

Должно получиться примерно так:
eth0-loth:~$ zdump -v /etc/localtime | grep 2011
/etc/localtime Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0
/etc/localtime Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSK isdst=0

Как видно — переход в марте указан, а октябрьский — исчез.

Модификация /usr/share/icu/icudtXXX.dat

У меня стоит Xcode, поэтому я компилировал файл прямо у себя.
  • Скачиваем исходники ICU (брать тут).
  • Распаковываем:
    tar xzf ICU-400.42.tar.gz
    cd ICU-400.42/icuSources
  • Копируем актуальную tzdata в исходники:
    cp ~/tzdata2011l.tar.gz ./tools/tzcode/
  • Cобираем и компилируем:
    ./runConfigureICU MacOSX --with-data-packaging=archive
    gmake
  • Делаем бэкап:
    cp /usr/share/icu/icudt40l.dat ~
  • Устанавливаем файл:
    sudo install -o root -g wheel -m 0644 -Sp data/out/icudt40l.dat /usr/share/icu/icudt40l.dat
  • Для окончательного применения, перезагружаемся.


Заключение


Все вышенаписанное проверялось на Mac OS X Snow Leopard 10.6.8. В результате имеем правильную тайм зону (Europe/Moscow), включенную синхронизацию ntp и правильное время во всех приложениях.

P.S. Cтоит отметить, что при попытке собрать более позднюю версию icu(icudt46l) система работала нестабильно.

P.P.S. Спасибо gag_fenix за инвайт!

UPD: Скомпилированный файл icudt40l.dat (здесь) и файл зоны Moscow(здесь).
Tags:
Hubs:
+6
Comments 13
Comments Comments 13

Articles