Belirli bir paketin güncellenmesi nasıl önlenir?


374

# 693758 numaralı hata nedeniyle apt-get upgrade, "libgtk2.0-0" paketini güncellemesini önlemek ve Güncelleme Yöneticisini önlemek istiyorum .

Bu nasıl başarılabilir?


@ hhlp: Ancak bu soru hiç yüklenmemiş bir paket hakkında soruyor.
Nathan Osman

1
@George Edison - Paketi güncellememenize izin veren bir paket tutma da vardır. Bu nedenle, bir paketin temelde olması paket yöneticisine, ne olursa olsun geçerli sürümü tutmasını söylediğiniz anlamına gelir. Bu, çalışmakta olan bir programın daha yeni bir sürümünün bir güncellemeden sonra kopması durumunda kullanışlıdır. (asla kurulmamış bir paketi tutamazsınız, ayrıca sorumun aynı olduğunu görüyorsunuz) .... şu anda test ettim - dedi kidisable packages from the auto-update
hhlp

Yanıtlar:


554

Tutma

Paketleri geri almanın dört yolu vardır: dpkg, apt, yetenek veya dselect.

dpkg

Bir paketi beklemeye al:

echo "<package-name> hold" | sudo dpkg --set-selections

Tutucuyu çıkarın:

echo "<package-name> install" | sudo dpkg --set-selections

Paketlerinizin durumunu görüntüleyin:

dpkg --get-selections

Tek bir paketin durumunu göster:

dpkg --get-selections | grep "<package-name>"

uygun

Bir paket tutun:

sudo apt-mark hold <package-name>

Tutucuyu çıkarın:

sudo apt-mark unhold <package-name>

Tüm paketleri beklemeye al:

sudo apt-mark showhold

dselect

Dselect ile [S] seçim ekranına girin, mevcut durumda tutmak istediğiniz paketi bulun ve =veya tuşuna basın H. Değişiklikler [S] seçim ekranından çıktıktan hemen sonra etkili olacaktır.


Bir paketin yetenek veya sinaptik içinde kilitlenmesi / tutulması apt-get / apt'yi etkilememesi nedeniyle aşağıdaki yaklaşımlar sınırlıdır.

yetenek

Bir paket tutun:

sudo aptitude hold <package-name>

Tutucuyu çıkarın:

sudo aptitude unhold <package-name>

Synaptic Package Manager ile kilitleme

Git Synaptic (Sistem> Yönetim> Synaptic Paket Yöneticisi).

Ara düğmesini tıklayın ve paket adını yazın.

Paketi bulduğunuzda, onu seçin ve Paket menüsüne gidin ve Sürümü Kilitle'yi seçin .

Sinaptik menü

Bu paket şimdi güncelleme yöneticisinde gösterilmeyecek ve güncellenmeyecektir.


4
Bu aynı zamanda bir paketin kurulmasını önlemek için de çalışır. Takarken devscripts, paketlenen bir çok Tavsiye edilen paketler olarak çekilir. Bir posta sunucusuna (postfix) ihtiyacım olmadığı için çalıştırmadan echo postfix hold | sudo dpkg --set-selectionsönce çalıştırarak kurulumunu devre dışı bırakabilirim sudo apt-get install devscripts. Bu bekletme eylemi yalnızca bu kurulum için devam eder, kurulumdan sonra seçimler sıfırlanır.
Lekensteyn

3
Ayrıca dikkat çekmeye değer olan paket sahipleri, bazen bir bağımlılığın hesaplayabileceği yasal bir çözümün bulunmadığı bir durum oluşturarak yükseltmeleri ve yamaları bozarlar. Foo paketi libre'ye bir == <veya <= bağımlılığa sahipse, apt, liboyu ve fooyu yükseltmeyi reddedecektir. Zaman içinde, bu basamaklı bağımlılıklar, önemli güvenlik güncellemeleri dahil olmak üzere çok sayıda güncellemeyi engellemek için büyüyebilir. Bekletmeyi kaldırmanız ve yükseltmenin gerçekleşmesine izin vermeniz veya, varsa, bağımlılıklarının daha yeni sürümlerine karşı tuttuğunuz paketleri yeniden oluşturmanız gerekir.
Stephanie

2
Sadece bir not: 0.7.25 (Ubuntu Lucid) versiyonunda apt-markdesteklemiyorhold
Joril

1
Bu, özellikle grafik sürücülerini geri tutmaya çalışırken kullanışlıdır. ATI kullanıcıları için apt-mark hold fglrx fglrx-amdcccle fglrx-dev && aptitude hold fglrx fglrx-amdcccle fglrx-dev,.
earthmeLon

8
Şu anda sinaptik ve yetenek yalnızca bu programlar içindeki paketleri kilitlemektedir. "Paket güncellemelerini yapan başka bir şey (okuma: Güncelleme Yöneticisi, apt-get, yetenek, vb.) Bunu görmezden geliyor." Gönderen bu soruya .
holocronweaver

44

Bir paketi "foo" beklemeye almak için:

echo "foo hold" | dpkg --set-selections

Senin durumunda, şarabı beklemeye alacağız:

sudo -i
echo "wine hold" | dpkg --set-selections

Bekletmeyi kaldırmak için:

sudo -i
echo "wine install" | dpkg --set-selections

Ayrıca bir paket bekletilirken, sen dikkat edebilirsiniz yoluyla belirli bir sürümünü yükleyin apt-get install wine=1.2.3. Beklemede olmak apt-get (dist-)upgradeonu değiştirmeyi önler .
rcoup

@rcoup Beklemede eski bir sürüme sahipseniz ve ardından bekletmeyi kaldırmadan kaldırmadan el ile yeni bir sürüme yükseltirseniz, eski sürüm geri dönebilmeniz için önbellekte saklanır mı?
cxrodgers

1
yerel önbellek (genellikle @cxrodgers /var/cache/apt/archives) bağımsızdır ve yükseltmeleri ve malzeme tutar, bu yüzden orada olacak indirdiğiniz tüm sürümlerini bitene kadarapt-get [auto]clean
rcoup

35

Aynı şeyi arıyordum ve birçok araştırmadan sonra, aşağıdaki sözdizimini kullanarak belirli bir sürümü yasaklayabileceğinizi ancak bir sonraki güncellemeye izin verebileceğinizi buldum:

Paket: compiz-plugins-main
Pin: sürüm 1: 0.9.7.0 ~ bzr19-0ubuntu10.1
Pin Önceliği: -1

Bu / etc / apt / preferences dosyasına gider.


9
Bu, güncellemeleri süresiz olarak önlemekten çok daha iyi bir yoldur
Eero Aaltonen

Bu yöntemle, bence, şans ... ubuntu bir veya sonraki sürümü yükseltme ile yeniden olmaktan amazon simgesi gibi ubuntu 'adware' önlemek için büyüktür
Daniel Alder

19

synapticKullanarak yükleyin sudo apt-get install synaptic.

Kullanarak çalıştırın gksudo synapticve arama kutusundaki kilitlemek istediğiniz paketi bulun.gedit

görüntü tanımını buraya girin

Paket menüsünden Sürümü kilitle'yi seçin :

görüntü tanımını buraya girin

Ve hepsi bu, kilitleme sırasında şu anda yüklü olan sürüm yükseltme sırasında bile yüklü kalacaktır.


7
Lütfen bakınız "Kilit sürümü göründüğü kadar akıllı değildir. Kalayında ne yazması gerekiyorsa, sürümü kilitleyin ... Ama yalnızca Synaptic içerisinde kilitlenir. , apt-get, yetenek, vb.) bunu görmezden gelir. Bu, muhtemelen davranış bozukluğudur, bu yüzden zaman içerisinde düzeltilmesini beklerdim. " dan askubuntu.com/questions/9607/what-does-lock-version-do . Mevcut durum nedir? Eğer bir şey Synaptic'te kilitliyse, diğer paket yöneticileri kilidi "onurlandırır" mı?

2
vasa1: 0.75.13 sürümünden itibaren, hala hayır :( Yetenekle aynı sorun.
syockit

16

Bir paketin kurulmasını önlemek, "paket tutma" olarak adlandırılır ve yapılması çok kolaydır:

echo package_name hold | dpkg - set seçimleri

... burada * package_name *, yüklenmesini engellemek istediğiniz paketin adıdır.

Not: Yukarıdaki komut, kök ayrıcalıklarını üstlenir. Başka bir deyişle, muhtemelen sudo suçalıştırmadan önce yazmanız gerekir.


Mükemmel bu cevap oldu. Teşekkür ederim.
asoundmove

s/sudo su/sudo -s/g(veya sudo -i). ( -ibir giriş kabuğu verecek, -svermeyecek).
derobert

6

Bir süre apt-getile değiştirildiğinden apt, örneğin, "Tab Grupları" gibi pek çok eklenti yeni Firefox 57 ile artık çalışmadığı için Firefox’un 56’nın üzerindeki sürümlere güncellenmesini önlemek istiyorum. (Bkz. "WebExtensions Güncelleme").

Bir komutla birden fazla paket tutmak ve joker karakterler kullanmak mümkündür.

Firefox'un güncellenmesini önle

sudo apt-mark hold firefox firefox-locale-*

Onları daha sonra tutmak için yanınızda olmanız gerekiyorsa, bu komut olacaktır:

sudo apt-mark unhold firefox firefox-locale-*

4

Belirli bir paketin sürümünü dondurabilirsin sinaptik, bunun apt-get üzerinde değişiklik yapıp yapmadığına göre% 100 emin değilim, ancak güncelleme yöneticisini kesin olarak durduracak.

Bir paketi dondurmak için onu sinaptik olarak seçin, ardından paket menüsünü açın ve sürümü dondur'u seçin.

Bu yardımcı olur umarım

düzenleme: Bu soru 16668 benzer bir durum ile ilgilenir



3

Böcek bakın # 75332 , # 158981 ve # 72806 .

Özet, apt-get / yetenek düzeyindeki bekletmenin dpkg'da bekletme durumunu tetiklememesidir (özellikle hata 72806'ya bakın) ve güncelleme yöneticisi dpkg'dan durumu okur.

geçici çözüm kök olarak çalıştırılır: echo "package hold" | dpkg --set-selections


2

Bu gibi, "özel geçersiz kılma" yeteneğini kullanabilirsiniz:

aptitude reinstall ~i oracle-java8-jre:

Bu, sisteminizdeki tüm paketleri yeniden yüklemek, ancak oracle-java8-jre'yi değil (yalnızca yeniden yüklemeler için depolanmayan), kullanımınızı geçersiz kılmaya devam eden tek seferlik kullanımdır.

Belirli bir geçersiz kılma geçersiz kılma kullanıyorsanız, paket bir anlık tutma özelliğine sahip olacaktır, bir yetenek yüklemeye çalışmaz.

Sisteminizin bir şekilde nasıl tehlikeye atıldığını düşünüyorsanız, çok iyi bir şey.


1

Eğer Synaptic kuruluysa, paketi seçebilir ve güncellenmesini önlemek için Paket -> Sürümü Kilitle menüsünü kullanabilirsiniz.

Synaptic'i sudo apt-get install synaptic ile kurabilirsiniz. Şahsen onu Yazılım Merkezinden daha yararlı buluyorum ... o zaman yine, oldukça eski bir okulum. :)


0

Arada bir , şu anda kurulu olan tüm paketleri geri almak isteyebilir . İşte nasıl.

Önce mevcut durumu kaydedin, böylece geri alabilirsiniz:

dpkg --get-selections > current_selections.txt

Ardından, tüm paketleri geri tutmak için:

dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections

Son olarak, önceki durumuna geri dönmek istediğinizde:

dpkg --set-selections < current_selections.txt

Bunun bir kullanım durumu, bir QA'dan üretim ortamına geçmek için bir VM veya Amazon AMI anlık görüntüsü oluştururken olabilir.


0

@ Soger'in Ubuntu 16.04 ile ilgili yorumlarına detay ekleme .

Ubuntu 16.04, varsayılan olarak / etc / apt / tercihler dosyasına sahip değildir. Halen bir tane yoksa, sadece yeni bir dosya oluşturun ve verilen paketi ve bağımlılıklarını güncellemelerden hariç tutmak için yukarıda anlatıldığı gibi bir stanza ile doldurun.

Daha sonra koşun apt updateve GTG'siniz. : 0)

Örneğin, dahili Intel video kartı ve NVidia kartı olan bir Ubuntu 16.04.5 LTS sunucum var. NVidia kartı kullanılan tek kart. Sunucu ayrıca CUDA sürücüleri kullanır. aptIsrar ettiğim yerde sorun yaşadım

va-sürücüye tüm

(Intel sürücüleri) bir güncelleme gerektiriyordu, ancak hangi sürümün yükleneceğini belirleyemedi. Bu beni deli ediyordu ve zaten Intel sürücülerine ihtiyacım yoktu. Bu yazıyı tercihler dosyasına girdim ve temizlendi, problem çözüldü.

Package: va-driver-all
Pin: release *
Pin-Priority: -1
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.