Apt-get güncellemesini ne zaman ve neden kullanmalıyım?


15

Genel Soru:

Bazıları komutun ne yaptığını apt-get updateve ne zaman kullanmam gerektiğini açıklayabilir mi?


Uyarılar

Lütfen ayrıntılı bir cevap verin . Sürümünüz gerçekten ayrıntılı olmadıkça, yalnızca man sayfasının bir kopyası değil (aşağıdaki man sayfasından bir tanım koydum).

apt-get update : Paket dizin dosyalarını kaynaklarından yeniden senkronize etmek için kullanılır. Kullanılabilir paketlerin dizinleri /etc/apt/sources.list(5) 'de belirtilen konumlardan getirilir. Güncelleme, yükseltme veya dağıtımdan önce her zaman gerçekleştirilmelidir.


Alt sorular:

  • Paket dizini nerede saklanır? Veritabanında mı? Bir dosyada mı?
  • apt-get installÖnbelleği güncellemeden yaparsam ne olur ? Uzak paketin artık mevcut olmaması ve bağlantının kopması ihtimali var mı?
  • Deb depoları hakkında üzerinde mutabık kalınmış bazı politikalar var mı? Örneğin, bir havuz paketin yalnızca son sürümünü mi yoksa tam tersine belirli bir dağıtım sürümü için mevcut tüm sürümleri mi içermelidir?

bağlam

Sorumu soruyorum çünkü Docker çerçevesini inceliyorum . Özelliklerinden biri, bu dosyadan bazı talimatlar yürüterek bir tür OS görüntüsü oluşturmanıza izin veren Dockerfile'dır . Bu görüntünün bir özelliği, bağlam ne olursa olsun (derleme zamanı, vb.) Her zaman aynı olması gerektiğidir.

Korkarım ki apt-get updatefarklı zamanlarda komut başlatırsam sonuç farklı olur ve böylece görüntülerim farklı olur.


Bence bu yazı üst düzey bir soru sormak için bir wiki makalesi olabilir. Çok kullanışlı.
Zerodf

Yanıtlar:


12

apt-get update kullanılabilir paketlerin listesini indirir.

Paketlerin listesi zamanla değişebilir. Yeni paketler eklenir ve eski paketler kaldırılır. Bu nedenle, gerçekten eski bir önbelleğiniz varsa ve bunu yapmaya çalışırsanız apt-get install, artık var olmayan bir paketi indirmeye çalışabilir.
Eski bir paketin bir depoda ne kadar süreyle depolandığı, depo bakıcısına (dağıtımınıza) bağlıdır. Bu nedenle, önbelleğin çok eski olabileceği docker gibi bir şey kullanıyorsanız, apt-get updateherhangi bir paket yüklemeden önce her zaman çalıştırmalısınız .

Paketleri kaldırmanın ve eklemenin nedeni çoğunlukla hata düzeltmeleri ve güvenlik güncellemeleri. PPA gibi 3. taraf depoları kullanıyorsanız, her şey yolunda gidiyor.

Kurumsal bir ortamda konteynerleme için liman işçisi gibi bir şey kullanırken, kapsayıcıyı bir kez oluşturmalı ve daha sonra bu kapsayıcıyı çeşitli sürüm ortamlarınızda (geliştirme, hazırlama, üretim) taşımalı ve her seferinde kabı yeniden oluşturmamalısınız. Bu, test edilmemiş farklı bir kap almamanızı sağlayacaktır.

Önbellek dosyalarının nerede yaşadığını sorunuzu yanıtlamak için /var/lib/apt/lists,.


Mükemmel cevap! Teşekkür ederim! "(...) kapsayıcısını her seferinde yeniden oluşturmamak için yanıt vermek istiyorum . Bu, test edilmemiş farklı bir kap almamanızı sağlayacaktır." Ben iyi bir uygulama asla apt-get yükseltme kullanmak olduğunu okudum . Bunun nedenlerinden biri şöyledir : "Ayrıca, tutarsız görüntüler de üretir, çünkü artık uygulamanızın nasıl çalışması gerektiği ve hangi bağımlılık sürümlerinin görüntüye dahil edildiği konusunda tek bir doğru kaynağınız yoktur." O zaman aynı sorun değil apt-get updatemi? Ve Dockerfile'ın görüntüyü garanti etmesi gerekmiyor mu?
Pierre-Jean

2
Tür. apt-get updateyalnızca yeni kurulan paketleri etkiler. Mevcut paketler sadece yeni paketler gerektiğinde yükseltilecektir (bu minimum olmalıdır). İle apt-get upgradesize bir çok farklı görüntüler elde, mevcut olanların dahil tüm paketleri yükseltin. Bu, dockerfile'dan her oluşturduğunuzda farklı bir sonuçla sonuçlanabilir, ancak çok ortamlı bir sürümden geçerseniz bunun ciddi bir sorun olduğunu düşünmüyorum. Dockerfile'ı diğer insanlara dağıtır ve oluşturmasını isterseniz, bu daha önemli bir konudur.
Patrick

0

Bazıları apt-get güncellemesinin ne yaptığını ve ne zaman kullanmam gerektiğini açıklayabilir mi?

apt-get update Güncelleştirilmiş dizinleri dağıtımın paket depolarından indirir, kullanılabilir tüm paketleri ve kesin sürümlerini listeler.

Ubuntu ve Debian gibi yaygın dağıtımlar genellikle paket tekliflerinde muhafazakar ve geriye dönük olarak uyumludur, bu nedenle sürümler zamanla çok fazla değişmez; güvenlik güncelleştirmeleri veya hata düzeltmeleri nedeniyle değişeceklerdir. Örneğin, mysql 'den' 5.7.18e yükseltilebilir 5.7.19ancak ' den yükseltilemez 6.x.

Paket dizini nerede saklanır? Veritabanında mı? Bir dosyada mı?

Genellikle içindeki bir veya daha fazla dosyada saklanır /var/lib/apt. Docker bağlamında bu dosyalar görüntünün içindedir. Dockerfile dosyasını oluştururken, yeni oluşturulan görüntü olarak oluşturulan ve kalıcı olan yeni dosya sistemi katmanlarında depolanırlar.

Önbelleği güncellemeden apt-get yüklemesi yaparsam ne olur?

Artık mevcut olmayan paket sürümlerini indirmeyi deneyebilirsiniz. Bu, sanal makinelerde oldukça yaygındır, ancak dağıtım havuzları temel görüntü oluşturulduktan sonra yeni paketler yayınladıysa da konteynerlerin içinde mümkündür. Dağıtım koruyucular ve Dockerfile koruyucular arasında dağıtımdan aşağı akış yönünde olan ve sayıca daha büyük olabilen bir koordinasyon olmayabilir. Yalnızca bir Debian deposu var, ancak binlerce jessietabanlı kapsayıcı görüntüsü ve Dockerfile var.

Ayrıca, ubuntu one gibi bazı yukarı akış görüntüleri , görüntüyü daha küçük hale getirmek ve eski dosyaları önlemek için indirilen dizini kaldırır . Bu nedenle, temel bir görüntünün en son dizinle birlikte gönderilmesi için değil, temel bir görüntünün üzerine inşa edilirken güncellenmiş bir dizinin indirilmesi beklenir.

Uzak paketin artık mevcut olmaması ve bağlantının kopması ihtimali var mı?

Kesinlikle, çünkü dizinde saklanan sürümleri çok hassas olduğu için 5.7.19(basitleştirme; daha benzer 5.7.19-0ubuntu1).

Deb depoları hakkında üzerinde mutabık kalınmış bazı politikalar var mı? Örneğin, bir havuz paketin yalnızca son sürümünü mi yoksa tam tersine belirli bir dağıtım sürümü için mevcut tüm sürümleri mi içermelidir?

Bir güncelleştirme hazır olduğunda eski küçük sürümlerin hızlı bir şekilde kaldırılması yaygındır; Bence ikili dosyalar onlarca megabayt ağırlığında, desteklenen tüm sürümleri ve mimarileri ile çarpılabilir sunucularda yer kazanmak için olduğunu varsayalım. Bu nedenle, mesela mysql-5.7.18daha sonra sabitlemek genellikle imkansızdır apt-get install; Yakında kadar mysql-5.7.19dağıtımında bırakıldığında önceki bir kaldırıldı alacak.

Docker için adil olmak gerekirse, bu determinizm apt-get updateher dağıtımın paket yönetiminin bir parçası olarak ortaya çıkan bir konudur. Bir EC2 veya Vagrant sanal makinesi tekrarlanabilir bir şekilde oluşturmaya çalışırken aynı sorunu yaşarsınız.

Bazı sistem yöneticileri , orijinal depoları yansıtmak ve belirli bir sürümü sabitlemek için Aptly gibi hizmetleri kullanır , ancak güncelleştirmeleri sınamak ve yaptığınız şeyi değiştirmek için sık sık çalıştırılan ayrı bir işleminiz yoksa, güvenlik güncelleştirmelerini kaçırmak riskiyle karşı karşıya kalırsınız. sabitleniyor.

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.