automatize o dpkg-reconfigure tzdata

60

Estou usando o puppet para administrar um cluster de servidores debian. Preciso alterar o fuso horário de cada máquina no cluster. A maneira correta do debian de fazer isso é usar dpkg-reconfigure tzdata. Mas só consigo alterá-lo se usar a caixa de diálogo. Existe alguma maneira de automatizar isso a partir do shell para que eu possa escrever um Exec para facilitar isso?

Caso contrário, acho que a próxima melhor maneira provavelmente seria distribuir os fantoches /etc/timezonee /etc/localtimecom os dados corretos no cluster.

Qualquer entrada apreciada!

Elrond
fonte
Observe que a resposta atualmente aceita está errada desde 2017 . A resposta correta é essa .
Dan Dascalescu

Respostas:

92

Você precisa especificar o front-end como `` não interativo '' e ele salvará suas configurações atuais.

O dpkg-reconfigure tomará as configurações atuais do sistema como gospel, então simplesmente mude seu fuso horário da maneira que você faria normalmente e execute-o com o sinalizador não interativo

por exemplo, para eu mudar para "Europa / Dublin" onde estou:

# echo "Europe/Dublin" > /etc/timezone    
# dpkg-reconfigure -f noninteractive tzdata

Obviamente, isso permite que você use o fantoche / cfengine como quiser distribuir o / etc / fuso horário também.

Philip Reynolds
fonte
5
como alternativa à alteração de permissões, você pode fazer algo assim. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
precisa saber é o seguinte
3
Para completar, outra maneira de ecoar através do sudo ésudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver
6
Atenção! Versões mais recentes do Ubuntu / Debian não funcionam mais dessa maneira. Comportamento alterado. bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk
21

Como a resposta aceita não funciona mais (Debian Jessie, abril de 2017), uma abordagem modificada no link de comentários de @ gertvdijk parece fazer o trabalho agora:

sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata
scruss
fonte
11
Essa deve ser a resposta aceita hoje em dia.
Dan Dascalescu
Ótimo, isso funciona muito bem
infomaniac
5

Você deve poder usar o debconf-set-selections para predefinir a configuração. Instale o debconf-utils e execute debconf-get-selections | grep tzdataem um sistema configurado corretamente para descobrir o que configurá-lo também.

Zoredache
fonte
11
Para coisas baseadas no debconf, isso deve funcionar. Mas tzdata prefere a configuração de / etc / timezone. Portanto, isso não funciona em um sistema já instalado (chiado).
Elrond
3

Você também pode usar a receita do wiki Puppet (agora extinto) ( arquivo morto ) que substitui /etc/localtimepelo arquivo zoneinfo apropriado de /usr/share/zoneinfo: -

class timezone {
    package { "tzdata":
        ensure => installed
    }
}

class timezone::central inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Central",
    }
}

class timezone::eastern inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Eastern"
    }
}

class timezone::pacific inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Pacific"
    }
}

class timezone::mountain inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source =>
             "file:///usr/share/zoneinfo/US/Mountain"
    }
}

Não tenho certeza se o dpkg-reconfigure faz algo extra, mas usei a receita acima e ela funciona perfeitamente.

phred
fonte
-3

É muito simples e só precisa digitar um comando e responder a perguntas simples.
então corra:

/usr/bin/tzselect
f4a65fa46s5fa
fonte
11
man tzselect: "Observe que o tzselect não muda realmente o fuso horário. Use 'dpkg-reconfigure tzdata' para conseguir isso."
Spinkus