Packer ile paketleme yaparken Ubuntu 16.04'te “apt-get upgrade -y” komutunu kullanırken etkileşimli iletişim kutularını nasıl önleyebilirim?


27

Bir Ubuntu 16.04 resmine dayalı bir AWS AMI oluşturmak için Packer kullanıyorum . Başlangıçta, yükseltme yapıyorum:

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

Tedarikçilerim bölümünün ilgili kısmı:

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

Bu, etkileşimli bir iletişim kutusu açıldığı için otomasyonu bozar:

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

Daha export DEBIAN_FRONTEND=noninteractiveönce de ayarlamaya çalıştım ( bu cevapta önerildiği gibi ). Ne yazık ki, farketmez.

Sorular:

  • Yinelemeli iletişim kutusunu geçmenin bir yolu var mı (seçenek 1'i seçmek iyi olur)?
  • Yükseltmelerden kaçınmak ve AMI'lerin güncel olduğuna ve kritik güvenlik yamaları içerdiğine güvenmek daha mı iyi?

Arka plan: Bu, en son kullanılabilir AMI'yi kullanacak şekilde yapılandırdığım "inşaatçılar" bölümümün ilgili kısmı:

"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
    },
  ...
}]

Not : noniteractiveapt-get update komutunu hem bayrağı hem -yde -qbayrağıyla çalıştırırsanız , modun çalıştığını belirtir .

Yanıtlar:


21

Bu komut dizisi benim için çalışıyor:

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

Yani, DEBIAN_FRONTEND=noninteractivedoğru ama aynı zamanda -qbayrağa ihtiyacın var .

Kaynak: https://github.com/moby/moby/issues/4032


2
Bunu (muhtemelen?) Basitleştirebilirsiniz apt-get update ; DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq. Hiçbir şey isteyip istemediğini sanmıyorum apt-get update , bu yüzden muhtemelen buna ihtiyaç duymuyor DEBIAN_FRONTENDve bu yüzden gerçekten de export DEBIAN_FRONTENDçevreniz boyunca var olmaya devam etmenize gerek kalmıyor . Sizin için önemli olan dereceye kadar.
Michael Mol,

@MichaelMol İşleri iyi. Cevabımı güncelledim.
Philipp Claßen

FWIW, bu, apt-get 'in sadece etkileşime ihtiyaç duyan paketi atlamasına ve yükseltmemesine yol açabilir. Eğer fikir yamalı paketleri elde etmekse, gitmenin yolu bu değildir.
Tensibai

11

Sorununuz grub dosyası değişikliğinin debconf'a uyup uymadığı , apt listesindekiucf bu olaya göre yalnız değilsiniz.

Çözüm olarak, bu cevabı askunbuntu'da buldum. menu.lstUCF yapılandırma sisteminden kaldırmak, sizin durumunuz için yeterli olmalıdır:

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

Bu, grub sorusundan kaçınmalıdır. Ucf kullanan başka bir paketin koruyucu paket sürümünü de kullanacağı konusunda uyarılmalıdır, baz ami'den bir oluşturma için bu bir problem olmamalı, ancak not edilmeye değer.


Şu anda, geçici çözümüm kararlı çalışıyor. Yine de, alternatif bir çözüm olduğunu bilmek güzel.
Philipp Claßen

Ubuntu 18.04'te grub ile benzer bir sorun yaşadım ve bu ucfdüzeltmenin tam bir çözüme dahil edilmesi gerektiğine inanıyorum ; PhilippClaßen
RichVel

2

Philipp'in cevabına eklemek için kullanıyorsanız, sudodaha sonra DEBIAN_FRONTENDdeğişkeni ayarladığınızdan emin olmanız gerekir :

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

Ya da sudo -E'ye ihtiyacınız var, ancak bu hala "askıda kalmayı" devre dışı bırakmak ve sadece beklendiği gibi bir yükseltme yapmamak için pakete atlamaya neden oluyor.
Tensibai

Paketi yükseltdiğinizden nasıl emin olabilirsiniz?
Christos Dimitroulas

Cevabımı görün, bazı paketler otomatik cevap diyalogları için farklı şekilde ele alınması gerekir.
Tensibai

1

-Y veya -q komutunu kullanırken hiçbir fark görmedim. Belki de soru "paketleyiciyi" kullanmakla ilgili olabilir mi? (Ben çıplak betikler kullanın)

Her neyse, benim durumumda, apt upgradeetrafındaki aşağıdaki sed komutlarını kullandığım için diyaloglardan kurtuldum :

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

Değişikliğim yükseltme zamanıyla sınırlı.
Teknik olarak, grub yükseltme yapılırken mevcut bir konfigürasyonun tutulup tutulmamasına ilişkin soruları devre dışı bırakır, ancak yalnızca yan etkilerden kaçınmak için yükseltme süresince.

İşletim Sistemi: Ubuntu 16.04 LTS

Bu yardımcı olur umarım


İki ilk komutu & & ile bağlamanız gerekir, böylece ilk
görüşte

Grubun konfoldesi zorunluluğu sisteminizi yenilmez bırakacaktır, grub için kaçınmalısınız
Tensibai

@Tensibai İlk cevabımı kırptım, ancak bunu yeni VM dağıtımını otomatikleştirmek için kullanıyordum. Elbette, grubla uğraşmak oldukça tehlikelidir ve önemli sunucuları yönetirken bununla oynamayı tavsiye etmem ama öte yandan ... apt upgradeböyle bir durumda tek başına aşırı derecede tehlikeli değil mi? Birkaç dakika içinde çevremi yeniden oluşturmanın bir anlık görüntüsünü veya başka etkili bir yolunu yoksa, denemem.
Balmipour

1
apt-get upgrade kendi başına tehlikeli değildir. Ancak eski yapılandırmaları korumayı zorladığınızda bu olabilir. Dahası, kontrol etmemeniz durumunda istediğiniz durumu tamamlayın (kodunuzda bir başarısızlık zorlayıcı bırakacaktır) bir sorun haline geldi (bu liste büyük olasılıkla bir apt-get arızasında duracak, satırı asla geri çevirmeyecek ...)
Tensibai

1
Bu ise açıkça yapıcı. Ve özellikle uncommented hattını bırakma riskini belirtmekte haklısınız (bunu kullanmakta tereddüt ettim ve önlemek için bir kontrol eklemeyi düşüneceğim). İçin benim kullanım durumunda, ben riskler göz ardı edilebilir eminim, ama birisi körü körüne sonuçlarını bilmeden bu kullanabiliriz. (kişi ne yaptığını anlamadan asla rastgele komutlar çalıştırmamalıdır).
Balmipour

0

-yParametreyi apt-get updatekomutunuzdan atlıyorsunuz . Eğer eklerseniz, istemi ortadan kalkar.

Packer ile birlikte bir Ubuntu görüntüsü de oluşturdum. Güncellemeyi gerçekleştirmek için kullandığım kabuk betiği:

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

Bu, Ubuntu Packer'ın geliştirdiği büyük ve bakımlı bir kütüphaneden türetilmiştir:

https://github.com/boxcutter/ubuntu


2
apt-get update yalnızca uzak havuzdaki paketlerin listesini günceller, orada
-y'yi

@Tensibai Evet, aynı zamanda farketmez. Aynı hatayı.
Philipp Claßen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.