การติดตั้ง Java อัตโนมัติ (พร้อมตัวเลือกเงียบ)


104

ฉันพยายามติดตั้ง Java ผ่าน apt-get

ฉันพบPPA ของตัวติดตั้ง Javaนี้ แต่เมื่อฉันเพิ่มที่เก็บอัปเดตแล้วออกคำสั่ง apt-get install -y ตัวติดตั้งสำหรับ java จะเข้าแทนที่และจะปรากฏตัวเลือกการกำหนดค่า

ฉันหวังว่าจะสามารถติดตั้งได้โดยไม่ต้องมีการขัดจังหวะหรือกดแป้นใด ๆ ตั้งแต่ฉันสร้างและปรับใช้สคริปต์สำหรับอินสแตนซ์ EC2 ของฉันซึ่งจะติดตั้งแพคเกจที่ติดแท็กทั้งหมดที่ต้องการโดยอัตโนมัติ

มีตัวเลือกอื่น ๆ อีกไหม?

คำตอบ:


147

หาก OpenJDK / OpenJRE ทำงานได้ดีสำหรับคุณฉันแนะนำให้ใช้แพ็คเกจนั้นแทนตามที่ @SAM แนะนำ อย่างไรก็ตามซอฟต์แวร์บางตัวจำเป็นต้องใช้ JDK / JRE ของ Oracle จริงๆ คำตอบนี้เป็นวิธีการเงียบคำถามใบอนุญาตกับแพ็คเกจ Oracle จาก PPA

ก่อนอื่นมารู้จักคำถามที่ถามกันว่าเป็นคุณลักษณะของแพ็คเกจที่สร้างโดยนักพัฒนา

oracle-java7-installer (7u7-0~webupd8~4) maverick; urgency=medium

  * removed cookie file use or else the PPA stays disabled
  * request the user to accept the Oracle license before installation
 -- Alin Andrei <webupd8@gmail.com>   Tue, 04 Sep 2012 14:18:29 +0200

ตามที่ @Nate ระบุไว้ในคำตอบของเขาควรมีตัวเลือกแบบไม่มีเสียง และก็มี ทำสิ่งนี้ก่อนติดตั้ง:

$ echo debconf shared/accepted-oracle-license-v1-1 select true | \
  sudo debconf-set-selections
$ echo debconf shared/accepted-oracle-license-v1-1 seen true | \
  sudo debconf-set-selections

สิ่งนี้ตั้งค่าของคีย์ debconf เป็นจริง แต่ยังทำเครื่องหมายว่าผู้ใช้เห็นเช่นกัน ตอนนี้คำถามนี้ไม่ควรปรากฏขึ้น!

ฉันพบสิ่งนี้ได้อย่างไร

ในที่มาของแพ็คเกจฉันติดตามสิ่งนี้ลงในoracle-java7-installer.preinstไฟล์:

license=oracle-license-v1-1

# snip

db_get shared/accepted-$license
if [ "$RET" = "true" ]; then
    echo "$license license has already been accepted" >&2
    exit 0
fi

เห็นได้ชัดว่ามันใช้ค่าของ debconf สำหรับคีย์shared/accepted-oracle-license-v1-1เพื่อตรวจสอบว่าผู้ใช้ได้ยอมรับใบอนุญาตแล้ว หากเป็นเช่นนั้นสคริปต์จะออกจากระบบอย่างสุภาพและอนุญาตให้การติดตั้งดำเนินการต่อโดยไม่ถามคำถามคุณ ตอนนี้เราควรบอก debconf ว่าคุณยอมรับ Oracle License 1.1 แล้ว

โปรดดูdebconf-set-selectionsรายละเอียดเพิ่มเติมในmanpage แต่นี่เป็นตัวอย่างสำหรับปัญหาของคุณและใช้งานได้กับแพ็คเกจอื่น ๆ คุณมีปุ่มอื่นในระบบของคุณในฐานข้อมูลของ debconf อย่างไร ติดตั้งdebconf-utilsและทำ

$ sudo debconf-get-selections

จากนั้น grep สำหรับคีย์เพิ่มเติมที่คุณต้องตั้งค่าในการติดตั้งอัตโนมัติของคุณ นี่เป็นวิธีที่มีความยืดหยุ่นมากกว่าการใช้-yด้วยapt-getเนื่องจากจะให้โอกาสคุณในการตั้งค่าอื่นนอกเหนือจากการตั้งค่าเริ่มต้นในเวลาการติดตั้ง


9
คำตอบที่ยอดเยี่ยม :)
Layke

3
คำตอบที่ยอดเยี่ยม ทำงานจากเชลล์สคริปต์ด้วย
Derek


ไม่จำเป็นต้องใช้เครื่องหมายคำพูดสำหรับเสียงสะท้อนของคำสั่งการยอมรับใบอนุญาต?
David

1
@ David ไม่ได้สำหรับกรณีนี้ หากคุณต้องการเพิ่มผลลัพธ์ของechoจะเหมือนกันทุกประการ
gertvdijk

55

ติดตั้ง Java 6/7/8/9 แบบเงียบโดยใช้PPA ของทีม WebUpd8

sudo apt-get install -y python-software-properties debconf-utils
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
sudo apt-get install -y oracle-java8-installer

@gertvdijk คำตอบไม่ได้ทำงานกับฉันใน Ubuntu 14.04 & 14.10


1
ใช้งานได้ดีในวันที่ 16.04
pneumatics

สิ่งนี้ไม่ทำงานอีกต่อไป
Ahmed Mostafa

@AhmedMostafa คุณช่วยให้คนอื่นรู้ว่าคุณลองทำอะไร
Rahul Thakur

1
ใช้งานได้ดีoracle-java9-installerเช่นกัน
KohányiRóbert

1
งานนี้สมบูรณ์แบบด้วยรูปภาพที่ใช้ google / cloud-sdk
Xin Meng

13

Support @gertvdijk คำตอบคือคำอธิบายในบล็อกโพสต์ดั้งเดิมเกี่ยวกับ PPA ของ webupd8

อัปเดต 2:โปรแกรมติดตั้งกำหนดให้คุณยอมรับใบอนุญาต Oracle ก่อนการติดตั้งจะเริ่มขึ้น ต้องใช้เพียงครั้งเดียว หากด้วยเหตุผลบางอย่างที่คุณต้องการให้การติดตั้งเป็นแบบอัตโนมัติคุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อยอมรับใบอนุญาต Oracle โดยอัตโนมัติ:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | \
sudo /usr/bin/debconf-set-selections

นั่นคือสายของเวทมนตร์ที่ฉันต้องการสำหรับการติดตั้งแบบเงียบของ Oracle Java - ขอบคุณ @Hosam
Phantomwhale

คุณยินดีต้อนรับ @Phantomwhale
Hosam Aly

ฉันเข้าใจผิดหรือว่ามีอักขระ "` "ขาดหายไป / พิเศษในคำตอบของคุณ?
David

11

ฉันตรวจสอบประโยคต่อไปนี้แล้วสำหรับฉันโดยใช้ docker ubuntu16.04LTS

RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:webupd8team/java && apt-get update

RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 seen true" | debconf-set-selections

RUN apt-get install -y oracle-java8-installer

ฉันลองแล้วมันใช้งานไม่ได้
อาเหม็ด Mostafa

ได้รับการยืนยันว่าทำงานกับฉันใน docker-ce 18.05 บน Kubuntu 18.04: D ติดตั้งในi386/ubuntu:18.04คอนเทนเนอร์
BeepDog

2

สำหรับการติดตั้ง java แบบไม่มีการโต้ตอบคุณสามารถลอง open-jdk:

sudo apt-get install -y openjdk-7-jdk

ลองใช้วิธีนี้สำหรับแพ็คเกจ / ส่วนขยาย open-jdk เพิ่มเติม ...

sudo apt-cache search openjdk


วิธีนี้ใช้ได้ผลดีมาก sudo apt-get install -y openjdk-7-jdk
Layke


0

นี่เป็นข้อความที่ตัดตอนมาจาก Dockerfile ฉันเคยสร้างภาพนักเทียบท่าที่ใช้เดเบียนสำเร็จแล้ว:

( อ้างอิง )

RUN apt-get update \
    && apt-get upgrade \
    && apt-get install -y gnupg

RUN echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee /etc/apt/sources.list.d/webupd8team-java.list
RUN echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
RUN apt-get update
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
RUN apt-get install -y oracle-java8-installer \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && R CMD javareconf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.