人生シーケンスブレイク

人生を楽してクリアしたい。

Ubuntuでsudo apt-get -y upgradeするとdialogで止まる

概要

Packer で Ubuntu AMI を作成しようとしたら、 apt-get -y upgrade で処理が止まって困った時の解決方法。 もしかしたら Docker や Ansible でも出るのではないか。

{
  "variables": {
    "aws_access_key": "{{env `AWS_ACCESS_KEY_ID`}}",
    "aws_secret_key": "{{env `AWS_SECRET_ACCESS_KEY`}}",
    "region": "ap-northeast-1"
  },
  "builders": [{
    "type": "amazon-ebs",
    "access_key": "{{user `aws_access_key`}}",
    "secret_key": "{{user `aws_secret_key`}}",
    "region": "{{user `region`}}",
    "source_ami_filter": {
      "filters": {
        "virtualization-type": "hvm",
        "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
        "root-device-type": "ebs"
      },
      "owners": ["099720109477"],
      "most_recent": true
    },
    "instance_type": "m3.medium",
    "ssh_username": "ubuntu",
    "ssh_timeout": "5m",
    "ami_name": "AMI/ubuntu/{{isotime | clean_ami_name}}"
  }],
  "provisioners": [{
    "type": "shell",
    "inline": [
      "sudo apt-get update",
      "sudo apt-get upgrade -y", # ここで止まる
      "sudo apt-get install -y python3-pip",
      "(略)"
    ]
  }]
}

確かにサーバーに直接ログインし、 apt-get upgrade -y したらインタラクティブな画面になってしまい、コマンド操作不能な状況になっていた。
これはヒドい。

対応方法

sudo apt-get upgrade -y ではなく、 sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq を使う。

参考: