Mengapa pemisahan pembaruan dan peningkatan bahkan ada?


12

Saya mengerti bahwa dalam apt, perintah update, memperbarui daftar paket yang tersedia, tetapi tidak memutakhirkan perangkat lunak yang sudah diinstal dari paket ini.

Saya juga memahami bahwa upgradememutakhirkan semua perangkat lunak yang telah saya instal dari paket yang saya perbarui dengan updatesebagaimana dijelaskan di atas.

Apa alasan pengembang Ubuntu / Debian untuk melakukan pemisahan ini updatedan upgradesebaliknya bekerja dengan satu perintah untuk melakukan kedua tugas?

Ini lebih merupakan pertanyaan tentang filosofi arsitektur pengembang Ubuntu.


Jika saya akan menginstal banyak aplikasi (dan mengelompokkannya, jadi satu perintah untuk satu grup, perintah berikutnya untuk yang berikutnya, dll), mengapa saya ingin mengunduh repo untuk setiap grup - dengan memisahkan repo.update dan langkah pemasangan selanjutnya saya bisa menghemat bandwidth. Jika saya ingin perintah untuk melakukan keduanya, saya bisa skrip atau aliasitu pula. Cara unix adalah satu perintah melakukan satu hal saja, jadi memisahkan lebih cocok dengan cara unix jika argumen 'teologis / filosofis' adalah Anda juga.
guiverc

demikian juga, jika saya pergi apt dist-upgradedan tekan "n" untuk membatalkan, maka ubah pikiran saya saya akan menghemat bandwidth karena itu tidak akan 'memperbarui' untuk melakukan kembali apt dist-upgradeperintah saya ... Bahkan jika 'dist-upgrade' melakukan pembaruan secara otomatis, ada alasan untuk 'memperbarui' yang tidak termasuk 'install', 'upgrade' atau 'dist-upgrade' sehingga perintah 'update' tetap ada ..
guiverc

Saya berpendapat bahwa pemisahan seharusnya tidak ada dari perspektif pengguna, dan bahwa tindakan apt updateseharusnya hanya berjalan secara otomatis ketika diperlukan.
Robie Basak

Jawaban:


7

Pemutakhiran bukan satu-satunya waktu yang mungkin Anda perlukan apt-get update, dan saya tidak ingin memperbarui setiap kali saya hanya ingin memperbarui daftar paket.

Sebuah apt-get upgradesumur kerja mungkin bergantung pada apt-get updatedijalankan belum lama ini, tetapi kemudian itu benar apt-get removedan apt-get installjuga! Haruskah semua ini menyiratkan apt-get update? Tentu saja tidak! Sebagai masalah sederhana efisiensi sumber daya dan desain bersih, jika suatu operasi adalah umum untuk beberapa operasi lain, itu harus diperhitungkan.

Sebaliknya, mengingat hal itu apt-get removedan apt-get installmungkin juga bergantung pada apt-get updatedijalankannya baru-baru ini untuk menyelesaikannya dengan sukses, apakah masuk akal apt-get upgradeuntuk setiap putaran apt-get update? Tidak, lagi, karena apa yang ingin saya lakukan mungkin bertentangan dengan apa yang apt-get upgradeakan dilakukan.


6

Setiap kali Anda mengubah sumber perangkat lunak, Anda harus menjalankan perintah sudo apt updateuntuk memperbarui daftar perangkat lunak yang tersedia. Kemudian Anda dapat mencari paket yang tersedia di sumber perangkat lunak baru yang baru saja Anda tambahkan dan / atau menginstalnya.

Perintah sudo apt upgradeini setara dengan terminal untuk memperbarui daftar paket yang diinstal menggunakan aplikasi Pembaruan Perangkat Lunak. Ini berbeda dari alur kerja normal menambahkan sumber perangkat lunak baru, memperbarui daftar perangkat lunak yang tersedia untuk menyertakan paket dari sumber perangkat lunak baru, dan menginstal paket baru dari sumber perangkat lunak baru yang baru saja Anda tambahkan, sehingga lebih nyaman dan kurang membingungkan itu sudo apt updatedan sudo apt upgrademerupakan perintah terpisah.

Ini juga kurang membingungkan untuk dipisahkan sudo apt updatedan sudo apt upgradekarena ketika Anda menjalankan dengan sudo apt updatesukses Anda telah mengkonfirmasi bahwa Anda memiliki konektivitas internet. Jika ada masalah saat menjalankan sudo apt upgradesetelahnya, masalahnya lebih cenderung menjadi masalah manajemen paket daripada masalah dengan konektivitas internet, dan hasil dari sudo apt upgradeakan memberikan petunjuk untuk mendiagnosis dan menyelesaikan masalah.


5

Sejarah perbedaan antara updatedan upgradeini sebenarnya cukup keren.

Dulu, dulu sekali - katakan sekitar 2000 atau lebih, bertahun-tahun sebelum Ubuntu ada -, bandwidth dan ruang disk jauh lebih terbatas ... meskipun ekspansif dibandingkan dengan pertengahan 1990-an. Broadband baru saja dimulai, dan dialup masih merupakan cara vital untuk online. Disk besar masih hanya beberapa ratus MB. Apt mengkilap dan baru, radikal dan revolusioner, dibangun di atas dpkg.

Basis data yang tepat, ketika Anda memikirkannya, adalah sebuah keajaiban: Ini adalah basis data yang akurat dari semua perangkat lunak dari semua repositori yang dikenal. Ini cukup rinci untuk menghitung dependensi dan mengidentifikasi peningkatan yang tersedia, namun cukup kecil untuk mengirimkan melalui modem dial-up waktu dan untuk menyimpan pada drive kecil pada waktu itu. Memperbarui basis data Anda melalui telepon mungkin memerlukan waktu beberapa menit melalui koneksi yang baik. Sementara itu sudah lama sekarang, mencari pembaruan paket secara manual (sebelum apt) dapat menghabiskan berjam-jam .

Saat itu, distro dibangun secara berbeda - tidak ada Integrasi Berkelanjutan, tidak ada pengujian asap (yah, tidak banyak pengujian sama sekali!), Peternakan dibangun baru saja dimulai. Peningkatan harus lebih sering dikembalikan daripada sekarang. Banyak pengguna memilih untuk tidak memutakhirkan paket tertentu karena berbagai alasan, atau hanya memilih pemutakhiran tertentu hari ini (untuk menguji secara manual), dan pemutakhiran lainnya besok.

Selama 15 atau lebih tahun berikutnya, alat tidak banyak berubah, itulah sebabnya kami masih memiliki tindakan updatedan terpisah upgrade. The alur kerja pengguna telah berkembang sebagai keandalan distro telah meningkat, dan banyak sumber / update / manajemen upgrade yang digunakan untuk menjadi pengguna telah perlahan-lahan tersembunyi di balik lapisan otomatisasi ( software-updater, unattended-upgrades).

Memodernisasi alat paket perangkat lunak adalah salah satu alasan Snaps dan AppImage dan Flatpack baru-baru ini muncul, tetapi itulah bab selanjutnya.


2

Mereka melakukan hal-hal yang terpisah karena berbagai alasan.

Salah satu contohnya adalah pertanyaan yang saya posting dan jawab sendiri: Bagaimana PPA dapat dihapus menggunakan GUI? . Pada layar ini kami ingin menghapus PPA yang tidak memutakhirkan perangkat lunak:

Hapus PPA.png

Setelah mengeluarkan PPA, perangkat lunak GUI otomatis berjalan sudo apt update. Jika Anda menghapus PPA dari baris perintah, Anda harus menjalankannya sudo apt update setelah menghapus PPA dari daftar sumber.

Tanpa apt updatefungsi terpisah tidak ada cara untuk menghapus AKP !.


Contoh lain adalah Anda perlu menjalankan sudo apt updatedari baris perintah untuk menyegarkan sumber. Kemudian Anda dapat menemukan apa yang bisa ditingkatkan tanpa benar - benar meningkatkan:

$ apt list --upgradable
Listing... Done
conky-std/xenial 1.10.1-3 amd64 [upgradable from: 1.9.0-4]
google-chrome-stable/stable 65.0.3325.181-1 amd64 [upgradable from: 63.0.3239.132-1]
libxnvctrl0/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
nvidia-settings/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
peek/xenial 1.3.1-0~ppa23~ubuntu16.04.1 amd64 [upgradable from: 1.2.1-0~ppa20~ubuntu16.04.1]

Melihat output yang Anda dapat memutuskan untuk memiliki paket yang diberikan "disematkan" atau "ditahan" dan tidak ditingkatkan pada saat `sudo apt upgrade" dijalankan. Jika ada satu proses "pembaruan / peningkatan" Anda akan kehilangan kemampuan ini .

Tanpa terpisah apt updateAnda tidak dapat melihat apa yang akan ditingkatkan!


Para kedua salah. yumdan dnfsecara otomatis menjalankan yang setara dengan pembaruan saat melakukan operasi yang relevan. Misalnya, setara apt list --upgradableyaitu yum check-update, yang update daftar paket jika tidak diperbarui baru-baru. Ini tentu mungkin untuk bekerja, seperti yang dapat dilihat pada manajer paket lainnya.
muru

@muru Ini didasarkan pada jawaban up-vote 238 ini yang mengatakan Anda harus menjalankan sudo apt updatesetelah menghapus repositori.
WinEunuuchs2Unix

bagian kedua --- yang dipisahkan, kemudian.
muru

Sekarang Anda menyebutkannya, itu juga salah. Seperti dapat dilihat dari contoh yum/ dnflagi, operasi pembaruan otomatis, sehingga sumber yang dinonaktifkan secara otomatis dihapus dari operasi berikutnya. Sekali lagi, sesuatu yang sepenuhnya mungkin.
muru

@muru Juga, setidaknya di sistem saya, tidak yumjuga dnftidak diinstal. Menginstal salah satunya untuk menggantikan apt updateakan meningkatkan overhead sistem dan waktu belajar.
WinEunuuchs2Unix

0

Orang bisa bertanya mengapa harus mengunduh program dari repositori Ubuntu formal aptlalu menginstalnya? Apa bedanya jika Anda pertama kali mengunduhnya dan kemudian menginstalnya daripada mengunduh dan menginstal dalam satu operasi?

Nah setelah membaca komentar dan berpikir lebih lanjut tentang ini saya mengerti bahwa ini disebabkan oleh filosofi Unix , filosofi modular yang pada dasarnya mengatakan "Setiap program melakukan satu hal": Pertama unduh, lalu instal --- setiap tindakan dengan program khusus sendiri .


0

Dalam distribusi tidak, ada satu perintah pembaruan-upgrade hal, jika ada, itu hanyalah alias yang sudah ditentukan sebanyak yang saya kira. Alias-alias itu dapat dengan mudah diatur di Ubuntu juga, dengan mengedit ~ / .bashrc.

Pembaruan digunakan untuk menyinkronkan ulang repositori dan memperbaiki masalah apa pun di sana. Kemudian ketika Anda Upgrade, Anda sebenarnya ugrade paket diinstal Anda. Tetapi ketika Anda Dist-Upgrade, Anda meningkatkan secara penuh. Di Arch linux, mereka menekankan peningkatan penuh dengan Syu. Anda dapat melakukan hal yang sama di Ubuntu. Dalam pemutakhiran penuh, Anda benar-benar menyelesaikan masalah sistem dependensi bijaksana, yang mungkin timbul dalam peningkatan parsial.

Semoga ini bisa membantu. Maafkan teks mentah sebagai tulisan di telepon.


2
yumdan dnfsecara otomatis melakukan hal yang sama updatepada sebagian besar operasi jika data yang di-cache cukup lama. Lihat, misalnya, diskusi tentang mengubah perilaku itu di dnf: lwn.net/Articles/750334
muru
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.