apt-get install tzdata noninteractive

109

Quando eu tento

apt-get install -y tzdata

a opção de linha de comando para escolher o fuso horário é exibida. Estou tentando usar isso em um script para fazer alguma configuração, como posso fazer o apt-get rodar sem a entrada do usuário?

Eu sei reconfigurar o tzdata que posso fazer

echo "America/New_York" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata

Mas, ao instalar, preciso que ele execute totalmente, mesmo que não defina o fuso horário correto, sempre posso reconfigurá-lo.

eu tentei

echo 5 | apt-get install -y tzdata

mas não está funcionando como esperado.

PYA
fonte

Respostas:

174

Este é o script que usei

(Versão atualizada com entrada de @elquimista nos comentários)

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive

ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
apt-get install -y tzdata
dpkg-reconfigure --frontend noninteractive tzdata

Parece funcionar bem.

Como um forro:

DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
PYA
fonte
45
Se você está bem com UTC, aqui está uma linha:DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
elquimista
4
Isso é uma dor. Não consigo instalar o tzdata sem que ele me peça para definir meu fuso horário padrão (prompt de configuração durante a instalação do pacote? De quem foi essa ideia?), E não posso definir o fuso horário padrão sem primeiro instalar o tzdata. Já o padrão é UTC se você passar em EOF. Por que não fazer isso e deixar o usuário atualizar mais tarde, se quiser. Ou deixe-me definir a variável de ambiente TZ e fazer com que o tzdata procure por ela.
theferrit32
3
Executar a ln -fs /usr/share/zoneinfo/America/New_York /etc/localtimeetapa anterior DEBIAN_FRONTEND=noninteractive apt-get install -y tzdatafoi a única maneira de fazer com que isso fosse instalado sem um prompt.
fncomp
O mesmo vale para mim, a única maneira de isso funcionar foi colocando a instrução ln primeiro. @PYA.
jpruiz114
81

Se alguém quiser alcançá-lo Dockerfile, use como abaixo.

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y install tzdata
Youngjae
fonte
4
Isso pode ser feito como uma única linha: RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ...A DEBIAN_FRONTENDvariável deve ser definida para a installparte. Não funciona se definido antes de &&para a updateparte.
Daniel Stevens
6

Todo o crédito por isso deve ir para @PYA, mas o pedido certo deve ser:

ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
export DEBIAN_FRONTEND=noninteractive
apt-get install -y tzdata
dpkg-reconfigure --frontend noninteractive tzdata
jpruiz114
fonte
Editei a resposta original para refletir a alteração do pedido.
sebisnow
5

Recentemente, encontrei a seguinte solução em um Dockerfile que cria a biblioteca Cingulata FHE:

ln -snf /usr/share/zoneinfo/$(curl https://ipapi.co/timezone) /etc/localtime

Basicamente, ele usa a API fornecida por ipapi.co para recuperar as informações de fuso horário. Isso configura automaticamente o fuso horário de forma adequada em vez de pular a caixa de diálogo e usar o padrão (UTC).

Patrick
fonte
2

Aqui está como eu fiz:

echo 1 > input.txt
echo 1 >> input.txt
apt-get install -y tzdata < input.txt
ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
echo America/Los_Angeles > /etc/timezone

As duas primeiras declarações de eco criam um arquivo de texto que contém os números de seleção para o menu de área geográfica e o menu de cidade / região. Este arquivo é então usado para fornecer entrada para o comando apt-get install. O pacote tzdata será instalado sem solicitar nenhuma entrada do usuário. O fuso horário será definido como África / Abidjan como se você inserisse 1 e 1 em resposta aos prompts que normalmente receberia. Em seguida, altero o fuso horário para o que desejo com os dois últimos comandos.

Em vez de 1 e 1, você poderia usar os números reais para a área geográfica e cidade / região que deseja, mas parece-me que esses números podem mudar.

Mike Maready
fonte