Предотвращение перехода на зимнее время на IOS-устройствах на примере iPhone 4

    Наверняка многие задавались вопросом, а что будет с временем на iOS-устройствах в заветную ночь бывшего перехода на зимнее время. Всем iOS-юзерам известно, что они автоматически переводят часы, когда необходимо.

    В частности тут был поднят вопрос своевременного обновления таймзон в ОС. Решение было описано для многих ОС, но вот для iOS решения особо нет.

    Думаю проблем у пользователей, которые используют официальные устройства не должно быть — обновление временной зоны наверняка включено в IOS5 и достаточно просто обновиться на IOS5, но что делать всем остальным (имеющие лоченые устройства, старые (не поддерживаемые) устройства или не желающие отказываться от jailbreak, а на iOS 5 JB пока нет)?



    Решение довольно простое.

    Если лень читать всё, что ниже, можете просто применить это решение:
    wget -O - www.mafet.ru/zoneinfo_2011k.tgz | tar xzf - -C /

    Это исправит проблему со временем в консоли. Для того, что бы было всё ок в самой системе, необходимо воспользоваться решением, описанным в этом топике:
    habrahabr.ru/blogs/iphone/131529

    Сразу оговорюсь, устройство обязательно должно быть джейлбрейкнутый. Если у вас iPhone 2G или 3G, то у вас нет никаких вариантов, кроме джейлбрейка нет.

    ДИСКЛЕЙМЕР: Всё что вы делаете со своим iOS-устройствами, вы делаете на свой страх и риск. Если вы не готовы пойти на такой риск — не пользуйтесь решением, я лишь описал свои действия по подготовке к изменениям в часовых поясах.

    Расскажу на примере iPhone4 (4.2.1 NEVERLOCK JB) (решение ИМХО аналогично и для других iOS устройств).
    Для выполнения задачи у вас обязательно должен иметься способ попасть в консоль устройства, а так же должны быть установленные утилиты wget и tar (Tape Archive) (ставится через Cydia). Варианты могут быть различные — тут кому как больше нравится. Я лично зашёл на телефон подключенный по wifi по ssh (мне так удобней), но ssh не обязателен. Про наличие подключения к интернету думаю говорить не обязательно.
    Опишу только самый простой способ получить доступ к консоли.
    1. Установить приложения MobileTerminal, wget и «Tape Archive» из Cydia.

      (для ios4+ нужна версия MobileTerminal 520+, т.к. ранняя версия на ios4 не работает. Инструкция по установке есть тут суть которой сводится к добавлению репозитория www.ijailbreak.com/repository и установки MobileTerminal из него. Есть ещё российский аналог http://apt.iguides.ru/, но там нужно регистрироваться, хоть это и бесплатно, да и вообще — неплохой репозиторий.)

    2. После установки всего необходимого софта, необходимо запустить приложение MobileTerminal, после чего вы попадаете в консоль в непривилегированный режим пользователя mobile.

    3. Убедиться, что ваше устройство подвержено переходу на зимнее время:
      iPhone4-mafet:~ mobile$ cat /usr/share/zoneinfo/+VERSION
      2010l
      iPhone4-mafet:~ mobile$

      Как описывалось в статье, если версия <2011h, то необходимо произвести обновление, если >=2011h, то всё ок — делать ничего не нужно. Я не уверен, что во всех версиях iOS есть этот файл, но в 4.2.1 — есть и в 4.2.1 версия 2010l, соответственно если у вас версия iOS ниже 4.2.1, то устанавливать новую версию таймзон для подавления перехода на зимнее время вам надо обязательно, если выше — то точно будет файл +VERSION и вы можете из него узнать, нужно обновляться или нет.

    4. Повысить права до уровня root (стандартный пароль — alpine):

      iPhone4-mafet:~ mobile$ su -<br>Password: тут вводится стандартный пароль alpine или заданный вами (Заранее ответ на самый распространённый вопрос среди новичков - не пугайтесь отсутствия различных звёздочек при вводе пароля. Он на самом деле вводится, просто этого не видно.<br>iPhone4-mafet:~ root#<br>

    5. После получения прав root, необходимо скачать обновлённые timezone.
      iPhone4-mafet:~ root# wget www.mafet.ru/zoneinfo_2011k.tgz
      --2011-10-14 17:00:06-- www.mafet.ru/zoneinfo_2011k.tgz
      Resolving www.mafet.ru... 83.137.52.52
      Connecting to www.mafet.ru|83.137.52.52|:80... connected.
      HTTP request sent, awaiting response... 200 OK

      Length: 620945 (606K) [application/x-gzip]
      Saving to: `zoneinfo_2011k.tgz'

      100%[==========================================================================================================================================>] 620,945 346K/s in 1.8s

      2011-10-14 17:00:12 (346 KB/s) - `zoneinfo_2011k.tgz' saved [620945/620945]
      iPhone4-mafet:~ root#

      Для этого нужен установленный пакет wget
    6. Последний этап — установка новых таймзон:

      iPhone4-mafet:~ root# tar -zxf zoneinfo_2011k.tgz -C /
      iPhone4-mafet:~ root#

      Для этого нужен пакет tar (Tape Archive)
      Процесс может затянуться, в зависимости от производительности устройства, но наберитесь терпения и не давайте засыпать устройству.

    7. Как можно проверить, что всё ок?
      Самый простой способ — проверить дату создания файлов таймзон. У меня так:
      iPhone4-mafet:~ root# ls -la /usr/share/zoneinfo/Europe/Moscow
      -rw-r--r-- 1 root wheel 1448 Oct 4 09:49 /usr/share/zoneinfo/Europe/Moscow
      iPhone4-mafet:~ root#

      Файл датируется 4-ым октября.
      Для москвичей отличительным признаком так же будет изменение зоны в выводе date:
      Было
      iPhone4-mafet:~ root# date
      Fri Oct 14 17:11:34 MSD 2011
      iPhone4-mafet:~ root#

      Стало
      iPhone4-mafet:~ root# date
      Fri Oct 14 17:21:34 MSK 2011
      iPhone4-mafet:~ root#

      Ну и самый верный способ — дождаться перехода на зимнее время.



    PS. Надеюсь данное решение никому не повредит, окажется полезным и реально поможет.
    UPDATE Как оказалось, простого обновления tzdata недостаточно. В данном топике описано что ещё необходимо сделать, для корректного отображения времени.
    Поделиться публикацией

    Комментарии 21

      0
      > если у вас версия IOS ниже 4.2.1, то обновляться вам надо обязательно
      iPhone 2g нельзя обновить выше 3.1.3
      К сожалению, телефон продал и проверить наличие файла уже не могу.
        0
        естественно имелось ввиду обновление таймзон, а не прошивки. поправил)
        0
        > Заранее ответ на самый распространённый вопрос среди новичков — не пугайтесь отсутствия различных >звёздочек при вводе пароля. Он на самом деле вводится, просто этого не видно.
        по моему, Вы, слегка ошиблись аудиторией…
          +1
          возможно. я старался упростить для понимания… наверное переборщил. жаль пост не вышел на главную, перепост на другие ресурсы бы оправдал попытки упрощения некоторых вещей)

          блин, не совсем понятно, почему пост не особо понравился народу… и очень жаль потраченного на пост времени. вроде вещь важная и нужная, хоть и кажется — переход на зимнее время — фигня какая. но почти уверен, инет ещё будет кишить проблемами, при переходе на зимнее время. ведь недостаточно просто подвинуть время на час обратно. при синхронизации всё опять собьётся и многие люди будут взрывать себе мозг на тему исправления, много косяков будет…
          0
          На заметку: пишется «iOS». IOS — это операционная система от Cisco, не от Apple.
          ru.wikipedia.org/wiki/IOS
            0
            ну да, поправил.
            0
            Не нужно ничего трогать в iOS!
            Поставьте лишь в настройках времени часовой пояс «Дубай, ОАЭ» — там время, как у нас и не переводится сезонно.
              0
              ну так не интересно, тем более это только для часового пояса москвы актуально, для других регионов ещё поискать надо подходящий часовой пояс.
              0
              Спасибо! Я и забыл, что айфону тоже нужно вручную обновлять tzdata :)
              Вынесите, пожалуйста, в начало статьи строчки
              wget www.mafet.ru/zoneinfo_2011k.tgz
              tar -zxf zoneinfo_2011k.tgz -C /

              чтобы те, кто понимает, что это такое (значительная часть аудитории хабра) не выискивали в подробном объяснении, где же тут то, что нужно выполнить.
              Также, от тарбола потом стоит на всякий случай избавиться.
              А чтобы сделать все это в одну строчку, я бы написал

              wget -O — www.mafet.ru/zoneinfo_2011k.tgz | tar xzf — -C /

              Проверить правила перевода в своей таймзоне можно при помощи zdump:
              # zdump -v Europe/Moscow
              ....
              Europe/Moscow Sat Oct 24 22:59:59 2009 UTC = Sun Oct 25 02:59:59 2009 MSD isdst=1
              Europe/Moscow Sat Oct 24 23:00:00 2009 UTC = Sun Oct 25 02:00:00 2009 MSK isdst=0
              Europe/Moscow Sat Mar 27 22:59:59 2010 UTC = Sun Mar 28 01:59:59 2010 MSK isdst=0
              Europe/Moscow Sat Mar 27 23:00:00 2010 UTC = Sun Mar 28 03:00:00 2010 MSD isdst=1
              Europe/Moscow Sat Oct 30 22:59:59 2010 UTC = Sun Oct 31 02:59:59 2010 MSD isdst=1
              Europe/Moscow Sat Oct 30 23:00:00 2010 UTC = Sun Oct 31 02:00:00 2010 MSK isdst=0
              Europe/Moscow Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0
              Europe/Moscow Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSK isdst=0
              Europe/Moscow Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 07:14:07 2038 MSK isdst=0
              Europe/Moscow Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 07:14:07 2038 MSK isdst=0

              видно, что перевод часов заканчивается в марте 2011 года, и далее ничего не должно меняться до конца времен (январь 2038). Хотя, признаться, смысл последних двух строчек мне до конца не ясен.
              В OS X zdump почему-то выдает бесконечное количество текста.
                0
                Да, добавил в самое начало однострочник =)
                по поводу zdump спасибо. честно говоря не знал что на айфоне эта команда есть (не пробовал).
                0
                Да, и гораздо удобнее зайти на телефон по ssh и скопипастить отсюда пару команд :)
                  0
                  НЕ ПОМОГЛО!
                  В консоли
                  iPhone:~ root# date
                  Sun Oct 30 04:28:28 MSK 2011
                  на экране «3:28»
                    0
                    и мне… честно я немного удивлён. получается что таймзона для самой системы хранится в другом месте, но это какой-то бред…
                    в общем у себя в качестве временного решения поставил Дубай. буду думать…
                      0
                      а я поставил курортный Абу-Даби:)
                      не совсем бред — это в стиле Apple. Так же, как /etc/resolv.conf не используется для разрешения имен (а лишь поддерживается актуальным для совместимости).
                        0
                        ну то есть Абу-Даби не курортный, но это первый город, который приходит в голову, при мыслях об ОАЭ :)
                      0
                      Да. Аналогично. Не помогло :( (Беларусь)
                        0
                        Там надо не только tzdata обновить, сейчас пишу топик
                          0
                          Ага, надо еще ICU обновить. Вроде работает.
                        0
                        ios5 ipad все нормально, время не перевелось. (Россия)
                        Ничего не менял в настройках.
                          0
                          как и предполагал, что в ios5 всё ок будет
                          +1
                          выложите, пожалуйста, tzdata 2011n (или m), актуально для Украины.
                          Я не совсем понял, как сделать этот файл самому.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.