grub 설정 프롬프트없이 apt-get -y dist-upgrade를 어떻게합니까?


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 | 첫째는 apt-get 명령 앞에 sudo는 때 dpkg --set-선택
fratrik

나는이 같은 문제를 겪고 Dpkg :: Options :: =의 많은 다른 순열 / 철자를 시도했지만 그중 아무것도 작동하지 않았습니다. 또한 표시된대로 /etc/apt/apt.conf.d/local 파일에 행을 추가하려고 시도했지만 작동하지 않았습니다. 이것은 Precise의 회귀 인 것 같습니다.
스콧 리치

+1-문의 해 주셔서 감사합니다.이 성가신 문제에 대해이 글을 찾는 것이 놀랍도록 쉽습니다.
cwd

답변:


94

/etc/default/grub파일이 어떤 debconf와 통합되어 있기 때문에 필요한 패키지 설치 시간에 생성됩니다. 이는 dpkg conf 파일로 취급 될 수 없으므로 dpkg의 구성 파일 처리는이 파일에 대해 알지 못함을 의미합니다.

대신, ucf보다 정교한 데비안 도구 인을 사용하여 구성을 처리합니다. 불행히도 이것은 dpkg 옵션을 이해하지 못하므로 설정 Dpkg::Options::="--force-confdef"이 도움이되지 않습니다. 그것은을 통해,하지만, 어떤 프롬프트 업그레이드를하지 않는 것 자체 방법을 가지고 UCF_FORCE_CONFFNEWUCF_FORCE_CONFFOLD환경 변수.

ucf사용 debconf하라는 그렇게하기 위해 어떤 debconf 인터페이스를 설정 noninteractive또한 메시지를 침묵 것입니다. 비 대화식 업데이트를 정말로 원한다면 어쨌든이 작업을 수행해야합니다. 임의의 패키지는 debconf 질문을 할 수 있습니다 (일반적으로 업그레이드 중에는 그렇지 않지만).

DEBIAN_FRONTEND=noninteractive환경 에 추가하여 debconf 인터페이스를 일회용으로 설정하거나 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가 필요합니다.
Scott Ritchie

감사합니다
cwd

또한이 버그로 간주되고 있습니다 그리고 그들은이 문제가 없어야합니다 새로운 AMI 이미지를 공개하고 있습니다 : bugs.launchpad.net/ubuntu/+bug/1009294
스콧 리치

그리고 새로운 AMI가 릴리스되었습니다.
Scott Ritchie

@ ScottRitchie-귀하의 의견은 ganglia-webfrontend 패키지 설치를 자동화하는 데 도움이됩니다. 그것은 새로운 conf의 파일을 처리하는 아파치의 재부팅을 요청하는 프롬프트가 있지만 신경의 설치 자동화하려고 할 때이 중단 - 전면에 당신의 코멘트를 추가하고 문제 해결
제레미 HAJEK을

19

RAOF의 대답에서 벗어나고 Ubuntu 12.04에서 완전히 수동 업데이트 및 dist-upgrade를 수행 할 수 있도록 웹에서 수많은 시간을 보낸 후이 게시물 ( https : // bugs) 덕분 에이 문제가 발생했습니다 . .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1 )는 패키지 관리자 인 grub menu.lst를 가능한 로컬 메뉴 대신 사용하려는 경우 grub이 Dpkg 옵션이 아닌 UCF를 준수한다고 지적합니다. .lst 편집.

그 럽지 않은 다른 패키지에 대해서는 Dpkg 강제 확인 옵션을 그대로 두었습니다.

#!/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
이것이 나를 위해 일한 유일한 것입니다. 감사!
wes

1
따라서 unattended-upgradesgrub 설정 도 사용 중이며 일부 구성을 편집 했다고 가정 해 봅시다 . UCF_FORCE_CONFFNEW해당 컨텍스트에서 어떻게 설정 합니까? 아니면 grub이 업데이트되지 않도록 차단해야합니까?
thom_nic


1

지난 며칠 동안 우분투 18.04에서 동일한 문제를 해결했습니다. 새 EC2 인스턴스 (특히 ami-00035f41c82244dab)를 시작할 때 첫 번째 단계 중 하나는 적절한 업데이트 / 업그레이드를 실행하는 자동화 된 프로비저닝 스크립트 (초기화시 제공된 사용자 데이터 구성을 통해)를 실행하는 것입니다.

사용자에게 수정 된 GRUB 파일에 대한 메시지가 표시되면 (먼저 / etc / default / grub, /boot/grub/menu.lst) 스크립트가 차단됩니다. 사용자 데이터로 제공 될 때 무인 모드로 실행되므로 프로세스가 중단되고 복구되지 않습니다.

많은 인터넷 검색에서 이것은 일종의 장기적인 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.