apt-get ติดตั้ง tzdata แบบไม่โต้ตอบ


100

เมื่อฉันพยายามที่จะ

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

แต่มันไม่ทำงานตามที่คาดไว้

คำตอบ:


170

นี่คือสคริปต์ที่ฉันใช้

(อัปเดตเวอร์ชันด้วยข้อมูลจาก @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

44
หากคุณสบายดีกับ UTC นี่คือซับDEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
elquimista

4
นี่คือความเจ็บปวด ฉันไม่สามารถติดตั้ง tzdata ได้หากไม่ได้แจ้งให้ฉันตั้งค่าเขตเวลาเริ่มต้น (พร้อมท์การกำหนดค่าระหว่างการติดตั้งแพ็คเกจความคิดนี้คือใคร) และฉันไม่สามารถตั้งค่าเขตเวลาเริ่มต้นโดยไม่ต้องติดตั้ง tzdata ก่อน ค่าเริ่มต้นเป็น UTC อยู่แล้วหากคุณผ่าน EOF ทำไมไม่ทำอย่างนั้นและปล่อยให้ผู้ใช้อัปเดตในภายหลังหากต้องการ หรือให้ฉันตั้งค่าตัวแปรสภาพแวดล้อม TZ และให้ tzdata ค้นหาสิ่งนั้น
theferrit32

2
การทำln -fs /usr/share/zoneinfo/America/New_York /etc/localtimeขั้นตอนก่อนหน้าDEBIAN_FRONTEND=noninteractive apt-get install -y tzdataนี้เป็นวิธีเดียวที่ฉันจะได้รับสิ่งนี้เพื่อติดตั้ง w / oa prompt
fncomp

เหมือนกันสำหรับฉันวิธีเดียวที่ได้ผลคือการวางคำสั่ง ln ก่อน @PYA.
jpruiz114

75

หากมีผู้ต้องการบรรลุให้Dockerfileใช้ดังต่อไปนี้

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y install tzdata

2
ซึ่งสามารถทำได้เป็นเส้นเดียว: ตัวแปรจะต้องตั้งค่าสำหรับส่วนหนึ่ง จะไม่ทำงานหากตั้งค่าไว้ก่อนสำหรับชิ้นส่วน RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ...DEBIAN_FRONTENDinstall&&update
Daniel Stevens

6

เครดิตทั้งหมดสำหรับสิ่งนี้ควรไปที่ @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

ฉันแก้ไขคำตอบเดิมเพื่อให้สอดคล้องกับการเปลี่ยนแปลงคำสั่งซื้อ
sebisnow

5

ฉันเพิ่งพบโซลูชันต่อไปนี้ใน Dockerfile ที่สร้างไลบรารีCingulata FHE:

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

โดยพื้นฐานแล้วจะใช้ API ที่ ipapi.co ให้มาเพื่อดึงข้อมูลเขตเวลา การดำเนินการนี้จะกำหนดค่าเขตเวลาอย่างเหมาะสมโดยอัตโนมัติแทนที่จะข้ามกล่องโต้ตอบและใช้ค่าเริ่มต้น (UTC)


1

นี่คือวิธีที่ฉันทำ:

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 จะถูกติดตั้งโดยไม่ต้องขอข้อมูลจากผู้ใช้ เขตเวลาจะถูกตั้งค่าเป็นแอฟริกา / อาบีจานราวกับว่าคุณป้อน 1 และ 1 ตามการแจ้งเตือนที่คุณจะได้รับตามปกติ จากนั้นฉันเปลี่ยนเขตเวลาเป็นสิ่งที่ฉันต้องการด้วยสองคำสั่งสุดท้าย

แทนที่จะเป็น 1 และ 1 คุณสามารถใช้ตัวเลขจริงสำหรับพื้นที่ทางภูมิศาสตร์และเมือง / ภูมิภาคที่คุณต้องการได้ แต่สำหรับฉันแล้วตัวเลขเหล่านั้นอาจเปลี่ยนแปลงได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.