Bağımlılarını kaldırmadan paketleri nasıl eski sürüme geçirebilirim?


17

PPA'yı temizlemeden önce PPA sürümüne yükselttiğim bir dizi mesa paketim var, böylece sistemimi yükseltebilirim. Sürümlerdeki farklar küçüktür (teknik olarak aynıdır, sadece bir kütüphane seti git'ten ve diğerleri son sürümlerdir).

Eğer Synaptic, apt-get veya yetenek yoluyla eski sürüme geçmeye çalışırsam, bağımlılık cehennemine atılırım.

Paketleri manuel olarak (belki de birer birer) eski sürüme geçirmenin ve bağımlı paketlerini tamamlanana kadar taşınmaz (bu anlamlı ise) olarak işaretlemenin bir yolu var mı?

PS bu soru: Nasıl apt-get yoluyla bir paket düşürmek için? biraz farklı ve bu duruma yardımcı olmuyor.


Neden ppa-purgeönce gelmiyorsun ?
landroni

Örneğin synaptic, xyz paketini seçtiğinizde, varsayılan olarak tüm bağımlılıklar seçilecektir.Ancak her zaman tüm bağımlılıkların seçimini kaldırabilir ve sadece ana paketi yükleyebilirsiniz. bu yalnızca yeniden yüklemeye hazırsanız çalışır.
Kayıtlı Kullanıcı

@landroni temizlerse, kaldırmak istemediğim paketleri kaldırır.
RolandiXor

Yanıtlar:


13

Daha önce hiç bununla oynamadım, ama size hold(veya lock) sıkıntıya neden olan bağımlılıkların versiyonunu öneririm . Bu şekilde aptdaha sınırlı sayıda olası çözüm vardır ve diğer paketleri düşürmeye çalıştığınızda belki de kafanız karışmaz.


Başka bir şey işe yaramazsa, bu cevapta önerilen manuel yaklaşımı kullanabilirsiniz: Bir Paketi apt-get ile Nasıl Eski Sürüme Geçirebilirsiniz? . Temel olarak, gerekli indirmek .debsonra onları alt düzey kullanılarak birer birer yüklemek, elle paketleri dpkgve güçlü argümanlardan biri: --ignore-depends, --force-depends, --force-depends-version, hatta --force-all.

Yukarıdakilerle aynı ruhla, --force-downgradeargümanınız var:

          downgrade(*): Install a package, even if newer version of
          it is already installed.

          Warning:  At  present  dpkg  does  not  do any dependency
          checking on downgrades and therefore will not warn you if
          the  downgrade  breaks the dependency of some other pack‐
          age. This can  have  serious  side  effects,  downgrading
          essential system components can even make your whole sys‐
          tem unusable. Use with care.

Ancak bu man dpkg, okuduğunuzu ve ne yaptığınızı anladığınızı varsayar :

          Warning: These options are mostly intended to be used  by
          experts  only.  Using  them  without  fully understanding
          their effects may break your whole system.

Bkz. Hata: sürüm numarası rakamla başlamıyor ve Java'nın eski bir sürümü nasıl yüklenir ve sıvı 2.2.2 gibi eski bir paket sürümü nasıl yüklenir? örnekler için:

sudo dpkg --force-downgrade -i your_mesa_package.deb

Ayrıca bkz.Bazı bağımlılıkları kurmadan bir paketi nasıl kurabilirim? (uygun uyarı ile birlikte) örneği:

sudo dpkg --force-all -i your_mesa_package.deb

Yine başka bir yaklaşım .deb, equivspaketi (ve belki de biraz farklı bir adı) kullanarak sahte bir paket oluşturmak olacaktır . Daha sonra kukla paketi yüklemek, ilgili depsleri tutarken "true" paketini kaldırmanıza ve daha sonra eski sürümü yüklemenize izin vermelidir. Bunun tam olarak nasıl çalışacağından emin değilim, ancak ayrıntılar için ilgili konuyu kontrol edin: Bağımlılıkları kaldırmadan bir deb nasıl kaldırılır .


4

İlk olarak, sistemde yüklü apt-markolan hedef paketin tüm bağımlılıklarını (ve belki de önerilen / önerilenleri) elle yükleme olarak işaretlemek için kullanabilirsiniz. Bunu yaptıktan sonra, yazılımın önceki sürümlerini apt-get, sürümden açıkça bahsederek yükleyin .

  • Hedef pakete bağımlılığı, önerilen ve önerilen paketleri listelemek için:

    apt-cache show <target-package-name>
    
  • Paketleri manuel olarak yüklendi olarak işaretleme :

    sudo apt-mark manual <package-name(s)>
    

    (bunu tüm bağımlılıklar, öneriler ve öneriler için kullanın.)

  • Hedef paketi kaldırın:

    sudo apt-get remove <target-package-name>
    
  • Eski sürüme geçirebileceğiniz / yükseltebileceğiniz paket sürümlerinin listesini görmek için şunu kullanın:

    apt-cache policy <target-package-name>
    
  • Gerekli paketin hedef sürümünü yükleyin:

    sudo apt-get install <target-package-name>=<target-package-version-number> 
    

    veya

    sudo apt-get -t=<target release> install <target-package-name>
    

PS. Listesi ise bağımlılıkları / tavsiye / önerildi paketleri ile işaretlenmesi olanlar yani apt-marktarafından paketlenmiş çıktı amaçlanan listede tasarrufu büyük, apt-cache show <target-package-name>herhangi bir dosya söz hakkından için /path/to/foove kullanımı apt-markböyle bir combo olarak:

cat /path/to/foo | xargs -imarkthese sudo apt-mark manual markthese

Bu yöntem işe yarayabilir, ancak 100'den fazla paketi işaretlemek yerine, diğer yanıta gittim.
RolandiXor

@RolandiXor, apt-cache policy <target-package-name>sürümüne geçebileceğiniz / yükseltebileceğiniz paket sürümlerinin bir listesine sahip olmak için kullanabilirsiniz ..
kesin

.. lütfen gönderiye yapılan düzenlemeye bakın; daha fazla sayıda dosya işaretlenecekse, birlikte verilen komboyu kullanabilirsiniz ...
kesin

Beni anladığını sanmıyorum. Her neyse, şimdi düzelttim ve ödül verdim (değiştiremiyorum).
RolandiXor

1

Sadece bir paketin akış yukarı bir versiyonuna yükseltme ve daha sonra düşürmeye karar verme top acısından geçtim. Bu, bir özel depo deposu yoluyla oldu. Benim durumumda bu en son systemd 233 sürümünü (henüz yayınlanmamış) denemekti.

Anahtar, indirilmesi gereken tüm paketleri belirtmeniz gerektiğini anlamaktır. Eğer bunu doğru yaparsanız, şansınız ne istersen yapacak. Bir şeyi kaçırırsanız, apt size eylemin birçok paketin kaldırılmasına neden olacağını söyleyecektir. Gerçekleştirmeden önce eski sürüme geçmeyi denemek için '-s' bayrağını kullandığımızdan emin olmak için.

Bu nedenle atmanız gereken adımlar şunlardır:

1) Akış yukarı yükseltilen tüm bağımlılıkları listeleyin (durumunuz farklıysa başka bir anahtar kelime kullanın):

dpkg -l|grep upstream

Bu, yukarı akış sürüm numarasına sahip paketlerin bir listesini verir.

2) Her paket için doğru kararlı sürümün ne olduğunu listeleyin:

for i in libnss-resolve:amd64 libsystemd0:amd64 libpam-systemd:amd64 libsystemd0:i386 libudev1:amd64 libudev1:i386 systemd systemd-sysv udev; do apt-cache show $i; done|grep Version

3) çift kontrol tüm iyidir:

apt -s --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5

0 to upgrade, 0 to newly install, 9 to downgrade, 0 to remove and 0 not to upgrade.

(emin değilim --reinstall btw gerekli, ama bu ne yaptım)

4) -s'yi çıkarın ve yapın.

apt --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5
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.