Packer로 패키징 할 때 Ubuntu 16.04에서 "apt-get upgrade -y"를 실행할 때 대화식 대화 상자를 피하는 방법은 무엇입니까?


27

내가 사용하고 패커를 우분투 16.04 이미지를 기반으로 AWS AMI를 만들 수 있습니다. 처음에는 업그레이드를하고 있습니다.

sudo apt-get update
sudo apt-get upgrade -y

프로 비져 섹션의 관련 부분은 다음과 같습니다.

"provisioners": [
  {
    "type": "shell",
    "inline": [
      "sudo apt-get update",
      "sudo apt-get upgrade -y"
    ]
  }
]

그러나 대화식 대화 상자가 나타나면 자동화가 중단됩니다.

amazon-ebs: Found kernel: /boot/vmlinuz-4.4.0-72-generic
amazon-ebs: A new version of /boot/grub/menu.lst is available, but the version installed
amazon-ebs: currently has been locally modified.
amazon-ebs:
amazon-ebs: 1. install the package maintainer's version
amazon-ebs: 2. keep the local version currently installed
amazon-ebs: 3. show the differences between the versions
amazon-ebs: 4. show a side-by-side difference between the versions
amazon-ebs: 5. show a 3-way difference between available versions
amazon-ebs: 6. do a 3-way merge between available versions (experimental)
amazon-ebs: 7. start a new shell to examine the situation

나는 또한 export DEBIAN_FRONTEND=noninteractive( 이 답변 에서 권장 되는대로 ) 이전 에 설정하려고했습니다 . 불행히도 아무런 차이가 없습니다.

질문 :

  • 반복 대화 상자에서 벗어날 수있는 방법이 있습니까 (옵션 1을 선택하는 것이 좋습니다)?
  • 대신 업그레이드를 피하고 AMI가 최신 상태이며 중요한 보안 패치를 포함하고 있다고 신뢰하는 것이 더 낫습니까?

배경 : 이것은 "빌더"섹션의 관련 부분으로, 사용 가능한 최신 AMI를 사용하도록 구성되었습니다.

"builders": [{
  "type": "amazon-ebs",
  "region": "eu-central-1",
    ...
    "source_ami_filter": {
        "filters": {
            "virtualization-type": "hvm",
            "name": "*ubuntu-xenial-16.04-amd64-server-*",
            "root-device-type": "ebs"
        },
        "owners": ["099720109477"],
        "most_recent": true
    },
  ...
}]

참고 : 및 플래그로 noniteractiveapt-get update를 실행 하면 모드가 작동합니다 .-y-q

답변:


21

이 일련의 명령은 저에게 효과적입니다.

apt-get update
DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq

따라서 DEBIAN_FRONTEND=noninteractive정확하지만 -q플래그 도 필요합니다 .

출처 : https://github.com/moby/moby/issues/4032


2
당신은 (아마도?)를 단순화 할 수 apt-get update ; DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq있습니다. 나는 아무것도 묻지 않는다고 생각 apt-get update 하므로 아마도 필요하지 않을 DEBIAN_FRONTEND것이므로 실제로 export DEBIAN_FRONTEND나머지 환경을 통해 존재하지 않아도됩니다. 당신에게 중요한 어느 정도까지.
Michael Mol

@MichaelMol 잘 작동합니다. 내 답변을 업데이트했습니다.
Philipp Claßen

FWIW, 이것은 상호 작용이 필요한 패키지를 건너 뛰고 업그레이드하지 않는 apt-get로 이어질 수 있습니다 ( '패키지 X는 수동 업그레이드가 필요합니다'에 대한 로그를 남기지 않습니다). 아이디어가 패치 된 패키지를 얻는 것이라면 갈 길은 아닙니다.
Tensibai

11

문제는 적절한 목록에있는ucf사건에 따라 당신이 혼자가 아니라 그럽 파일 변경 사항을 준수 하고 debconf 가 아니라는 것입니다.

해결 방법 으로 askunbuntu 에서이 답변 을 찾았습니다. menu.lstUCF 구성 시스템에서 UC를 제거하면 충분합니다.

"provisioners": [
  {
    "type": "shell",
    "inline": [
      "sudo ucf --purge /boot/grub/menu.lst"
      "sudo apt-get update",
      "sudo UCF_FORCE_CONFFNEW=YES apt-get upgrade -y"
    ]
  }
]

이것은 grub 질문을 피해야합니다. ucf를 사용하는 다른 패키지도 메인테이너 패키지 버전을 사용한다는 점에 유의하십시오. 기본 ami에서 작성하는 경우에는 문제가되지 않지만 주목할만한 가치가 있습니다.


현재 내 해결 방법은 안정적으로 실행됩니다. 여전히 대안 솔루션이 있다는 것을 아는 것이 좋습니다.
Philipp Claßen

나는 Ubuntu 18.04에서 grub과 비슷한 문제를 ucf겪었 으며이 수정 프로그램은 @ PhilippClaßen
RichVel

2

Philipp의 답변에 추가하려면 사용 sudo하는 DEBIAN_FRONTEND경우 나중에 다음과 같이 변수 를 설정해야합니다 .

apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq

또는 sudo -E가 필요하지만 여전히 'hang'을 비활성화하고 패키지를 건너 뛰고 예상대로 업그레이드하지 않습니다.
Tensibai

패키지를 어떻게 업그레이드 할 수 있습니까?
Christos Dimitroulas

내 대답을 참조하십시오. 일부 패키지는 자동 응답 대화 상자와 다르게 처리해야합니다.
Tensibai

1

-y 또는 -q를 사용하여 차이를 느끼지 못했습니다. 아마 "packer"사용에 관한 질문입니까? (나는 베어 스크립트를 사용합니다)

어쨌든, 내 경우 apt upgrade에는 다음 sed 명령 을 사용하기 위한 대화 상자를 제거 했습니다.

sed -i "s/#\ conf_force_conffold=YES/conf_force_conffold=YES/g" /etc/ucf.conf
apt-get -y upgrade
sed -i "s/conf_force_conffold=YES/#conf_force_conffold=YES/g" /etc/ucf.conf

변경 사항은 업그레이드 시점으로 제한됩니다.
기술적으로 부작용을 피하기 위해 업그레이드 할 때만 grub을 업그레이드 할 때 기존 구성 유지에 관한 질문을 비활성화합니다.

운영체제 : Ubuntu 16.04 LTS

이것이 도움이되기를 바랍니다.


두 개의 firsts 명령을 &&와 연결해야합니다. 따라서 ucf 파일이 다른 프로세스에 의해 잠긴 경우 첫 번째 참조에서 apt-get을 실행할 수 없습니다
Tensibai

그리고 grub에 confold를 적용하면 시스템을 부팅 할 수 없게되므로 grub에서는이를 피해야합니다.
Tensibai

@ Tensibai 초기 답변을 다듬었지만 새로운 VM 배포를 자동화하는 데 사용했습니다. 물론, grub을 엉망으로 만드는 것은 매우 위험하며 중요한 서버를 조작 할 때 이것으로 놀리는 것이 좋지는 않지만 다른 apt upgrade경우에는 그렇게 위험 하지 않습니다 . 몇 분 안에 환경을 재구성하는 스냅 샷이나 다른 효율적인 방법이 없다면 시도하지 않을 것입니다.
Balmipour

1
apt-get 업그레이드는 그 자체로 위험하지 않습니다. 그러나 오래된 구성을 유지하면이 될 수 있습니다. 또한 원하는 상태를 OK로 설정하지 않으면 (코드에서 실패하면 강제로 남습니다) 문제가됩니다 (이 목록은 apt-get 실패시 중지되고 줄을 다시는 언급하지 않습니다 ...)
Tensibai

1
그것은 이다 명확 건설. 주석 처리되지 않은 줄이 남을 위험이 있음을 지적하는 것이 특히 옳습니다. 들어 사용 사례, 나는 위험을 무시할 확신 해요,하지만 누군가가 맹목적으로 결과를 모르고을 사용할 수 있습니다. (무엇을하는지 이해하지 않고 임의의 명령을 실행해서는 안된다고해도).
Balmipour

0

명령 에서 -y매개 변수를 생략했습니다 apt-get update. 포함하면 프롬프트가 사라집니다.

나는 Packer로 우분투 이미지를 만들었습니다. 업데이트를 수행하는 데 사용하는 쉘 스크립트는 다음과 같습니다.

https://github.com/devopskatas/learningvm/blob/master/script/update.sh

이것은 잘 관리 된 우분투 패커 빌드 라이브러리에서 파생됩니다.

https://github.com/boxcutter/ubuntu


2
apt-get update 원격 저장소에서 패키지 목록 만 업데이트합니다. -y를 설정할 이유가 없습니다.
Tensibai

@ Tensibai 예, 차이도 없습니다. 같은 오류입니다.
Philipp Claßen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.