Como posso instalar o banco de dados TZ em uma plataforma Linux embarcada?

0

Eu tenho um dispositivo Linux incorporado para o qual a imagem do sistema operacional de estoque não inclui os arquivos de banco de dados do TZ normalmente encontrados em /usr/share/zoneinfo .

Desejo aprimorar o dispositivo para poder incluir suporte a fuso horário no meu aplicativo. O dispositivo não possui um gerenciador de pacotes e não inclui nenhum dos utilitários de gerenciamento de fuso horário usuais, como tzselect ou timedatectrl . O principal método para transferir dados para o dispositivo é via unidade flash USB.

Eu confirmei que a biblioteca GLIBC no dispositivo foi criada com suporte a fuso horário incluído, e hacking copiando manualmente o banco de dados TZ da minha máquina para o dispositivo e criando os vários links simbólicos esperados, posso obter suporte de fuso horário mais ou menos trabalhando.

Tudo o que posso encontrar on-line sobre a instalação do banco de dados do TZ recomenda o uso do gerenciador de pacotes da plataforma, que, nesse caso, não está disponível. Um fator complicador é que os fabricantes do dispositivo sugerem que todos os dados do usuário sejam colocados sob o diretório /opt (os diretórios do sistema são montados somente leitura), de acordo.

Estou querendo instalar o banco de dados em /opt/usr/share/zoneinfo em vez do usual /usr/share/zoneinfo , com /usr/share/zoneinfo - > /opt/usr/share/zoneinfo symlink. Isso significa que os links simbólicos copiados do diretório zoneinfo da minha máquina de desenvolvimento não estarão apontando para o local correto uma vez no destino (supondo que sejam absolutos).

Então, para copiar o banco de dados TZ, eu acho que preciso:

  • Pegue uma cópia temporária do diretório usr/share/zoneinfo no meu dev. máquina
  • Use o utilitário symlinks para converter todos os links simbólicos absolutos para o relativo.
  • Empacote o diretório em um formato de arquivo que mantenha links simbólicos.
  • Copie o arquivo em uma unidade flash USB
  • Desembale no local desejado.

Existe uma maneira melhor / padrão / adequada de fazer isso?

OBSERVAÇÃO: estou usando o CrossControl CCPilot VS, o sistema operacional gerado pelo Yocto.

    
por Richard Lang 23.07.2018 / 05:20

2 respostas

1

Sem saber muito mais sobre seu hardware e seu cenário em particular, sinto que o curso de ação mais fácil aqui seria seguir como isso seria feito na Projeto Linux From Scratch (LSF) .

Linux From Scratch

O projeto discute os passos aqui:

6.9.2.2. Adding time zone data

Install and set up the time zone data with the following:

    tar -xf ../../tzdata2018e.tar.gz

    ZONEINFO=/usr/share/zoneinfo
    mkdir -pv $ZONEINFO/{posix,right}

    for tz in etcetera southamerica northamerica europe africa antarctica  \
              asia australasia backward pacificnew systemv; do
        zic -L /dev/null   -d $ZONEINFO       -y "sh yearistype.sh" ${tz}
        zic -L /dev/null   -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}
        zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}
    done

    cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
    zic -d $ZONEINFO -p America/New_York
    unset ZONEINFO

.....

**Reference:* http://www.linuxfromscratch.org/lfs/view/development/chapter06/glibc.html

O tarball?

Portanto, a única pergunta que resta é onde alguém adquire esse arquivo tzdata2018e.tar.gz ? Mais Googling vai até esta página: 3.2. Todos os Pacotes e nesta página estão esses URLs.

Dados do fuso horário (2018e) - 346 KB:

  • Página inicial: link
  • Download: link
  • MD5 sum: 97d654f4d7253173b3eeb76a836dd65e
por 23.07.2018 / 06:16
0

Acabou sendo mais direto que eu estava antecipando para transferir o banco de dados TZ existente na minha máquina de desenvolvimento xenial ubuntu. Empacotar o diretório zoneinfo como um arquivo tar preservou os links simbólicos através da operação de cópia, e os links simbólicos já eram relativos, então instalar o diretório em um local alternativo no dispositivo de destino não foi um problema.

    
por 23.07.2018 / 21:55

Tags