ฉันจะ apt-get -y dist-upgrade โดยไม่แจ้งพรอมต์การตั้งค่า grub ได้อย่างไร?


63

ต่อให้ apt-get (หรือความถนัด) ทำงานด้วย -y แต่ไม่แจ้งให้สำหรับการเปลี่ยนการตั้งค่าไฟล์?

ฉันทำต่อไปนี้:

ec2run ami-3c994355 --region us-east-1 -n 1 -t m1.large -z us-east-1d

บนเครื่อง:

sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

ฉันยังได้รับพรอมต์ถามฉันว่าฉันต้องการใช้ไฟล์ปรับแต่งแบบไหน นี่คือบรรทัดที่มาก่อนพรอมต์:

Setting up grub-pc (1.99-21ubuntu3.1) ...

แล้ว:

                         ┌───────────────────────────────────────────────────────┤ Configuring grub-pc ├───────────────────────────────────────────────────────┐                              
                         │ A new version of configuration file /etc/default/grub is available, but the version installed currently has been locally modified.  │                              
                         │                                                                                                                                     │                              
                         │ What do you want to do about modified configuration file grub?                                                                      │                              
                         │                                                                                                                                     │                              
                         │                                     install the package maintainer's version                                                        │                              

วิธีแก้ปัญหาที่ไม่น่าพอใจ: echo grub-pc hold sudo dpkg
set

ฉันได้รับปัญหาเดียวกันนี้และได้ลองเรียงสับเปลี่ยน / สะกดคำที่แตกต่างกันมากของ Dpkg :: ตัวเลือก :: =, ซึ่งไม่ได้ผลเลย ฉันยังพยายามเพิ่มบรรทัดลงในไฟล์ /etc/apt/apt.conf.d/local ตามที่ระบุและพวกเขาก็ไม่ทำงานเช่นกัน นี่ดูเหมือนจะเป็นการถดถอยที่แม่นยำ
Scott Ritchie

+1 - ขอบคุณที่ถาม - เป็นเรื่องง่ายที่จะค้นพบกระทู้นี้กับปัญหาที่น่ารำคาญนี้
cwd

คำตอบ:


94

/etc/default/grubไฟล์จะถูกสร้างขึ้นในแพคเกจติดตั้งเวลาซึ่งเป็นสิ่งจำเป็นเพราะมันทำงานร่วมกับ debconf ซึ่งหมายความว่าไม่สามารถถือเป็นไฟล์ dpkg conf และดังนั้นการจัดการไฟล์การกำหนดค่าของ dpkg จึงไม่ทราบ

แต่มันใช้ucfเป็นเครื่องมือ Debian ที่ซับซ้อนกว่าสำหรับการจัดการการกำหนดค่า น่าเสียดายที่นี่ไม่เข้าใจตัวเลือก dpkg ดังนั้นการตั้งค่าDpkg::Options::="--force-confdef"จะไม่ช่วย มันมีวิธีการของตัวเองในการทำการอัพเกรดแบบไม่พร้อมท์แม้ว่าผ่านตัวแปรUCF_FORCE_CONFFNEWและUCF_FORCE_CONFFOLDสภาพแวดล้อม

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

คุณสามารถตั้งค่าอินเตอร์เฟซ debconf เป็นแบบครั้งเดียวโดยการเพิ่มDEBIAN_FRONTEND=noninteractiveสภาพแวดล้อมของคุณหรือสามารถตั้งค่าอย่างถาวรโดยการเรียกใช้dpkg-reconfigure debconfและเลือกส่วนหน้าแบบไม่โต้ตอบ หากคุณใช้ส่วนหน้าแบบไม่โต้ตอบคุณจะได้รับคำตอบเริ่มต้นสำหรับคำถามใด ๆ ที่แพ็คเกจอาจถาม

สำหรับucfคำตอบเริ่มต้นคือ "เก็บไฟล์ที่มีอยู่"

ดังนั้นคำสั่งเต็มรูปแบบที่จะทำจริงรับประกัน 100% และไม่มีการแจ้งเตือนการปรับปรุงจะ

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

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


8
โปรดทราบว่าหากคุณกำลังทดสอบสิ่งนี้บนเชลล์คำสั่ง sudo ดูเหมือนว่าจะลบตัวแปร DEBIAN_FRONTEND นั่นคือคุณต้องใช้ sudo DEBIAN_FRONTEND = noninteractive apt-get -y dist-upgrade ในขณะที่ DEBIAN_FRONTEND = noninteractive sudo apt-get -y dist-upgrade
Scott Ritchie

ทำงานได้ดีสำหรับฉันขอบคุณ
CWD

โปรดทราบว่านี่ถือเป็นข้อผิดพลาดและพวกเขากำลังปล่อยภาพ AMI ใหม่ที่ไม่ควรมีปัญหานี้: bugs.launchpad.net/ubuntu/+bug/1009294
Scott Ritchie

และตอนนี้ AMIs ใหม่ก็เปิดตัวแล้ว
Scott Ritchie

@ScottRitchie - ความคิดเห็นของคุณทำงานได้ดีเช่นกันเพื่อช่วยในการติดตั้งแพ็กเกจ ganglia-webfrontend โดยอัตโนมัติ มันมีพรอมต์ให้ขอรีบูต apache เพื่อประมวลผลไฟล์ conf ใหม่ แต่ตัวแบ่งนี้เมื่อพยายามทำการติดตั้ง ganglia โดยอัตโนมัติ - เพิ่มความคิดเห็นของคุณไปที่ด้านหน้าและแก้ไขปัญหา
Jeremy Hajek

19

ออกไปจากคำตอบของ RAOF และหลังจากใช้เวลานับไม่ถ้วนในการค้นหาบนเว็บเพื่อที่จะสามารถทำการอัปเดตและอัพเกรด dist-hands-on บน Ubuntu 12.04 ได้อย่างสมบูรณ์ฉันมาด้วยสิ่งนี้เนื่องจากข้อเท็จจริงที่โพสต์นี้ ( https: // ข้อบกพร่อง .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1 ) ชี้ให้เห็นว่าด้วงนั้นปฏิบัติตาม UCF และไม่ใช่ตัวเลือก Dpkg เมื่อคุณต้องการใช้แพ็คเกจบำรุงรักษา Grub menu.lst แทนเมนูท้องถิ่นใด ๆ ที่เป็นไปได้ .lst แก้ไข

ฉันออกจากตัวเลือก Dpkg force-confnew ในแพ็คเกจอื่น ๆ ที่ไม่ด้วง

#!/bin/bash

unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /boot/grub/menu.lst

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

1
นี่เป็นสิ่งเดียวที่ทำงานให้ฉัน ขอบคุณ!
เวสสตรีท

1
สมมติว่าคุณกำลังใช้unattended-upgradesและแก้ไขการตั้งค่าด้วงบางอย่าง: คุณจะตั้งค่าอย่างไรUCF_FORCE_CONFFNEWในบริบทนั้น หรือคุณต้องการบัญชีด้วงเพื่อไม่ให้อัพเดท
thom_nic


1

ฉันกำลังโต้เถียงกับปัญหาเดียวกันบน Ubuntu 18.04 เมื่อไม่กี่วันที่ผ่านมา ในการเปิดตัวอินสแตนซ์ EC2 ใหม่ (โดยเฉพาะ ami-00035f41c82244dab) ฉันเรียกใช้สคริปต์การจัดเตรียมอัตโนมัติ (ผ่านการกำหนดค่าข้อมูลผู้ใช้ที่ให้มาในช่วงเวลาของการเริ่มต้น) ซึ่งเป็นหนึ่งในขั้นตอนแรกของการรันอัปเดต / อัปเกรด apt

สคริปต์จะถูกบล็อกในขณะที่ผู้ใช้ได้รับแจ้งเกี่ยวกับไฟล์ GRUB ที่แก้ไข - ครั้งแรก / etc / default / grub จากนั้น /boot/grub/menu.lst เนื่องจากสิ่งนี้กำลังทำงานในโหมดที่ไม่ต้องใส่ข้อมูลเมื่อให้เป็นข้อมูลผู้ใช้กระบวนการจะหยุดและไม่สามารถกู้คืนได้

จาก Googling มากมายดูเหมือนว่านี่เป็นปัญหา GRUB ที่ดำเนินมาเป็นเวลานานในรูปแบบเดียวหรืออีกรูปแบบหนึ่งโดยมีการแก้ไขที่ใช้แล้วจากนั้นค่อยถอยหลังอีกครั้งเท่าที่ฉันจะบอกได้

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

#!/bin/bash 

apt update

### Workaround: Pre-update /etc/default/grub and remove /boot/grub/menu.lst to avoid 'file changed' prompts from blocking completion of unattended update process
patch /etc/default/grub <<'EOF'
10c10
< GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0"
---
> GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 nvme.io_timeout=4294967295"
19c19
< GRUB_TERMINAL=console
---
> #GRUB_TERMINAL=console
EOF
rm /boot/grub/menu.lst

apt upgrade -y

### Workaround part 2: re-generate /boot/grub/menu.lst
/usr/sbin/update-grub-legacy-ec2 -y

ฉันสามารถสันนิษฐานได้ว่าปัญหาที่ฉันพบนั้นค่อนข้างเฉพาะกับ Ubuntu 18.04 รุ่น AMI ที่มีอยู่ในปัจจุบันและรุ่นที่ปรับปรุงใด ๆ ที่รวมกับแพคเกจ GRUB ที่ใหม่กว่าอาจไม่อยู่ภายใต้ปัญหาเดียวกัน โดยเฉพาะอย่างยิ่งลักษณะของการเปลี่ยนแปลงที่/etc/default/grubไม่น่าจะมีผลบังคับใช้กับ AMI รุ่นที่ใหม่กว่า แค่เอามันออกไป


ลองเรียกใช้หนึ่งซับต่อไปนี้:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron

และนี่คือข้อผิดพลาดล่าสุด (การถดถอย) ที่กล่าวถึงข้างต้น: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.