Làm cách nào để apt-get -y dist-nâng cấp mà không có dấu nhắc cấu hình grub?


63

Per Make apt-get (hoặc aptitude) chạy với -y nhưng không nhắc thay thế các tệp cấu hình?

Tôi đã làm như sau:

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

Trên máy:

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

Tôi vẫn nhận được một câu hỏi hỏi tôi muốn sử dụng tập tin cấu hình nào. Đây là những dòng đến trước lời nhắc:

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

sau đó:

                         ┌───────────────────────────────────────────────────────┤ 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                                                        │                              

Cách giải quyết không đạt yêu cầu: echo grub-pc giữ | sudo dpkg --set-
select

Tôi gặp vấn đề tương tự và đã thử nhiều hoán vị / cách viết khác nhau của Dpkg :: Options :: =, không có cái nào hoạt động cả. Tôi cũng đã thử thêm các dòng vào tệp /etc/apt/apt.conf.d/local như đã chỉ ra và chúng cũng không hoạt động. Đây dường như là một hồi quy trong Chính xác.
Scott Ritchie

+1 - cảm ơn bạn đã hỏi - thật dễ dàng để tìm thấy chủ đề này cho vấn đề gây phiền nhiễu này
cwd

Câu trả lời:


95

Các /etc/default/grubtập tin được tạo ra tại thời điểm cài đặt gói, điều này là cần thiết bởi vì nó tích hợp với debconf. Điều này có nghĩa là nó không thể được coi là một tệp conf dpkg và vì vậy việc xử lý tệp cấu hình của dpkg không biết về nó.

Thay vào đó, nó sử dụng ucf, một công cụ Debian tinh vi hơn để xử lý cấu hình. Thật không may, điều này không hiểu các tùy chọn dpkg, vì vậy cài đặt Dpkg::Options::="--force-confdef"sẽ không giúp ích. Mặc dù vậy, nó có cách riêng để thực hiện nâng cấp không kịp thời, thông qua các biến UCF_FORCE_CONFFNEWUCF_FORCE_CONFFOLDmôi trường.

ucfsử dụng debconfđể nhắc nhở, vì vậy, thiết lập giao diện gỡ lỗi noninteractivecũng sẽ làm im lặng tin nhắn. Nếu bạn thực sự muốn cập nhật không tương tác, bạn vẫn cần phải thực hiện việc này - các gói tùy ý có thể đặt câu hỏi gỡ lỗi (mặc dù chúng thường không được nâng cấp).

Bạn có thể thiết lập giao diện gỡ lỗi một lần bằng cách thêm DEBIAN_FRONTEND=noninteractivevào môi trường của mình hoặc có thể đặt giao diện vĩnh viễn bằng cách chạy dpkg-reconfigure debconfvà chọn giao diện không tương tác. Nếu bạn đang sử dụng lối vào không tương tác, bạn sẽ nhận được câu trả lời mặc định cho bất kỳ câu hỏi nào mà gói có thể hỏi.

Đối với ucf, câu trả lời mặc định là giữ lại tập tin hiện có.

Vì vậy, lệnh đầy đủ để thực hiện một bản cập nhật thực sự, được đảm bảo 100% - sẽ không có thông báo cập nhật.

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

: Về mặt kỹ thuật, các gói có thể sử dụng một phương thức nhắc nhở khác ngoài debconf, nhưng điều này trái với chính sách của Debian. Nếu bạn chạy trên một gói như vậy, báo lỗi.


8
Lưu ý rằng nếu bạn đang kiểm tra điều này trên shell, lệnh sudo dường như loại bỏ biến DEBIAN_FRONTEND, tức là bạn cần sudo DEBIAN_FRONTEND = nâng cấp apt-get -y không tương tác trong khi DEBIAN_FRONTEND = nâng cấp sudo apt-get -y dist
Scott Ritchie

làm việc tốt cho tôi, thankyou
cwd

Cũng lưu ý rằng đây được coi là một lỗi và họ đang phát hành hình ảnh AMI mới không có vấn đề này: bug.launchpad.net/ub Ubuntu / +bug / 1009294
Scott Ritchie

Và các AMI mới hiện đã được phát hành.
Scott Ritchie

@ScottRitchie - bình luận của bạn cũng hoạt động vì đã giúp tự động hóa việc cài đặt gói ganglia-webfrontend. Nó có một dấu nhắc để yêu cầu khởi động lại apache để xử lý tệp conf mới nhưng điều này bị phá vỡ khi cố gắng tự động hóa việc cài đặt ganglia - thêm nhận xét của bạn vào phía trước và khắc phục sự cố
Jeremy Hajek

19

từ bỏ câu trả lời của RAOF và sau khi dành vô số giờ tìm kiếm trên web để có thể thực hiện cập nhật hoàn toàn và nâng cấp trên Ubuntu 12.04, tôi đã nghĩ ra điều này nhờ vào bài đăng này ( https: // lỗi .launchpad.net / ubfox / + source / grub / + bug / 239674 / bình luận / 1 ) chỉ ra rằng grub tuân thủ UCF chứ không phải Dpkg Tùy chọn khi bạn muốn sử dụng trình đơn bảo trì gói grub thay vì bất kỳ menu cục bộ nào có thể .lst chỉnh sửa.

tôi đã để lại các tùy chọn giới hạn lực lượng Dpkg cho các gói khác không còn tồn tại.

#!/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
Đây là điều duy nhất làm việc cho tôi. Cảm ơn!
wes

1
Vì vậy, giả sử bạn cũng đang sử dụng unattended-upgradesvà đã chỉnh sửa một số cấu hình grub: làm thế nào để bạn thiết lập UCF_FORCE_CONFFNEWtrong bối cảnh đó? Hoặc bạn sẽ cần danh sách đen grub từ được cập nhật?
thom_nic


1

Tôi đã gặp rắc rối với vấn đề tương tự trên Ubuntu 18.04 vài ngày qua. Khi khởi chạy một phiên bản EC2 mới (cụ thể là ami-00035f41c82244dab), tôi chạy một kịch bản cung cấp tự động (thông qua cấu hình Dữ liệu người dùng được cung cấp tại thời điểm khởi tạo), một trong những bước đầu tiên là chạy cập nhật / nâng cấp apt.

Tập lệnh bị chặn trong khi người dùng được nhắc về các tệp GRUB đã sửa đổi - đầu tiên / etc / default / grub, sau đó /boot/grub/menu.lst. Vì điều này đang chạy ở chế độ không giám sát khi được cung cấp dưới dạng Dữ liệu người dùng, quá trình sẽ bị trì hoãn và không bao giờ phục hồi.

Từ rất nhiều Googling, có vẻ như đây là sự cố GRUB kéo dài ở dạng này hay dạng khác, với các bản sửa lỗi được áp dụng và sau đó hồi quy lại, theo như tôi có thể nói.

Cuối cùng, cách giải quyết duy nhất tôi có thể áp dụng thành công là cách hack xấu xí sau đây trong kịch bản cung cấp của tôi. Hy vọng rằng nó có thể đưa người khác ra khỏi một ràng buộc!

#!/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

Tôi chỉ có thể giả sử sự cố tôi gặp phải khá cụ thể đối với phiên bản Ubuntu 18.04 AMI hiện có và bất kỳ phiên bản cập nhật nào kết hợp các gói GRUB mới hơn có thể không phải chịu cùng một vấn đề. Cụ thể, bản chất của các thay đổi /etc/default/grubkhông có khả năng áp dụng cho các phiên bản mới hơn của AMI. Chỉ cần đặt điều này ra khỏi đó anyway.


Hãy thử chạy một lớp lót sau:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron

Ngoài ra, đây là lỗi gần đây nhất (hồi quy) nêu trên: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.