Bagaimana cara apt-get -y dist-upgrade tanpa prompt konfigurasi grub?

63

Per Lakukan apt-get (atau aptitude) berjalan dengan -y tetapi tidak meminta penggantian file konfigurasi?

Saya melakukan yang berikut:

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

Pada mesin:

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

Saya masih mendapatkan prompt menanyakan file konfigurasi yang ingin saya gunakan. Ini adalah baris yang muncul sebelum prompt:

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

kemudian:

                         ┌───────────────────────────────────────────────────────┤ 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                                                        │                              
fratrik
sumber
Solusi tidak memuaskan: echo grub-pc hold | sudo dpkg --set-pilihan sebelum perintah apt-get pertama
fratrik
Saya mendapatkan masalah yang sama dan telah mencoba banyak permutasi / ejaan yang berbeda dari Dpkg :: Options :: =, tidak ada yang berhasil. Saya juga mencoba menambahkan baris ke file /etc/apt/apt.conf.d/local seperti yang ditunjukkan, dan mereka juga tidak berhasil. Ini tampaknya merupakan regresi dalam Precise.
Scott Ritchie
+1 - terima kasih telah bertanya - ternyata mudah untuk menemukan utas ini untuk masalah yang menjengkelkan ini
cwd

Jawaban:

95

The /etc/default/grubfile yang dihasilkan pada paket waktu menginstal, yang diperlukan karena terintegrasi dengan debconf. Ini berarti tidak dapat diperlakukan sebagai file conf dpkg, dan penanganan file konfigurasi dpkg tidak mengetahuinya.

Sebagai gantinya, ia menggunakan ucf, alat Debian yang lebih canggih untuk menangani konfigurasi. Sayangnya, ini tidak memahami opsi dpkg, jadi pengaturan Dpkg::Options::="--force-confdef"tidak akan membantu. Itu memang memiliki caranya sendiri untuk melakukan upgrade tanpa-cepat, meskipun, melalui variabel lingkungan UCF_FORCE_CONFFNEWdan UCF_FORCE_CONFFOLD.

ucfdigunakan debconfuntuk meminta, jadi mengatur antarmuka debconf noninteractivejuga akan membungkam pesan. Jika Anda benar-benar menginginkan pembaruan non-interaktif, Anda tetap harus melakukan ini - paket sewenang-wenang dapat mengajukan pertanyaan debconf (meskipun umumnya tidak akan dilakukan saat pemutakhiran).

Anda dapat mengatur antarmuka debconf sebagai satu kali dengan menambahkan DEBIAN_FRONTEND=noninteractiveke lingkungan Anda, atau dapat mengaturnya secara permanen dengan menjalankan dpkg-reconfigure debconfdan memilih antarmuka non -aktif . Jika Anda menggunakan antarmuka noninteraktif Anda akan mendapatkan jawaban default untuk setiap pertanyaan yang mungkin ditanyakan paket.

Sebab ucf, jawaban default adalah "simpan file yang ada".

Jadi, perintah lengkap untuk melakukan pembaruan yang benar-benar 100% dijamin¹ tanpa diminta adalah.

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

¹: Secara teknis memungkinkan paket menggunakan metode lain untuk meminta selain debconf, tetapi ini melanggar kebijakan Debian. Jika Anda menemukan paket seperti itu, ajukan bug.

RAOF
sumber
8
Perhatikan bahwa jika Anda menguji ini pada sebuah shell, perintah sudo tampaknya menghapus variabel DEBIAN_FRONTEND, yaitu Anda memerlukan sudo DEBIAN_FRONTEND = non-aktif apt-get -y dist-upgrade sedangkan DEBIAN_FRONTEND = sudo noninteraktif apt-get -y dist-upgrade akan gagal
Scott Ritchie
bekerja dengan baik untuk saya, terima kasih
cwd
Perhatikan juga bahwa ini dianggap sebagai bug dan mereka merilis gambar AMI baru yang seharusnya tidak memiliki masalah ini: bugs.launchpad.net/ubuntu/+bug/1009294
Scott Ritchie
Dan AMI baru sekarang dirilis.
Scott Ritchie
@ScottRitchie - komentar Anda juga berfungsi untuk membantu mengotomatiskan pemasangan paket ganglia-webfrontend. Ada permintaan untuk meminta reboot apache untuk memproses file conf baru tapi ini rusak ketika mencoba untuk mengotomatiskan instalasi ganglia - menambahkan komentar Anda ke depan dan memperbaiki masalah
Jeremy Hajek
19

pergi dari jawaban RAOF dan setelah menghabiskan berjam-jam mencari di web untuk dapat melakukan pembaruan hands-off & dist-upgrade sepenuhnya pada Ubuntu 12,04, saya datang dengan ini berkat fakta posting ini ( https: // bug .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1 ) menunjukkan bahwa grub mematuhi UCF dan bukan Opsi Dpkg ketika Anda ingin menggunakan menu grub pengelola paket.lst alih-alih menu lokal yang memungkinkan .lst diedit.

saya meninggalkan opsi Dpkg force-confnew untuk paket lain yang tidak grub.

#!/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
metral
sumber
1
Ini adalah satu-satunya hal yang berhasil untuk saya. Terima kasih!
wes
1
Jadi katakanlah Anda juga menggunakan unattended-upgradesdan telah mengedit beberapa konfigurasi grub: bagaimana Anda mengaturnya UCF_FORCE_CONFFNEWdalam konteks itu? Atau apakah Anda perlu membuat daftar hitam grub agar tidak diperbarui?
thom_nic
3

Solusi sebelumnya tidak akan berfungsi dengan 16.04. Ini bekerja dari jawaban ini pada stack overflow :

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold"  install grub-pc
StringsOnFire
sumber
1

Saya telah bergulat dengan masalah yang sama pada Ubuntu 18.04 beberapa hari terakhir. Saat meluncurkan instance EC2 baru (khususnya ami-00035f41c82244dab), saya menjalankan skrip penyediaan otomatis (melalui konfigurasi Data Pengguna yang diberikan pada saat inisialisasi), salah satu langkah pertama adalah menjalankan pembaruan / peningkatan apt.

Skrip akan diblokir ketika pengguna diminta tentang file GRUB yang dimodifikasi - pertama / etc / default / grub, dan kemudian / boot / grub/menu.lst. Karena ini berjalan dalam mode tanpa pengawasan saat diberikan sebagai Data Pengguna, proses terhenti dan tidak pernah pulih.

Dari banyak Googling, sepertinya ini merupakan masalah GRUB yang sudah berjalan lama dalam satu bentuk atau yang lain, dengan perbaikan diterapkan dan kemudian mengalami kemunduran lagi, sejauh yang saya tahu.

Pada akhirnya, satu-satunya solusi yang berhasil saya terapkan adalah retas buruk berikut dalam skrip penyediaan saya. Semoga itu bisa membuat orang lain keluar dari ikatan!

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

Saya hanya dapat berasumsi bahwa masalah yang saya temui cukup spesifik untuk versi Ubuntu 18.04 AMI yang saat ini tersedia, dan setiap versi yang diperbarui yang menyertakan paket GRUB yang lebih baru mungkin tidak mengalami masalah yang sama. Secara khusus, sifat perubahan /etc/default/grubtidak mungkin berlaku untuk versi AMI yang lebih baru. Tetap saja menempatkan ini di luar sana.

John Rix
sumber
Coba jalankan satu-liner berikut:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron
Juga, inilah bug terbaru (regresi) yang disebutkan di atas: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron