Grub config isteminde bulunmadan apt-get -y dist-upgrade komutunu nasıl kullanabilirim?


63

Make Make apt-get (veya yetenek) Başına -y ile çalıştırın ancak yapılandırma dosyalarının değiştirilmesi istenmedi mi?

Aşağıdakileri yaptım:

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

Makinede:

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

Hala hangi yapılandırma dosyasını kullanmak istediğimi soran bir uyarı alıyorum. Bunlar komut isteminden önce gelen satırlar:

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

sonra:

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

Tatminkar olmayan geçici çözüm: yankı grub-pc hold | sudo dpkg - ilk apt-get komutundan önce
setset

Aynı sorunu alıyorum ve hiçbiri çalışmayan Dpkg :: Options :: = 'in birçok farklı permütasyonunu / hecelemesini denedim. Ayrıca /etc/apt/apt.conf.d/local dosyasına satırları belirtildiği gibi eklemeyi de denedim ve çalışmadılar. Bu Kesinlikte bir gerileme gibi görünüyor.
Scott Ritchie

+1 - sorduğunuz için teşekkürler - bu can sıkıcı soruna bu konuyu bulmak şaşırtıcı derecede kolaydı
cwd

Yanıtlar:


94

/etc/default/grubDosya o debconf ile entegre çünkü gerekli olan paketin yüklemek zaman, oluşturulur. Bu, bir dpkg conf dosyası olarak değerlendirilemediği ve bu nedenle dpkg'nin yapılandırma dosyasının ele alındığı hakkında hiçbir şey bilmediği anlamına gelir.

Bunun yerine, ucfyapılandırmayı ele almak için daha karmaşık bir Debian aracı kullanır . Bu ne yazık ki dpkg seçeneklerini anlamıyor, bu yüzden ayar Dpkg::Options::="--force-confdef"yardımcı olmayacak. Bununla birlikte, UCF_FORCE_CONFFNEWve UCF_FORCE_CONFFOLDortam değişkenleri aracılığıyla hızlı bir şekilde yükseltme yapmanın kendi yoluna sahiptir .

ucfbilgi debconfistemi için kullanır , böylece debconf arayüzünü ayarlamak noninteractivemesajı da susturur. Gerçekten etkileşimli olmayan güncellemeler istiyorsanız, bunu yine de yapmanız gerekir - isteğe bağlı paketler debconf soruları sorabilir (genellikle yükseltme sırasında olmasalar da).

DEBIAN_FRONTEND=noninteractiveOrtamınıza ekleyerek debconf arayüzünü bir defalık olarak ayarlayabilir veya dpkg-reconfigure debconfetkileşimli olmayan ön ucu çalıştırarak ve seçerek kalıcı olarak ayarlayabilirsiniz . Etkileşimsiz ön uç kullanıyorsanız, bir paketin isteyebileceği tüm sorular için varsayılan yanıtı alırsınız.

Çünkü ucfvarsayılan cevap “mevcut dosyayı sakla” dır.

Yani, gerçekten% 100 garantili bir güncelleme yapmak için tam komut - istemez bir güncelleme olacaktır.

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

Packages: Paketlerin debconf'tan başka bir bilgi istemi yöntemi kullanması teknik olarak mümkündür, ancak bu Debian politikasına aykırıdır. Böyle bir pakete rastlarsanız, bir hata bildirin.


8
Bunu bir kabuk üzerinde test ediyorsanız, sudo komutunun DEBIAN_FRONTEND değişkenini kaldırıyor gibi gözüktüğünü unutmayın, yani sudo DEBIAN_FRONTEND = etkileşimli olmayan apt-get -y dist yükseltme işlemine ihtiyacınız var;
Scott Ritchie,

benim için iyi çalıştı, teşekkür ederim
cwd

Ayrıca bunun bir hata olarak kabul edildiğini ve bu sorunu içermemesi
Scott Ritchie

Ve yeni AMI'ler şimdi serbest bırakıldı.
Scott Ritchie

@ScottRitchie - yorumunuz ganglia-webfrontend paketinin kurulumunu otomatikleştirmek için çok çalışıyor. Yeni conf dosyasını işlemek için apache'nin yeniden başlatılmasını istemek için bir istekte bulunuluyor ancak bu ganglionların kurulumunu otomatikleştirmeye çalışırken kırılıyor - yorumunuzu ön tarafa ekledi ve sorunu düzeltti
Jeremy Hajek

19

RAOF'un cevabından vazgeçerek ve Ubuntu 12.04'te tamamen hands-off güncelleme ve güncelleme yapabilmek için internette arama yaparak sayısız saat harcadıktan sonra, bu yazıdan dolayı bunu buldum ( https: // bugs). .launchpad.net / ubuntu / + kaynak / grub / + bug / 239674 / yorum / 1 ), paket koruyucu grub menüsünü kullanmak istediğinizde grubun UCF'ye uyduğunu ve Dpkg Seçeneklerine uymadığını belirtir. .lst düzenlemeleri.

gruba dahil olmayan diğer paketler için Dpkg güç-itme seçeneklerini bıraktım.

#!/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
Bu benim için çalışan tek şeydi. Teşekkürler!
Wes

1
O halde diyelim ki unattended-upgradesgrub grub config de kullanıyorsunuz ve düzenlediniz: UCF_FORCE_CONFFNEWbu bağlamda nasıl ayarladınız ? Yoksa grubun güncellenmesini kara listeye almak mı istiyorsunuz?
thom_nic


1

Son birkaç gündür Ubuntu 18.04'te de aynı konu ile uğraşıyorum. Yeni bir EC2 örneği başlatırken (özellikle ami-00035f41c82244dab), otomatik olarak bir provizyon betiği çalıştırıyorum (başlatma sırasında sağlanan Kullanıcı Verileri yapılandırması aracılığıyla), ilk adımlarından birini uygun güncelleme / yükseltme yapmak.

Kullanıcı değiştirilmiş GRUB dosyaları hakkında uyarıldığında komut dosyası engellenir - önce / etc / default / grub ve sonra /boot/grub/menu.lst. Bu, Kullanıcı Verileri olarak sağlandığında katılımsız modda çalıştığından, işlem durur ve asla kurtarılmaz.

Birçok Googling’den, bu durum, uzun zamandır devam eden bir GRUB meselesi gibi görünüyor, düzeltmeler uygulandı ve sonra söyleyebileceğim kadarıyla tekrar gerileme oldu.

Sonuçta, başarıyla uygulayabildiğim tek geçici çözüm, sağlama komut dosyasındaki şu çirkin kesmek. Umarım olsa başkasını sıkıntıdan kurtarabilir!

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

Karşılaştığım sorunun yalnızca şu anda mevcut olan Ubuntu 18.04 AMI sürümüne özgü olduğunu ve yeni GRUB paketleri içeren güncellenmiş sürümlerin aynı konuya tabi olmayabileceğini kabul ediyorum. Özellikle, yapılacak değişikliklerin niteliğinin /etc/default/grubAMI’nin yeni sürümleri için geçerli olması muhtemel değildir. Sadece bunu yine de ortaya koyuyorum.


Aşağıdaki tek astarı çalıştırmayı deneyin:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron

Ayrıca, işte yukarıda belirtilen en son hata (regresyon): bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron
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.