Die Antwort von swill ist nicht, wie es richtig gemacht wird. Wenn Sie eine unbeaufsichtigte / skriptbasierte dpkg-Konfiguration von Paketen wünschen, möchten Sie den Debconf-Voreinstellungsmechanismus verwenden.
In Ihrem Fall bedeutet dies, dass Sie Folgendes tun müssen:
Legen Sie die folgenden Umgebungsvariablen fest, um zu vermeiden, dass debconf versucht, dem Benutzer Fragen zu stellen:
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
dann preseed debconf mit der folgenden preseed.txt-Datei (oder anderen gewünschten Einstellungen):
tzdata tzdata/Areas select Europe
tzdata tzdata/Zones/Europe select Berlin
Sie legen die obige Voreinstellungsdatei fest, indem Sie Folgendes ausführen:
debconf-set-selections /your/preseed.txt
Sie können jetzt entweder tzdata (falls noch nicht installiert) über installieren apt
oder ausführen dpkg-reconfigure
. Am Ende werden tzdata gemäß den Angaben in Ihrer debconf-Voreinstellungsdatei eingerichtet.
Denken Sie daran, dass Sie mit debconf preseeding viel mehr automatisieren können. Zum Beispiel habe ich in meinen Voreinstellungen immer Folgendes festgelegt:
locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8
locales locales/default_environment_locale select en_US.UTF-8
Sie können jederzeit die Debconf-Einstellungen Ihres aktuellen Systems überprüfen, indem Sie ausführen debconf-get-selections
. Die Ausgabe sollte Ihnen eine Vorstellung davon geben, wie viel von der Systemkonfiguration Sie mithilfe der Debconf-Voreinstellung automatisieren können.
dpkg-reconfigure
mit-f noninteractive
sowieso ... (Ubuntu 12.04 LTS hier). Ansonsten haben Ihre Anweisungen super funktioniert!/etc/{localtime,timezone}
wenn tzdata bereits installiert ist. Siehe stackoverflow.com/a/39275359/161114 .$ ssh node 'export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true;echo -e "tzdata tzdata/Areas select Europe\ntzdata tzdata/Zones/Europe select Amsterdam" > /tmp/tz ; sudo debconf-set-selections /tmp/tz; sudo rm /etc/localtime /etc/timezone; sudo dpkg-reconfigure -f non-interactive tzdata'
/tmp/tz
ist ein Sicherheitsproblem. Zu dem Zeitpunkt, an dem Sie von/tmp/tz
anderen gelesen haben, könnte ein anderer Wert darauf geschrieben sein oder die Datei war bereits vorhanden (was Sie nicht überprüft haben) und Sie überschreiben sie. Verwenden Siemktemp
diese Option , um all diese Probleme zu vermeiden. Außerdem vergessen Sie, Ihre temporäre Datei am Ende zu entfernen. Schließlich ist Ihre Verwendung von-e
als Argument fürecho
nicht portierbar und Sie solltenprintf
stattdessen für die Zeilenumbrüche verwenden.In 16.04 gibt es einen Fehler ( https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806 , der zum Zeitpunkt des Schreibens dieser Antwort nicht behoben wurde), der dazu führt, dass der Inhalt von
/etc/timezone
mit dem alten überschrieben wird Wert beim Ausführendpkg-reconfigure -f noninteractive tzdata
. Das Update lautet wie folgt (aus dem obigen Fehlerbericht):Der Inhalt von muss nicht manuell geändert werden
/etc/timezone
. Dies funktionierte für mich unter Ubuntu 16.04.2 LTS.quelle
ln -fs...
) wird vielmehr in Kommentar 9 zu diesem Ticket beschrieben . Außerdem ist diese Frage für SO jetzt nicht mehr zum Thema. Bitte ermutigen Sie OT-Fragen nicht, indem Sie sie beantworten :)Tun Sie dies in einem
Dockerfile
:In meinen Experimenten habe ich festgestellt, dass die Dateien
/etc
unbedingt entfernt werden müssen.quelle
ENV DEBIAN_FRONTEND...
da durch die VerwendungENV
die Variable in der Umgebung erhalten bleibt, wenn der Container ebenfalls ausgeführt wird ( eine Warnung hierzu finden Sie unter docs.docker.com/engine/reference/builder/#env ). Wenn Sie sich umschauen, sehen Sie, dassARG
dies in dieser Situation bevorzugt werden sollte (z. B.ARG DEBIAN_FRONTEND...
), da der Wert der Variablen nur während der Erstellung des Containers wirksam ist.Advancing Josch ‚s Antwort; Setzen Sie die Debconf-Datenbankwerte und entfernen Sie sie,
/etc/{localtime,timezone}
bevor Sie Folgendes ausführendpkg-reconfigure
: -Es ist bekannt, dass diese Methode funktioniert bei:
quelle
printf 'tzdata tzdata/Areas select Europe\ntzdata tzdata/Zones/Europe select Berlin\n' | sudo dpkg-set-selections
/etc
denendpkg-reconfigure
sowieso neu geschrieben werden soll , explizit entfernen müssen.Hier ist meine
Dockerfile
für die neueste Ubuntu 18.04 LTS-Distribution, angepasst aus der Antwort von @NilsBallmann. Ich habe auch die temporäre Dateierstellung entfernt und die Paketinstallation in eine einzige Ebene komprimiert:quelle
In Ubuntu 18.04 mit systemd verwende ich:
quelle