apt-get install tzdata非交互式

当我试着

apt-get install -y tzdata

将显示用于选择时区的命令行选项。我正在尝试在脚本中使用它来进行一些设置,如何在没有用户输入的情况下运行apt-get?

我知道我可以重新配置TZDATA

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

但在安装时,我需要它完全运行,即使它没有设置正确的时区,我总是可以重新配置它。

我试过

echo 5 | apt-get install -y tzdata

但它并没有像预期的那样工作。

107736 次浏览

This is the script I used

(Updated Version with input from @elquimista from the comments)

#!/bin/bash


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

Seems to work fine.

As one liner:

DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata

All credit for this should go to @PYA but the right order should be:

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

If someone wants to achieve it in Dockerfile, use as below.

RUN DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata

Here is how I did it:

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

The first two echo statements create a text file that contains the selection numbers for the geographic area menu and the city/region menu. This file is then used to provide input to the apt-get install command. The tzdata package will be installed without asking for any user input. The timezone will be set to Africa/Abidjan as if you entered 1 and 1 in response to the prompts you would normally get. Then I change the timezone to what I want with the last two commands.

Instead of 1 and 1, you could use the actual numbers for the geographic area and city/region that you want, but it seems to me that those numbers could change.

I have recently found the following solution in a Dockerfile building the Cingulata FHE library:

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

It basically uses the API provided by ipapi.co to retrieve the timezone information. This automatically configures the timezone properly instead of skipping the dialog and using the default (UTC).

here is what worked for me:

from ubuntu:bionic
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata


RUN unlink /etc/localtime
RUN ln -s /usr/share/zoneinfo/America/New_York /etc/localtime

To avoid playing directly with symlinks and to run configuration only once, I suggest to use debconf-set-selections command:

echo 'tzdata tzdata/Areas select Europe' | debconf-set-selections
echo 'tzdata tzdata/Zones/Europe select Paris' | debconf-set-selections
DEBIAN_FRONTEND="noninteractive" apt install -y tzdata