Apa itu "dist-upgrade" dan mengapa itu meningkatkan lebih dari "upgrade"?

395

Saya bertanya-tanya mengapa upgradekadang - kadang tidak ingin memutakhirkan bagian-bagian tertentu dari sistem, sementara dist-upgradeitu. Berikut ini contoh setelah menjalankan apt-get upgrade:

apt-get upgrade:

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

versus apt-get dist-upgrade:

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-3.0.0-13 linux-headers-3.0.0-13-generic
  linux-image-3.0.0-13-generic
The following packages will be upgraded:
  linux-generic linux-headers-generic linux-image-generic
3 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 48.5 MB of archives.
After this operation, 215 MB of additional disk space will be used.
Do you want to continue [Y/n]?

Dengan kata lain, mengapa ini tidak bisa dilakukan oleh upgrade?

Richard Rodriguez
sumber

Jawaban:

328

Dari apt-getmanual :

upgrade
   upgrade is used to install the newest versions of all packages
   currently installed on the system from the sources enumerated in
   /etc/apt/sources.list. Packages currently installed with new
   versions available are retrieved and upgraded; under no
   circumstances are currently installed packages removed, or packages
   not already installed retrieved and installed. New versions of
   currently installed packages that cannot be upgraded without
   changing the install status of another package will be left at
   their current version. An update must be performed first so that
   apt-get knows that new versions of packages are available.

dist-upgrade
   dist-upgrade in addition to performing the function of upgrade,
   also intelligently handles changing dependencies with new versions
   of packages; apt-get has a "smart" conflict resolution system, and
   it will attempt to upgrade the most important packages at the
   expense of less important ones if necessary. So, dist-upgrade
   command may remove some packages. The /etc/apt/sources.list file
   contains a list of locations from which to retrieve desired package
   files. See also apt_preferences(5) for a mechanism for overriding
   the general settings for individual packages.

Dan dengan aptalat yang lebih baru tersedia mulai 14,04 dan seterusnya:

full-upgrade
   full-upgrade performs the function of upgrade but may also remove
   installed packages if that is required in order to resolve a
   package conflict.

Dalam kasus khusus Anda, saya melihat, misalnya, itu linux-headersadalah paket virtual yang disediakan oleh keduanya linux-headers-3.0.0-12dan linux-headers-3.0.0-13dan itu terdengar seperti jenis instalasi dan penghapusan paket yang ditangani dist-upgrade, tetapi tidak oleh upgrade.

jcollado
sumber
4
Saya tidak melihat full-upgradeopsi di apt-getbawah 14.04.1.
nobar
Saya juga tidak tahu tentang aptitu, tetapi tampaknya itu adalah perintah yang sepenuhnya berbeda menurut halaman manual yang dia
tautkan
18
@ nobar Anda tidak melihat karena ini adalah pilihan aptdan bukan apt-get... :-) Coba man apt.
Hastur
Oke, saya mencari dan tautan paling awal yang saya temukan adalah untuk Ubuntu 15.10 (yang keluar akhir 2014 yang masuk akal dengan pengujian Jessie) manpages.ubuntu.com/manpages/wily/en/man8/apt.8.html
Z boson
6
@Zboson Ya, dan 14,04 keluar bukan pada 2011, tetapi pada April 2014 ... lihat polanya?
tgies
137

apt-get upgradedibatasi pada kasus di mana paket harus diganti oleh versi yang lebih baru, tetapi tidak ada paket yang perlu ditambahkan atau dihapus. Versi baru Firefox, misalnya, harus dapat diinstal dengan apt-get upgrade.

Namun apt-get upgradeakan menolak untuk bekerja ketika ada penambahan atau penghapusan yang diperlukan oleh versi yang diperbarui. Misalnya, ketika Anda telah linux-image-3.2.0-10-genericmenginstal kernel dan linux-image-3.2.0-11-genericmuncul, linux-image-genericpaket akan diperbarui tergantung pada versi yang lebih baru. Untuk menginstal kernel baru, Anda harus menjalankan apt-get dist-upgrade.

Perhatikan bagaimana sebuah apt-get upgradeakan mengatakan bahwa paket-paket kernel telah held back. Itulah isyarat untuk menggunakan apt-get dist-upgrade.

pablomme
sumber
2
Sempurna! : D Dua pertanyaan lagi ... apa yang digunakan oleh manajer pembaruan grafis di Ubuntu? Apa yang direkomendasikan?
THpubs
11
Utilitas grafis update-manager,, tidak digunakan apt-getsecara langsung; alih-alih bekerja dengan backend yang disebut aptdaemon. Kemampuan standar update-manageradalah campuran dari upgradedan dist-upgrademode apt-get: ia dapat menambah tetapi tidak menghapus paket - itu memanggil alat "Peningkatan sebagian" ketika penghapusan diperlukan. Saat menggunakan baris perintah, gunakan apt-get upgrade. Jika Anda melihatnya melaporkan bahwa paket telah "ditahan", jalankan apt-get dist-upgradeuntuk mengambil pembaruan yang tersisa.
pablomme
33

Upgrade pada dasarnya hanya akan meningkatkan paket yang ada dari satu versi ke versi lain. Itu tidak akan menginstal atau menghapus paket, bahkan jika hal itu diperlukan untuk meningkatkan yang lain. Dalam hal pembaruan kernel, memutakhirkan paket linux-generic membutuhkan menginstal paket linux-3.0.0-13-generik yang baru, dan karena upgrade menolak untuk menginstal atau menghapus paket, ia menolak untuk memperbarui linux-generic.

Kadang-kadang berbagai ketidakcocokan antar paket akan memerlukan beberapa paket untuk dihapus untuk meningkatkan yang lain, dan itu juga akan memerlukan dist-upgrade. Pembaruan kernel akan selalu memerlukan dist-upgrade karena cara penanganannya. Daripada memiliki paket kernel yang diperbarui, paket kernel yang sama sekali baru dibuat setiap kali, dan metapackage kernel diperbarui untuk bergantung pada paket kernel baru, bukan yang lama. Ini dilakukan agar Anda tetap menggunakan versi kernel lama sehingga jika ada masalah dengan mem-boot kernel baru, Anda dapat memilih yang lama dari menu boot dan memulihkan.

psusi
sumber
2
Intisari terbaik. Meski begitu, bagaimana cara menyimpan paket tertentu?
0xC0000022L
11

The apt-get upgradePerintah biasanya hanya akan menginstal update (atau perbaikan) untuk paket yang terinstal. Biasanya, rilis baru Mozilla Firefox , misalnya, akan diinstal dengan perintah ini.

Namun umumnya TIDAKapt-get upgrade akan menginstal rilis baru, di mana perubahan besar (termasuk penghapusan paket atau pembaruan GRUB diperlukan). Misalnya, ketika kernel Linux baru (linux-image-3.xx-xx-generic, dll.) Tersedia, paket tidak akan diinstal.

Untuk menginstal kernel baru, Anda harus menjalankannya apt-get dist-upgrade. Anda akan diberitahu ketika Anda menjalankan apt-get upgrade, karena akan mengatakan bahwa paket-paket tertentu telah ditahan. Itu isyarat Anda untuk menggunakan: apt-get dist-upgrade.

david6
sumber
12
Ini menyesatkan. dist-upgradetidak akan memutakhirkan ke rilis baru kecuali sources.listtelah dimodifikasi sesuai (dan bahkan kemudian, itu bukan cara yang didukung untuk memutakhirkan di Ubuntu). Ketika kernel baru diinstal dengan dist-upgrade, itu bukan rilis baru Ubuntu . Itu hanya paket baru. Lebih jauh, klaim "atau pembaruan GRUB diperlukan" salah. sudo apt-get upgradesangat mampu memperbarui paket dalam situasi di mana GRUB harus diperbarui, selama tidak ada paket yang dihapus dan paket baru diinstal. update-grubdijalankan secara otomatis, seperti biasa.
Eliah Kagan
2
Anda harus menulis jawaban Anda sendiri, karena itu tidak menambah kejelasan bagi saya.
david6
2
Selain apa yang disebutkan Eliah, poin penting adalah bahwa apt-get upgradetidak akan menghapus atau menambah paket. Jika perbaikan untuk suatu paket memerlukan paket baru, pembaruan akan ditahan. Jawaban pablomme , yang Anda revisi menjadi kurang akurat, lebih baik dan saya menyarankan pembaca untuk pergi ke yang itu.
Chan-Ho Suh
1
Koreksi: apt-get upgradetidak akan pernah menginstal atau menghapus paket apa pun. Pembaruan kernel dikemas sebagai paket baru dan sebagai hasilnya, apt-get upgradetidak akan pernah memutakhirkan kernel. Fakta bahwa peningkatan kernel melakukan perubahan "besar" seperti konfigurasi GRUB bukanlah alasan untuk perbedaan antara upgradedan dist-upgrade.
Mikko Rantalainen
1

Pilihan terbaik Anda adalah:

apt full-upgrade

-yang secara otomatis menangani dependensi saat meningkatkan paket; sedangkan:

apt upgrade

-tidak JANGAN menangani secara otomatis saat meningkatkan paket.

- duBtrotterS

Brett Maddox-Stroud
sumber