Güncelleme ve yükseltmenin ayrılması neden var?


12

aptKomutta update, kullanılabilir paketlerin listesini güncellediğini anlıyorum , ancak bu paketlerden önceden yüklenmiş olan yazılımı yükseltmediğini biliyorum.

Ayrıca, upgradedaha önce yüklediğim bir paketten daha önce yüklediğim herhangi bir yazılımı updateyukarıda açıklandığı gibi yükselttiğini de anlıyorum .

Bunun bölme yapmak Ubuntu / Debian geliştiricileri neden neydi updateve upgradeher iki görevi yapmak için bir komutla yerine işi?

Bu daha çok Ubuntu geliştiricilerinin mimari felsefesi hakkında bir sorudur.


Çok fazla uygulama yükleyeceğim (ve bunları gruplandırıyorum, bu yüzden bir grup için bir komut, bir sonraki komut için bir sonraki komut), neden her grup için repo'ları indirmek isteyeyim - repo.update ve the sonraki kurulum adımları bant genişliğini kaydedebilirim. Her ikisini de yapmak için bir komut istersem, senaryo yazabilirim ya aliasda yine de. Unix yolu, bir komutun zaten bir şey yapmasıdır, bu yüzden 'teolojik / felsefi' argümanlar da sizseniz, ayırmak unix yoluyla daha iyi uyuyor.
guiverc

benzer şekilde, apt dist-upgradeiptal etmek için "n" tuşuna basarsam, fikrimi değiştirirsem bant genişliğini kaydedeceğim çünkü apt dist-upgradekomutumu yeniden yapmak için 'güncelleme' yapmayacak ... 'dist-upgrade' güncellemeyi yapsa bile otomatik olarak, 'güncelleme' komutunun 'install', 'upgrade' veya 'dist-upgrade' içermeyen nedenleri vardır, böylece 'update' komutu yine de var olur ..
guiverc

Ben ettik savundu ayırma kullanıcı perspektifinden olmadıklarından ve eylem olduğu apt updategerektiğinde sadece otomatik olarak çalışmalıdır.
Robie Basak

Yanıtlar:


7

Yükseltme yapmanız gereken tek zaman apt-get updatedeğildir ve paket listelerini her güncellemek istediğimde yükseltmek istemiyorum.

İyi bir apt-get upgradeçalışma apt-get update, uzun zaman önce yapılmasına bağlı olabilir , ancak bu doğru apt-get removeve apt-get installde doğrudur ! Bunların hepsi ima etmeli apt-get updatemi? Tabii ki değil! Basit bir kaynak verimliliği ve tasarım temizliği meselesi olarak, bir işlem diğer birçok işlem için ortak ise, etkisiz hale getirilmelidir.

Bunun tersine, başarılı bir şekilde bitirmek için son zamanlarda çalıştırılmaya da bağlı olduğu apt-get removeve her bir çalışması için mantıklı mı? Hayır, yine, yapmayı planladığım şey yapacaklarla çelişebilir .apt-get installapt-get updateapt-get upgradeapt-get updateapt-get upgrade


6

Yazılım kaynaklarını her değiştirdiğinizde, sudo apt updatemevcut yazılım listesini yenilemek için komutu çalıştırmanız gerekir . Ardından, yeni eklediğiniz yeni yazılım kaynağındaki kullanılabilir paketleri arayabilir ve / veya yükleyebilirsiniz.

Komut sudo apt upgrade, Software Updater uygulamasını kullanarak kurulu paketler listesini yükseltmenin terminal eşdeğeridir. Bu, yeni bir yazılım kaynağı ekleme, mevcut yazılım listesini yeni yazılım kaynağından paketler içerecek şekilde güncelleme ve yeni eklediğiniz yeni yazılım kaynağından yeni paketler yükleme normal iş akışından farklıdır, bu nedenle daha kullanışlıdır ve daha az kafa karıştırıcı sudo apt updateve sudo apt upgradeayrı komutlardır.

Ayırmak daha az kafa karıştırıcıdır sudo apt updateve başarılı bir şekilde sudo apt upgradeçalıştığınızda sudo apt updateinternet bağlantınız olduğunu doğrulamış olursunuz. Daha sudo apt upgradesonra çalışırken bir sorun varsa , sorunun internet bağlantısı ile ilgili bir sorundan ziyade bir paket yönetimi sorunu olması muhtemeldir ve sonuçları sudo apt upgradesorunun teşhis edilmesi ve çözülmesi için ipuçları sağlayacaktır.


5

Arasındaki farkın tarih updateve upgradeaslında oldukça serin olduğunu.

Uzun, uzun zaman önce - Ubuntu'nun varlığından yıllar önce yaklaşık 2000 yıl önce - bant genişliği ve disk alanı çok daha sınırlıydı ... 1990'ların ortalarına kıyasla genişti. Geniş bant daha yeni başlıyordu ve çevirmeli bağlantı hala çevrimiçi olmanın hayati bir yoluydu. Büyük diskler hala sadece birkaç yüz MB idi. Apt, parlak ve yeni, radikal ve devrimci, dpkg üzerine inşa edilmişti.

Apt veritabanı, bunu düşündüğünüzde bir harikadır: Bilinen tüm depolardaki tüm yazılımların dakik bir veri tabanıdır . Bağımlılıkları hesaplamak ve mevcut yükseltmeleri tanımlamak için yeterince ayrıntılıdır, ancak zamanın çevirmeli modemleri üzerinden iletim yapmak ve zamanın küçük sürücülerine depolamak için yeterince küçüktür. Veritabanınızı telefonla güncellemek iyi bir bağlantı üzerinden birkaç dakika sürebilir . Bu çok uzun bir süre olsa da, paket güncellemelerini manuel olarak (apt'den önce) aramak saatler sürebilir .

O zamanlar dağıtımlar farklı şekilde inşa edildi - Sürekli Entegrasyon yok, duman testi yok (hiç, çok fazla test yok!), İnşaat çiftlikleri yeni başlıyordu. Yükseltmeler şimdi olduğundan daha sık geri döndürülmek zorunda kaldı. Birçok kullanıcı seçti değil yarın çeşitli nedenlerle bazı paketleri yükseltme veya (el testine) sadece belirli yükseltmeleri bugün seçmek için, ve diğer yükseltmeleri.

Takip eden 15 yıl boyunca, araçlar çok fazla değişmedi, bu yüzden hala ayrı updateve upgradeeylemlerimiz var. Kullanıcı iş akışı dağıtıma güvenilirlik geliştirdi olarak gelişmiştir ve çok kaynak / güncelleme / yükseltme yönetiminin yavaşça otomasyon katmanları arkasında gizlendi manuel olarak kullanılan ( software-updater, unattended-upgrades).

Yazılım paketi araçlarını modernize etmek, Snaps ve AppImage ve Flatpack'in yakın zamanda ortaya çıkmasının bir nedenidir, ancak bu bir sonraki bölümdür.


2

Birçok nedenden dolayı ayrı şeyler yaparlar.

Bir örnek, gönderdiğim ve kendi kendime yanıtladığım bir soru: PPA'lar GUI kullanılarak nasıl kaldırılabilir? . Bu ekranda yazılımı yükseltmeyen PPA'ları kaldırmak istiyoruz :

PPA.png kaldır

Bir PPA kaldırıldıktan sonra GUI yazılımı otomatik olarak çalışır sudo apt update. Bir PPA'yı komut satırından kaldıracaksanız, PPA'yı kaynak listesinden çıkardıktan sudo apt update sonra çalıştırmanız gerekir .

Ayrı bir apt updatefonksiyon olmadan bir PPA! 'Yı çıkarmanın yolu yoktur.


Başka bir örnek, sudo apt updatekaynakları yenilemek için komut satırından çalıştırmanız gerektiğidir . Sonra öğrenebilirsiniz olabilir yükseltilebilir olmadan aslında yükseltme:

$ 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]

Çıktıya baktığınızda, belirli bir "sabitlenmiş" veya "geri tutulmuş" pakete sahip olmaya ve bir sonraki `sudo apt yükseltme" çalıştırıldığında yükseltilmemeye karar verebilirsiniz.Tek bir "güncelleme / yükseltme" işlemi olsaydı, bu yeteneği kaybedersiniz. .

Ayrı olmadan apt updatene yükseltilecek göremezsiniz!


İkinci para yanlıştır. yumve dnfilgili işlemleri yaparken otomatik olarak bir güncellemenin eşdeğerini çalıştırır. Örneğin, eşdeğeri, apt list --upgradableson yum check-updategüncellenmemişse paket listesini güncelleyen olan. Bunun diğer paket yöneticilerinde de görüldüğü gibi çalışması kesinlikle mümkündür.
muru

@muru Bir havuzu kaldırdıktan sonra çalıştırmanız gerektiğini söyleyen bu 238 yukarı oylama cevabına dayanıyor sudo apt update.
WinEunuuchs2Unix

ikinci --- ayrılmış bölüm, sonra.
muru

Şimdi bahsettiğinize göre, bu da yanlıştır. Örneğinde görüldüğü gibi yum/ dnfdevre dışı bırakılmış bir kaynak otomatik olarak bir sonraki işlem çıkarılır, böylece daha güncelleştirme işlemi, otomatik olarak yapılır. Yine, tamamen mümkün olan bir şey.
muru

@muru Ayrıca, en azından sistemimde, ne yüklü ne yumde dnfyüklü. Bunlardan birini değiştirmek için apt updatesistem ek yükü ve öğrenme süresi artar.
WinEunuuchs2Unix

0

Bir program neden resmi Ubuntu deposundan indirmek ve aptsonra yüklemek için sorabilirsiniz ? Tek bir işlemde indirip yüklemek yerine önce indirip yüklerseniz ne fark eder?

Yorumları okuduktan ve bunun üzerine daha fazla düşündükten sonra, bunun Unix felsefesinden , temel olarak "Her program bir şey yapar" diyen modüler bir felsefeden kaynaklandığını anlıyorum : İlk indirme, sonra yükleme --- her eylem kendi özel programı ile .


0

Hiçbir dağıtımda, bir komut güncelleme-yükseltme şey var, eğer varsa, tahmin ettiğim kadarıyla önceden tanımlanmış takma adlardan başka bir şey değildir. Bu takma adlar ~ / .bashrc düzenleyerek Ubuntu üzerinde de kolayca ayarlanabilir.

Güncelleme, depoları yeniden senkronize etmek ve buradaki sorunları düzeltmek için kullanılır. Sonra Yükseltme, aslında yüklü paketleri yükseltmek. Ancak Dist-Upgrade yaptığınızda, tam olarak yükseltirsiniz. Arch linux'da, Syu ile tam yükseltmeyi vurguladılar. Aynı şeyi Ubuntu'da da yapabilirsiniz. Tam yükseltmede, kısmi yükseltmede ortaya çıkabilecek herhangi bir bağımlılık sorunu sistemini akıllıca çözersiniz.

Umarım yardımcı olur. Lütfen ham metni telefonda yazarken affedin.


2
yumve önbelleğe alınan veriler yeterince eskiyse çoğu işlemde dnfotomatik olarak eşdeğerini yapın update. Örneğin, bu davranışı dnf'de
muru
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.