100% upgrade Debian non-interaktif

38

Apakah ada cara untuk melakukannya apt-get dist-upgradedi Debian yang tidak hanya secara otomatis menjawab "ya" untuk semua pertanyaan yang diajukan, tetapi juga menggunakan default yang wajar sebagai jawaban untuk pertanyaan yang cukup canggih sehingga memerlukan berbagai kotak dialog interaktif untuk muncul? Saya sedang memikirkan hal-hal keymap yang muncul ketika Anda meningkatkan libc6, dan pilihan gambar kernel.

Tujuannya adalah untuk dapat memulai dari jarak jauh yang agak besar dist-upgrade- bahkan untuk mesin yang sangat ketinggalan zaman - dan tidak harus mengasuhnya sama sekali, kecuali ada sesuatu yang mengerikan, salah petaka .

Tentunya ini mungkin?

Terima kasih sebelumnya!

Alex Balashov
sumber
Bagi mereka yang hanya ingin meningkatkan (bukan dist-upgrade) di Ubuntu, cobalah paket peningkatan tanpa pengawasan .
Jo Liss

Jawaban:

42

Jika Anda mengatur DEBIAN_FRONTEND=noninteractive(untuk menghentikan permintaan debconf agar tidak muncul) dan menambahkan force-confolddan force-confdefke /etc/dpkg/dpkg.cfgfile Anda, Anda harus memiliki pengalaman instalasi paket yang benar-benar tidak aktif. Paket apa pun yang masih meminta Anda untuk mendapatkan informasi memiliki bug kritis rilis (dan saya katakan itu sebagai pecandu otomasi dan sebagai pengembang Debian).

womble
sumber
ini tidak berhasil untuk saya. apt-listchangesdibuka oleh less.
magnetar
@magnetar: Itu masalah dengan apt-listchanges, bukan apt. Copot pemasangan apt-listchanges, atau konfigurasikan dengan tepat.
womble
1
Coba: env APT_LISTCHANGES_FRONTEND = tidak ada apt-get dist-upgrade -u -y
H.-Dirk Schmitt
21

Florian Lohoff memposting cara untuk mendapatkan apa yang disarankan womble menjadi satu perintah:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

Tentu saja Anda juga dapat menggunakan -o Dpkg::Options::="--force-confnew --force-confdef"(cari halaman manual dpkg untuk informasi lebih lanjut). Saya tidak yakin dalam kasus apa ini akan membuat perbedaan. Saya pribadi memerlukan upgrade non-interaktif untuk menjadikan gambar vanilla up-to-date, dalam hal ini saya kira selalu memilih file konfigurasi baru (tanpa --force-confdef) adalah hal yang wajar.

Jo Liss
sumber
W: --force-yes is deprecated, use one of the options starting with --allow instead.
Alex
3

Meskipun jawaban womble di atas umumnya baik, itu tidak berhasil untuk saya dan saya harus melakukan riset tambahan untuk pergi 100% tanpa pengawasan. Saya pikir saya akan membagikan hasilnya secara ringkas untuk membuat hal-hal lebih sederhana bagi pengunjung masa depan.

Berikut ini adalah skrip yang akan berjalan sesuai dengan rekomendasi pemutakhiran catatan rilis debian 8 (kebanyakan) bersama dengan variabel flag dan lingkungan yang akan membuatnya tidak dijaga. ( echos hanya untuk debugging dan dapat dihapus - meskipun saya sarankan menjaga mereka jadi jika skrip macet Anda akan tahu di mana)

#!/bin/bash

apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
apt-get --force-yes clean &&

echo "executing update" &&
apt-get update &&

echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&

echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade
Tom Klino
sumber
1
Catatan: "- Angkatan-ya Angkatan ya; ini adalah opsi berbahaya yang akan menyebabkan cenderung melanjutkan tanpa diminta jika melakukan sesuatu yang berpotensi berbahaya. Itu tidak boleh digunakan kecuali dalam situasi yang sangat khusus. Menggunakan kekuatan-ya berpotensi menghancurkan sistem Anda! Item Konfigurasi: APT :: Get :: force-yes. Ini tidak digunakan lagi dan diganti dengan --allow-downgrade, --allow-remove-essential, --allow-change-holding-paket di 1.1. "
Alex
1

> = Apt 1.1

Jika Anda menggunakan Apt 1.1 atau di atas, --force-yestelah usang , sehingga Anda sudah untuk menggunakan pilihan dimulai dengan --allowsebaliknya, misalnya --allow-downgrades, --allow-remove-essential, --allow-change-held-packages.

Jadi perintahnya adalah:

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
  dist-upgrade

Catatan: Gunakan --force-confolduntuk tetap tua, dan --force-confnewuntuk menyimpan konfigurasi baru.

Sumber: CFE-2360: Sadarilah apt_get versi modul paket .

Terkait:

kenorb
sumber
-4

Dari apt-get(8)halaman manual:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

Untuk referensi, -yopsi berfungsi yum(8)juga.

koenigdmj
sumber
5
Saya tahu tentang itu. Saya menggunakan bendera itu dan berhasil menjawab 'ya' untuk pertanyaan standar APT Y / N tentang menjaga menimpa konfigurasi yang ada, dll., Dll. Itu bukan pertanyaan yang saya maksud. Ketika saya melakukan upgrade apt-get -y-dist itu masih memberi saya beberapa 'dialog' meminta apa yang dianggapnya hal-hal besar, yaitu perubahan keymap, restart layanan terkait libc6, dll. Saya sedang mencari bendera tambahan untuk matikan itu juga.
Alex Balashov