LINUX.ORG.RU

TimeZone для Tcl в NixOS

 , ,


0

1

Есть язык программирования Tcl. Есть у него такая конструкция:

eltclsh > set t [clock scan {2004-10-30 05:00:00} \
-format {%Y-%m-%d %H:%M:%S} \
-timezone :America/New_York]

По идее должна выдавать секунды с начала эпохи для указанной даты во времени Нью-Йорка. Установлен Tcl в NixOS. Версия:

eltclsh > nixos-version 
23.11pre497256.86a9533155e (Tapir)

И вот в нём эта штука не работает. Вот что выдаёт:

eltclsh > set t [clock scan {2004-10-30 05:00:00} \
-format {%Y-%m-%d %H:%M:%S} \
-timezone :America/New_York]
time zone ":America/New_York" not found

Здесь пишут:

The current set of places where tcl will try to find Olson files is:

   /usr/share/zoneinfo

   /user/share/lib/zoneinfo

   /user/lib/zoneinfo

   /user/local/etc/zoneinfo

   C:/Progra~1/cygwin/usr/local/etc/zoneinfo

У себя я нашёл только /etc/zoneinfo:

eltclsh > ls /etc/zoneinfo
Africa	    Canada   EST      GMT+0	 Iran	      MET      Poland	 Singapore  W-SU
America     CET      EST5EDT  GMT-0	 iso3166.tab  Mexico   Portugal  Turkey     zone1970.tab
Antarctica  Chile    Etc      GMT0	 Israel       MST      posix	 tzdata.zi  zone.tab
Arctic	    CST6CDT  Europe   Greenwich  Jamaica      MST7MDT  PRC	 UCT	    Zulu
Asia	    Cuba     Factory  Hongkong	 Japan	      Navajo   PST8PDT	 Universal
Atlantic    EET      GB       HST	 Kwajalein    NZ       right	 US
Australia   Egypt    GB-Eire  Iceland	 leapseconds  NZ-CHAT  ROC	 UTC
Brazil	    Eire     GMT      Indian	 Libya	      Pacific  ROK	 WET

Как бы это дело прикрутить к Tcl?


таймзоны tcl лежат (должны лежать) в каталоге $tcl_library/tzdata

  1. запустить tcl, посмотреть куда кажет tcl_library:

puts $tcl_library

  1. если там нет каталога tzdata или в нём нет нужных файлов или они кривые, то писать баг-репорт.
MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от TeopeTuK

Я бы всё-таки рекомендовал пользоваться общесистемной tzdata

tcl используется в пачке платформ (штатно Linux,Win,Mac,Android и плюс можно собрать под экзотику), в каждой из которых свои тараканы. Поэтому так, «никому нельзя доверять» и «всё своё носи с собой» ;-)

Считаете что более правильная tzdata лежит в ином месте - киньте в неё симлинк или скопируйте из неё

MKuznetsov ★★★★★
()
Ответ на: комментарий от TeopeTuK

Но в линуксах-то она есть всегда.

не факт, не факт…с повышением степени мантейнеристости мантейнеров, докернутости и внедрением CI/CD во все щели, вообще не удивлюсь если таймзоны отдадут на откуп systemd и там про это позабудут в половине дистров, а во второй поломают ;-)

для корректной работы tcl в том числе в safe interp и тем паче в chroot , tzdata строго необходима. То есть её лучше носить с собой.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Это твои фантазии. tzdata должна быть в линуксах. Если ее по какй-то причине нет, это баг, его нужно репортить. Использовать устаревшую базу из-за бага неправильно. И как-то странно видеть такое пренебрежение к майнтейнерам, которые собственно делают всю работу. Не помню, чтобы мне попадался неадекватный сопровождающий, который отказывался чинить баги…

TeopeTuK ★★★★★
()
Ответ на: комментарий от TeopeTuK

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

назови хоть один дистрибутив где нормально (полно и правильно) собран упомянутый tcl «с батарейками»… неут таких. Даже без батареек - криво. При наличии билд-системы на tcl3d.org, мантейнеры заимствуют друг-у-друга и смежных дистров скрипты. Главное не напрягаться, собралось и тест не свалился в кору, значит всё: continius delivery.

или посмотри на доступных хостах tclConfig.sh tkConfig.sh - есть особо отличившиеся дистры которые оставляют там ошмётки от сборки

вот так почти к любому софту. Сколько версий питона в среднем дистре ? а нахуа так..

MKuznetsov ★★★★★
()
Ответ на: комментарий от TeopeTuK

интереса ради, помотрел. tcl-вская tzdata строится(должна) при сборке и обновлениях вот этой вот штукенцией: https://core.tcl-lang.org/tcl/file?name=tools/tclZIC.tcl

штукенция берёт наиболее актуальные Olson файлы из IANA, и парсит их в вид пригодный к быстрой загрузке tcl-ем. При опакечивании они попадают в $tcl_library/tzdata

если вы видите что информация там явно старая и не соответсвует действительности, то у кого руки кривые ? я так считаю что у мантейнеров пакета конкретного дистрибутива.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

tzdata в исходниках тикля имеет версию, текущую на момент релиза этих самых исходников. В дистрибутивах линукса tzdata обновляется по мере выхода новых ее версий, и пользователи получают эти обновления как обновления безопасности (ну или как обычные обновления, если это роллинг).

TeopeTuK ★★★★★
()

возможно косяк NixOS. модно-молодёжный косяк во всех смыслах

у уютном mint /usr/share/zoneinfo присутсвует и даже более того, путь вхардкожен в libc

mint:~$ ls /usr/share/zoneinfo
Africa      Cuba     GMT+0        Japan              NZ-CHAT     Turkey
America     EET      GMT-0        Kwajalein          Pacific     tzdata.zi
Antarctica  Egypt    GMT0         leapseconds        Poland      UCT
Arctic      Eire     Greenwich    leap-seconds.list  Portugal    Universal
Asia        EST      Hongkong     Libya              posix       US
Atlantic    EST5EDT  HST          localtime          posixrules  UTC
Australia   Etc      Iceland      MET                PRC         WET
Brazil      Europe   Indian       Mexico             PST8PDT     W-SU
Canada      Factory  Iran         MST                right       zone1970.tab
CET         GB       iso3166.tab  MST7MDT            ROC         zone.tab
Chile       GB-Eire  Israel       Navajo             ROK         Zulu
CST6CDT     GMT      Jamaica      NZ                 Singapore
mint:~$ strings -a /lib/x86_64-linux-gnu/libc.so.6 | grep zoneinfo
/usr/share/zoneinfo
MKuznetsov ★★★★★
()
Ответ на: комментарий от TeopeTuK

Писать багрепорт в nixos.

Пока что отписался на их форум.

Пока чинят, сделай симлинк /usr/share/zoneinfo -> /etc/zoneinfo

Сделал. Работает:

eltclsh > set t [clock scan {2004-10-30 05:00:00} \
-format {%Y-%m-%d %H:%M:%S} \
-timezone :America/New_York]
1099126800

Спасибо!

Хотелось бы, правда, через /etc/nixos/configuration.nix это реализовать. Но, пока, и так сойдёт.

czan
() автор топика
Ответ на: комментарий от MKuznetsov

запустить tcl, посмотреть куда кажет tcl_library

eltclsh > puts $tcl_library
/nix/store/lfjvvms380g31vk356lxs6prjgnqx8cm-tcl-8.6.13/lib/tcl8.6
eltclsh > ls $tcl_library | grep tzdata
child process exited abnormally

Нет тут, к сожалению, ничего.

если там нет каталога tzdata или в нём нет нужных файлов или они кривые, то писать баг-репорт.

Буду педалировать. Благодарю!

czan
() автор топика
Ответ на: комментарий от czan

В контексте «исправить в nixpkgs» правильнее не ставить tclевую tzdata, а патчить clock.tcl, чтобы он ходил в /etc/zoneinfo.

По-быстрому для себя можно и так, просто убрав одну строчку из пакета.

akho
()
Ответ на: комментарий от czan

Подписки влияют на то, как скоро вы узнаете о том, смерджено ли это все.

Лайков там, кажется, нет.

На скорость смердживания немного влияет, что кто-нибудь потестил/посмотрел. Там коллега резонно просит добавить тестов, но я на этой неделе работаю, переезжаю, вожу ребенка в дневной лагерь, и до выходных могу только с телефона.

(Хоть это и две строчки)

akho
()
28 августа 2023 г.
Ответ на: комментарий от czan

Проверил.

Обновил каналы. Сделал

nix-shell -p tcl tcllib tk

И

$ tclsh
% clock seconds
1693425883
% clock scan {2004-10-30 05:00:00} -timezone :America/New_York
1099126800

Работает! Спасибо вам большое!

czan
() автор топика