วิธีทำให้ apt-get ยอมรับไฟล์ config ใหม่ในการติดตั้งเดเบียนจาก Repo แบบอัตโนมัติ


21

ฉันกำลังเขียนสคริปต์สำหรับการติดตั้งแพคเกจแบบไม่ต้องใส่ข้อมูลที่อยู่ใน repo ของเรามันเป็นแพคเกจซอฟต์แวร์ที่มีหนึ่งในไฟล์กำหนดค่าที่ทำเครื่องหมายไว้ของ Debian มีตัวเลือกใดบ้างที่ฉันสามารถส่งไปยังapt-get/ aptitudeเพื่อให้ยอมรับไฟล์กำหนดค่าใหม่ได้?

โดยทั่วไปฉันต้องการapt/ aptitudeเทียบเท่า dpkg --force-confnew

ฉันต้องตอบคำถามต่อไปนี้เมื่อถูกapt-getติดตั้งด้วย Y


ไฟล์การกำหนดค่า `` / opt / application / conf / XXX.conf` '

==> File on system created by you or by a script.
==> File also in package provided by package maintainer.

What would you like to do about it ?  Your options are:
Y or I  : install the package maintainer's version
N or O  : keep your currently-installed version
  D     : show the differences between the versions
  Z     : background this process to examine the 

The default action is to keep your current version.

ข้อมูลเพิ่มเติม:

นอกจากนี้ฉันกำลังส่งsudoรหัสผ่านในไพพ์เพื่อรันคำสั่ง

echo "mysudopass"|sudo -S apt-get mypackage

นี่คือการตั้งค่าสถานะข้อผิดพลาดในการติดตั้งเมื่อการติดตั้งอยู่ที่เฟสโต้ตอบการกำหนดค่า

ฉัน
ใช้เวอร์ชันUbuntu 10.04 apt: apt 0.7.25.3

ทำไมฉันไม่สามารถใช้dpkg: Debians เหล่านี้จะถูกติดตั้งจาก Repo และฉันไม่มี Debians ในเครื่องของฉัน


คำตอบ:


22

คุณสามารถส่งdpkgพารามิเตอร์เป็นapt-getแบบนี้ได้

apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install pkgname1 pkgname2 ...

ด้วย--force-confdefถ้า config ไฟล์เก่ายังคงอยู่พวกเขาจะไม่ได้รับแทนที่ ดังนั้นคุณอาจจะไม่ใช้มันฉันแค่ทำเพื่อคนอื่น

sudoจะไม่ถามรหัสผ่านหากคุณปฏิเสธตัวเลือกการตรวจสอบสิทธิ์สำหรับผู้ใช้หรือเพิ่มNOPASSWDแท็กในรายการเฉพาะ เช่น

someuser ALL = NOPASSWD: /usr/bin/apt-get

7

คุณสามารถลองต่อไปนี้:

export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install whatever-2

แต่โปรดทราบว่าสิ่งนี้มีความหมายเช่นรหัสผ่านเริ่มต้นที่ว่างเปล่า (บางทีคุณอาจต้องการเครื่องมือการปรับใช้ / กำหนดค่าบางอย่างเช่นหุ่นเชิดพ่อครัวผ้า ... ?)

ดูsudoers (5)เกี่ยวกับวิธีการอนุญาตให้ใช้รหัสผ่านน้อยsudoสวด


3

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

สร้าง/etc/apt/apt.conf.d/71debconfไฟล์เพื่อให้มีเนื้อหาต่อไปนี้:

Dpkg::Options {
  "--force-confnew";
};

หมายเหตุ (จาก Geoff): การเปลี่ยนแปลงนี้จะเป็นการเปลี่ยนแปลงระดับโลก หากคุณมีแพ็กเกจอื่น ๆ ในระบบที่คุณต้องการรับการอัพเกรดแบบไม่ต้องใส่ข้อมูล แต่มีการกำหนดค่าด้วยตนเองนี่จะไม่ใช่โซลูชันที่เหมาะสม


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

2

นอกจากนี้ยังมีคำตอบอื่น ๆ ที่คุณอาจจะมีการตั้งค่าสภาพแวดล้อมUCF_FORCE_CONFFNEW = 1

เช่น openssh ในการยืดเดเบียนใช้ ucf (ไม่ใช่ debconf) ในopenssh-server/openssh-7.4p1/debian/openssh-server.postinstการถามเกี่ยวกับไฟล์ปรับแต่ง (คุณสามารถดูได้openssh-server.postinstโดยใช้dgetกับhttp://security.debian.org/debian-security/pool/updates/main/o/openssh/openssh_7.4p1-10+deb9u4.dsc )

เราได้มีการใช้เทคนิคทั้งหมดในหน้านี้นอกจากจะเป็นผู้ใช้เสรีนิยมของdebconf preseeding

อย่างไรก็ตามเราหยุดเพียงexport DEBIAN_FRONTEND=noninteractiveเพราะเราต้องการทราบว่าเราพลาดบางสิ่ง (นั่นอาจสำคัญ) กรณีการใช้งานของเราเป็นผู้ดำเนินการเริ่มต้นการดำเนินการ คาดว่าการอัปเกรดจะเป็นแบบไม่โต้ตอบ แต่มีผู้ให้บริการอยู่หากมีสิ่งผิดปกติและไดอะล็อกจะแสดงตัวเอง สถานการณ์ของคุณอาจแตกต่างกัน

แต่export DEBIAN_FRONTEND=noninteractiveเป็นค้อนของคุณสุภาษิต

เพียงแค่ระวัง: การตั้งค่า-o Dpkg::Options::=--force-confnewและ / หรือUCF_FORCE_CONFFNEW=1หมายความว่าไฟล์การตั้งค่าทั้งหมดจากแพ็คเกจที่ติดตั้งจะแปลงกลับเป็นไฟล์อัปสตรีม ดังนั้นในกรณีของopenssh-serverคุณ/etc/ssh/sshd_configจะถูกรีเซ็ตเป็นการตั้งค่าจากโรงงาน และเช่นPermitRootLogin=yesจะถูกลบออก แต่แน่นอนคุณไม่ได้ใช้มันดังนั้นคุณจะไม่เป็นไร! ;-)

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