apt-get install tzdata 非交互式
Posted
技术标签:
【中文标题】apt-get install tzdata 非交互式【英文标题】:apt-get install tzdata noninteractive 【发布时间】:2017-11-04 00:52:51 【问题描述】:当我尝试时
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
但它没有按预期工作。
【问题讨论】:
***.com/a/20693661/1174169,虽然被标记为“离题”,但也回答了这个问题,方法是在运行apt-get install
之前创建一个带有 debconf 设置的“预种子”文本文件。使用这种技术,我能够以非交互方式安装 tzdata,而无需任何符号链接解决方法。
更新:刚刚注意到下面@freelance 的相同答案,使用 debconf
【参考方案1】:
这是我使用的脚本
(来自 cmets 的 @elquimista 输入的更新版本)
#!/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
似乎工作正常。
作为一个班轮:
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
【讨论】:
如果您对 UTC 没问题,这里有一条:DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
这太痛苦了。如果没有提示我设置默认时区,我无法安装 tzdata(包安装期间的配置提示?这是谁的想法?),如果不先安装 tzdata,我无法设置默认时区。如果您传入 EOF,它已经默认为 UTC。为什么不这样做,然后让用户在需要时进行更新。或者让我设置 TZ 环境变量并让 tzdata 查找它。
在DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
之前执行ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
是我在没有提示的情况下安装它的唯一方法。
对我来说也是如此,唯一可行的方法是首先放置 ln 语句。 @PYA。【参考方案2】:
如果有人想在Dockerfile
中实现它,请使用如下。
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y install tzdata
【讨论】:
这可以作为一行来完成:RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ...
DEBIAN_FRONTEND
变量必须为install
部分设置。如果在update
部分的&&
之前设置它不起作用。
在单独的行上发布ARG DEBIAN_FRONTEND=noninteractive
对我有用有时,而在@DanielStevens 推荐的单行上对我有用总是。
ARG
在您有命令行参数时很有用。您希望ENV
无条件设置它。【参考方案3】:
我最近在构建Cingulata FHE 库的 Dockerfile 中找到了以下解决方案:
ln -snf /usr/share/zoneinfo/$(curl https://ipapi.co/timezone) /etc/localtime
它基本上使用 ipapi.co 提供的 API 来检索时区信息。这会自动正确配置时区,而不是跳过对话框并使用默认 (UTC)。
【讨论】:
使用ipapi.co/timezone的聪明想法,前提是要设置的时区与机器所在的位置相同。这可能不适用于例如用户在亚洲,但服务器在美国。【参考方案4】:所有功劳都应该归于@PYA,但正确的顺序应该是:
ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
export DEBIAN_FRONTEND=noninteractive
apt-get install -y tzdata
dpkg-reconfigure --frontend noninteractive tzdata
【讨论】:
我编辑了原始答案以反映订单更改。【参考方案5】:为了避免直接使用符号链接并且只运行一次配置,我建议使用debconf-set-selections
命令:
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
【讨论】:
这在当前的 ubuntu:latest 中对我不起作用 我使用下面的 Dockerfile 再次测试它似乎没问题。你的问题是什么?FROM ubuntu:latest
RUN echo 'tzdata tzdata/Areas select Europe' | debconf-set-selections
RUN echo 'tzdata tzdata/Zones/Europe select Paris' | debconf-set-selections
RUN apt update && DEBIAN_FRONTEND="noninteractive" apt install -y tzdata
我最终做了同样的事情,现在正在工作。抱歉打扰了。
这确实应该是公认的答案。【参考方案6】:
我是这样做的:
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
前两个 echo 语句创建一个文本文件,其中包含地理区域菜单和城市/地区菜单的选择编号。然后使用该文件为 apt-get install 命令提供输入。 tzdata 包将在不要求任何用户输入的情况下安装。时区将设置为 Africa/Abidjan,就像您输入 1 和 1 以响应您通常会得到的提示一样。然后我使用最后两个命令将时区更改为我想要的。
您可以使用您想要的地理区域和城市/地区的实际数字代替 1 和 1,但在我看来,这些数字可能会改变。
【讨论】:
【参考方案7】:这对我有用:
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
【讨论】:
以上是关于apt-get install tzdata 非交互式的主要内容,如果未能解决你的问题,请参考以下文章
使用apt install和使用apt-get install的区别是啥
ubuntu更换pip install,apt-get,conda install 成国内源