Pull to refresh

Обновление tzdata для России (системное и java в Ubuntu/Debian, а также в MySQL)

MySQL
Sandbox

Предисловие


Как многие помнят, в этом году был принят закон, в связи с которым поменялись часовые пояса в России с 26 октября 2014 г. Само собой, сразу после принятия закона я поставил в календарь напоминалку на начало октября «обязательно обновить tzdata». Каково же было моё удивление, когда я не обнаружил апдейтов tzdata в debian и ubuntu. Решил подождать еще немного, наткнулся на открытые баги в дистрибутивах (Ubuntu #1377813, #1371758, Debian #761267). Коллеги усиленно напоминали о необходимости апдейтов, но мейнтейнеры не реагировали. Чтобы не устроить себе аврал к концу месяца, решил собрать пакеты и проапдейтить вручную. Важно отметить, что информацию о зонах в некотором софте, например, в MySQL, потребуется обновить вручную. Далее последует короткий мануал.

Ubuntu 12.04 / 14.04, Debian 7


К моменту, когда я решился собрать апдейты, в debian wheezy и почти сразу в ubuntu utopic появился пакет 2014h, поэтому я просто взял tzdata_2014h-2.dsc, tzdata_2014h.orig.tar.gz, tzdata_2014h-2.debian.tar.xz и собрал без особых изменений.

Поставил компиляторы:

apt-get install devscripts dpkg-dev debhelper build-essential


Распаковал исходники:

dpkg-source -x tzdata_2014h-2.dsc
cd tzdata-2014h


Поставил зависимости, подправил версию и собрал:

apt-get install default-jre-headless rdfind symlinks 
dch -i
dpkg-buildpackage -rfakeroot
cd ../


Осталось установить:

dpkg -i tzdata*deb


Ubuntu 10.04, Debian 6


Алгоритм для старых дистрибутивов практически не отличается, разница лишь в том, что пакет rdfind отсутствует в дистрибутиве. Проще всего оказалось его собрать.

Исходники были взяты в debian packages.debian.org/wheezy/rdfind, установлены зависимости и собран deb пакет.

dpkg-source -x rdfind_1.3.1-1.dsc
apt-get install nettle-dev
cd rdfind-1.3.0/
dpkg-buildpackage -rfakeroot
cd ../
dpkg -i rdfind*deb


Обновление в MySQL



UPD: Не сработает, если  time_zone = SYSTEM .
Решение без перезапуска -  SET GLOBAL time_zone = 'Europe/Moscow'; или 
 SET GLOBAL time_zone = '+03:00' , если таблицы не обновлены;


После обновления системной tzdata нужно получить tzinfo для MySQL скриптом из комплекта:

mysql_tzinfo_to_sql /usr/share/zoneinfo > /tmp/tzinfo-mysql-2014h-2.sql


Далее, этот файлик заливаем в MySQL. Подключаемся с правами root, например, так:

mysql --defaults-file=/etc/mysql/debian.cnf


Выбираем базу, кодировку и файл:

use mysql
set names utf8;
source /tmp/tzinfo-mysql-2014h-2.sql


На момент окончания написания этого поста мейнтейнеры ubuntu, вероятно, среагировали на моё письмо в ubuntu-devel-discuss и протолкнули апдейты в proposed. Вероятно, в ближайшие дни апдейты tzdata прилетят из официальных репозиториев, но MySQL всё равно понадобится обновлять вручную.

UPD. Для OpenJDK апдейты поставятся вместе с системными, а для Sun/Oracle Java нужно воспользоваться «фирменной» утилитой.

UPD2. Инструкция от Ernillew, как настроить proposed: habrahabr.ru/post/240937/#comment_8080009.

UPD3. В trusty появилось 2014i, которое включает предыдущие изменения и новые для Беларуси.
«tzdata» versions published in Ubuntu

По состоянию на 2014-10-23 09:31 +0400 (инфа из launchpad.net/ubuntu/+source/tzdata/+bugs )

Trusty-security (2014i-0ubuntu0.14.04): main/libs 
Trusty-updates (2014i-0ubuntu0.14.04): main/libs 
Precise-security (2014i-0ubuntu0.12.04): main/libs 
Precise-updates (2014i-0ubuntu0.12.04): main/libs 
Lucid-security (2014i-0ubuntu0.10.04): main/libs 
Lucid-updates (2014i-0ubuntu0.10.04): main/libs 
Utopic-proposed (2014i-0ubuntu0.14.10): main/libs 
Trusty-proposed (2014i-0ubuntu0.14.04): main/libs 
Precise-proposed (2014i-0ubuntu0.12.04): main/libs 
Lucid-proposed (2014i-0ubuntu0.10.04): main/libs 
Utopic (2014h-2): main/libs 
Trusty (2014b-1): main/libs 
Precise (2012b-1): main/libs 
Lucid (2010i-1): main/libs 


UPD4. Для PHP в некоторых конфигурациях может понадобиться

pecl install timezonedb
echo "extension=timezonedb.so" > /etc/php5/conf.d/timezonedb.ini

# или, если уже было установлено
pecl upgrade timezonedb
Tags:tzdatatz databaseвремяdura lexubuntudebianmysqljava
Hubs: MySQL
Total votes 24: ↑22 and ↓2+20
Views64K
Comments Comments 58

Popular right now

Top of the last 24 hours