การปรับรุ่น Debian ที่ไม่ใช่แบบโต้ตอบ 100%


38

มีวิธีการapt-get dist-upgradeในเดเบียนที่ไม่เพียง แต่ตอบ "ใช่" สำหรับคำถามทั้งหมดที่ถามโดยอัตโนมัติ แต่ยังใช้ค่าเริ่มต้นที่เหมาะสมเป็นคำตอบสำหรับคำถามที่ซับซ้อนพอที่จะให้กล่องโต้ตอบแบบโต้ตอบต่างๆปรากฏขึ้นหรือไม่ ฉันกำลังคิดเกี่ยวกับสิ่งสำคัญที่แสดงขึ้นเมื่อคุณอัปเกรดlibc6และตัวเลือกภาพเคอร์เนล

เป้าหมายคือเพื่อให้สามารถเริ่มต้นจากระยะไกลที่มีขนาดใหญ่dist-upgrade- แม้สำหรับเครื่องจักรที่อยู่เบื้องหลังอย่างรุนแรง - และไม่จำเป็นต้องดูแลมันเลยเว้นแต่จะมีบางอย่างผิดปกติอย่างร้ายแรง

แน่นอนว่าเป็นไปได้?

ขอบคุณล่วงหน้า!


สำหรับผู้ที่ต้องการอัพเกรดเท่านั้น (แทนที่จะเป็นรุ่นอัพเกรด) บน Ubuntu ให้ลองใช้แพ็คเกจการอัพเกรดแบบอัตโนมัติ
Jo Liss

คำตอบ:


42

หากคุณตั้งค่าDEBIAN_FRONTEND=noninteractive(เพื่อไม่ให้ปรากฏข้อความเตือน debconf) และเพิ่มforce-confoldและforce-confdefไปยัง/etc/dpkg/dpkg.cfgไฟล์ของคุณคุณควรมีประสบการณ์การติดตั้งแพคเกจแบบไม่โต้ตอบ แพคเกจใด ๆ ที่ยังคงพร้อมท์ให้คุณทราบข้อมูลมีข้อผิดพลาดที่สำคัญในการปล่อย (และฉันบอกว่าเป็นทั้งขี้ยาอัตโนมัติและในฐานะนักพัฒนา Debian)


สิ่งนี้ไม่ได้ผลสำหรับฉัน ถูกเปิดออกโดยapt-listchanges less
magnetar

@magnetar: นั่นเป็นปัญหาของ apt-listchanges ไม่ใช่ apt ถอนการติดตั้ง apt-listchanges หรือกำหนดค่าอย่างเหมาะสม
womble

1
ลอง: env APT_LISTCHANGES_FRONTEND = ไม่มี apt-get dist-upgrade -u -y
H.

21

Florian Lohoff โพสต์วิธีรับสิ่งที่ womble แนะนำไว้ในคำสั่งเดียว:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

แน่นอนคุณอาจใช้-o Dpkg::Options::="--force-confnew --force-confdef"(ค้นหาหน้าdpkgเพื่อหา confnew) ฉันไม่แน่ใจในกรณีนี้จะสร้างความแตกต่าง ฉันเองต้องการการอัพเกรดแบบไม่โต้ตอบเพื่อให้ภาพวานิลลาทันสมัยซึ่งในกรณีนี้ฉันคิดเสมอว่าการเลือกไฟล์ปรับแต่งใหม่ (โดยไม่มี--force-confdef) เป็นสิ่งที่สมเหตุสมผล


W: --force-yes is deprecated, use one of the options starting with --allow instead.
Alex

3

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

ต่อไปนี้เป็นสคริปต์ที่จะทำงานตามคำแนะนำการอัพเกรดหมายเหตุเดเบียน 8 (ส่วนใหญ่) พร้อมกับแฟล็กและตัวแปรสภาพแวดล้อมที่จะทำให้ไม่ต้องใส่ข้อมูล ( echos ใช้สำหรับการดีบั๊กและสามารถลบออกได้ - แต่ฉันขอแนะนำให้เก็บไว้ดังนั้นหากสคริปต์ติดคุณจะรู้ว่าอยู่ที่ไหน)

#!/bin/bash

apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
apt-get --force-yes clean &&

echo "executing update" &&
apt-get update &&

echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&

echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade

1
หมายเหตุ: "--force-yes บังคับใช่นี่เป็นตัวเลือกที่อันตรายที่จะทำให้ apt ดำเนินการต่อโดยไม่ได้รับแจ้งหากทำสิ่งที่อาจเป็นอันตรายไม่ควรใช้ยกเว้นในสถานการณ์พิเศษการใช้ force-yes อาจทำลายได้ ระบบของคุณรายการการกำหนดค่า: APT :: Get :: force-yes สิ่งนี้เลิกใช้แล้วและแทนที่ด้วย --allow-downgrades, --allow-remove-essential, - อนุญาตให้เปลี่ยนแปลงแพคเกจที่จัดเก็บใน 1.1 "
อเล็กซ์

1

> = Apt 1.1

หากคุณกำลังใช้ Apt 1.1 หรือสูงกว่า--force-yesได้รับการคัดค้านเพื่อให้คุณได้ใช้ตัวเลือกที่เริ่มต้นด้วย--allowแทนเช่น--allow-downgrades, ,--allow-remove-essential--allow-change-held-packages

ดังนั้นคำสั่งคือ:

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
  dist-upgrade

หมายเหตุ: ใช้--force-confoldเพื่อเก็บเก่าและใช้--force-confnewการตั้งค่าใหม่

ที่มา: CFE-2360: Make apt_get รุ่นโมดูลแพคเกจความตระหนัก

ที่เกี่ยวข้อง:


-4

จากapt-get(8)หน้าคน:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

สำหรับการอ้างอิง-yตัวเลือกใช้งานได้yum(8)เช่นกัน


5
ฉันรู้เกี่ยวกับสิ่งนั้น ฉันใช้การตั้งค่าสถานะนั้นและจะตอบว่า 'ใช่' สำหรับคำถาม APT Y / N มาตรฐานเกี่ยวกับการเขียนทับการกำหนดค่าที่มีอยู่ ฯลฯ ฯลฯ ซึ่งไม่ได้เป็นคำถามที่ฉันอ้างถึง เมื่อฉันทำ apt-get -y dist-upgrade ก็ยังให้ฉัน 'โต้ตอบ' แจ้งให้สิ่งที่มันพิจารณาสิ่งที่ตั๋วใหญ่เช่นการเปลี่ยนแปลงที่สำคัญการเปลี่ยนคีย์แมปเริ่มบริการที่เกี่ยวข้องกับ libc6 ฯลฯ ฉันกำลังมองหาธงเพิ่มเติมเพื่อ ปิดที่เช่นกัน
Alex Balashov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.