apt-get install tzdata nicht interaktiv

99

Wenn ich es versuche

apt-get install -y tzdata

Die Befehlszeilenoption zum Auswählen der Zeitzone wird angezeigt. Ich versuche, dies in einem Skript zu verwenden, um einige Einstellungen vorzunehmen. Wie kann ich apt-get ohne Benutzereingabe ausführen?

Ich weiß, welche TZ-Daten ich neu konfigurieren kann

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

Aber bei der Installation muss es vollständig ausgeführt werden, auch wenn nicht die richtige Zeitzone eingestellt ist. Ich kann es jederzeit neu konfigurieren.

Ich habe es versucht

echo 5 | apt-get install -y tzdata

aber es funktioniert nicht wie erwartet.

PYA
quelle

Antworten:

168

Dies ist das Skript, das ich verwendet habe

(Aktualisierte Version mit Eingaben von @elquimista aus den Kommentaren)

#!/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

Scheint gut zu funktionieren.

Als ein Liner:

DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
PYA
quelle
43
Wenn Sie mit UTC gut DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
zurechtkommen
4
Das ist so ein Schmerz. Ich kann tzdata nicht installieren, ohne dass ich dazu aufgefordert werde, meine Standardzeitzone festzulegen (Konfigurationsaufforderung während der Paketinstallation? Wessen Idee war das?), Und ich kann die Standardzeitzone nicht festlegen, ohne zuerst tzdata zu installieren. Der Standardwert ist bereits UTC, wenn Sie EOF übergeben. Warum nicht einfach das tun und den Benutzer später aktualisieren lassen, wenn er möchte? Oder lassen Sie mich die Umgebungsvariable TZ festlegen und tzdata danach suchen lassen.
Theferrit32
2
Ein ln -fs /usr/share/zoneinfo/America/New_York /etc/localtimeSchritt zuvor DEBIAN_FRONTEND=noninteractive apt-get install -y tzdatawar der einzige Weg, wie ich dies ohne Aufforderung installieren konnte.
Fncomp
Gleiches gilt für mich. Der einzige Weg, wie dies funktioniert hat, war, die ln-Anweisung an die erste Stelle zu setzen. @PYA.
jpruiz114
75

Wenn jemand es in erreichen möchte Dockerfile, verwenden Sie wie unten.

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y install tzdata
Youngjae
quelle
2
Dies kann als einzelne Zeile erfolgen: RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ...Die DEBIAN_FRONTENDVariable muss für das installTeil festgelegt werden. Es funktioniert nicht, wenn es vor dem &&für das updateTeil eingestellt ist.
Daniel Stevens
6

Alle Gutschriften dafür sollten an @PYA gehen, aber die richtige Reihenfolge sollte sein:

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
quelle
Ich habe die ursprüngliche Antwort bearbeitet, um die Änderung der Reihenfolge widerzuspiegeln.
Sebisnow
5

Ich habe kürzlich die folgende Lösung in einer Docker-Datei gefunden, die die Cingulata FHE-Bibliothek erstellt:

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

Grundsätzlich wird die von ipapi.co bereitgestellte API verwendet, um die Zeitzoneninformationen abzurufen. Dadurch wird die Zeitzone automatisch ordnungsgemäß konfiguriert, anstatt den Dialog zu überspringen und die Standardeinstellung (UTC) zu verwenden.

Patrick
quelle
1

So habe ich es gemacht:

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

Die ersten beiden Echoanweisungen erstellen eine Textdatei, die die Auswahlnummern für das Menü "Geografisches Gebiet" und das Menü "Stadt / Region" enthält. Diese Datei wird dann verwendet, um Eingaben für den Befehl apt-get install bereitzustellen. Das tzdata-Paket wird installiert, ohne dass Benutzereingaben erforderlich sind. Die Zeitzone wird auf Afrika / Abidjan eingestellt, als ob Sie als Antwort auf die normalerweise erhaltenen Eingabeaufforderungen 1 und 1 eingegeben hätten. Dann ändere ich die Zeitzone mit den letzten beiden Befehlen auf das, was ich will.

Anstelle von 1 und 1 könnten Sie die tatsächlichen Zahlen für das gewünschte geografische Gebiet und die gewünschte Stadt / Region verwenden, aber es scheint mir, dass sich diese Zahlen ändern könnten.

Mike Maready
quelle