TL; DR veya "Sadece pi'mi yaktım"
sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge
( apt-get autoremove --purge
Hiçbir öksüz kalana kadar tekrar et )
Daha fazla açıklama
Bir foo paketi başka bir libfoo paketine bağlıysa ve libfoo paketini kaldırırsanız , bağımlı ( foo ) da kaldırılır. Foo Çünkü bir bağlıdır belirterek çizgi libfoo , libfoo çıkarıldı eğer foo bırakmak dökümü yapılır. Tersi doğru değildir: çıkarmadan foo gelmez silmek libfoo otomatik. Başka bir paket xfoo olabilir ayrıca yüklü olup olmadığını apt izler rağmen (sadece kaldırmaz yüzden apt, libfoo bağlı sadece yükleme bir yan etkisi olarak foo ve eğer siz isteyince başkaları hala güvenmediği sürece, otomatik olarak kaldırmayı teklif edin)
Meta paketler , fofoya bağlı foo ile aynı şekilde diğer paketlere de bağlıdır , bu yüzden bir meta paketi kaldırdığınızda, genellikle çok az şey kaldırılır. Örneğin, iki meta-paketler olabilir bağlıdır xterm (LXSession ve xfsession belki) üzerinde, ancak bir ya da her iki kaldırma olmaz xterm olmayan LXSession veya xfsession olmadan kırık olduğundan xterm kaldırın. Meta paketler genellikle bağımlılık ağacının tepesinde , altta değil ve birkaç şey doğrudan meta paketlere bağlı olma eğilimindedir. Meta-paketler öncelikli olarak bir seferde mantıklı bir paket seti kurmak için uygun bir yol sunar, ancak bunlar araç kaldırma değildir.
Bu nedenle, X11'e bağlı her şeyi puanlamak istiyorsanız, tüm x11 uygulamalarının sonuçta bağlı olması gereken temel libx11 kitaplık kümesini hedeflemeniz gerekir :
sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge
Bu, nihayetinde libx11 -. * 'E bağlı olan herşeyi kaldıracak (simüle edecek) ve doğrudan X11'in kendisine bağlı olmasa bile, bir X11 programının bağımlılığı olarak kurulan paketleri de kaldıracaktır (CUPS ve Ghostscript tipik olarak yüklenmiştir). masaüstü ortamı kurmanın yan etkisi olarak). İkinci komut, hiçbiri kalana kadar sonraki yetimleri kaldıracak. Bu adımı daha sonra yapmak ya da hiç yapmak istemiyorsanız "--auto-remove" i kaldırın ya da GUI'yi temizledikten sonra paketleri manuel olarak geri ekleyin.
- Kaldırmak istemediğiniz paketleri kaldırmayacağını kontrol ettikten sonra işlemi gerçekten gerçekleştirmek için --dry-run seçeneğini kaldırın.)
Yan etkileri temizlemeyi ve temizlemeyi ve gerektiğinde geri eklemeyi tercih ederim. Ayrıca, devam ettim ve bunu kendi pi'mde test ettim ve çok spartan ama işlevsel bir sunucuya yeniden başladım. :)
Kaldırmak neden bir şey yükler ?
Yukarıdaki strateji belirtilen sorunu çözmektedir, ancak bir çıkarma işleminin neden paketlerin kurulmasına neden olduğunun merakı halen mevcuttur .
Her paket yöneticisinin merkezinde bir tür tatmin edici bir çözücü var . Bir paket yöneticisine, bazı paketleri yüklemesini, bazı paketlerini kaldırmasını veya bazı paketleri yükseltmesini söylediğinizde, gerçekten yapmanız gereken, mevcut bir paket kümesi verilen bir sonraki istenen yazılım kurulum durumunu çözmektir. Bu çözüm , ek paketler (bağımlılıklar) kurulmasını, mevcut paketlerin kaldırılmasını (çakışmalar, molalar), belirli paketleri düşürme / yükseltme (uyumluluk düzeyi) veya bunların bir kombinasyonunu içerebilir. Bu nedenle, çözücünün diğer paketlerin kaldırılması için bazı paketlerin yüklenmesi gerektiğini belirlemesi biraz zamanlayıcı bir durum olsa da, mükemmel mantıklı. Bu , paket yöneticilerinin çözdüğü kötü bağımlılık yönetimi sorunudur.
Somut bir örnek: Önceden yüklenmiş bir Java uygulaması kümesi göz önüne alındığında, tümü şu anda openjdk-7-jre olan java uyumlu bir çalışma zamanına bağlıdır . Daha sonra bir beyan yeni bir Java aracı kurulumu için çözmek için paket yöneticisini sormak çatışma ile OpenJDK-7-jre ama işleri ile oracle-7-jre (her iki paketler jenerik sağlamak bir java-7-çalışma zamanını ). Çözücü bir önerecek çıkarılmasını ait OpenJDK-7-jre ve yüklemek ait oracle-java-7-jreMevcut paketleri kırmazken yeni paketin kurulmasını istediğiniz durumun çözümü olarak.
Bu ise , belirli bir durumda, xterm paketidir içerir adlı bir sanal bağımlılık X-terminal emülatörü ( xterm , lxterminal ve aterm tüm sağlayan bir X-terminal emülatörü bu kaldırma olasıdır, böylece) lxterminal (bir parçası olarak ) LXDE'nin çıkarılması, çözücü yüklü bir varolan paketi (bulunan kodlanır gerekli olası örneği olarak) bir tür x-terminal emülatörü gerektirir (bu yüzden çözücü xterm yüklemeyi tercih libutempter0 ve xbitmaps, aksi halde kırılan bağımlılığı gidermek için kurulacak diğer paketleri açıklamak). Paket veritabanını görmeden, bunun en olası senaryo olduğunu varsayırdım.
Şu anda bağlı olan paketleri keşfetmek için xterm'den (veya alternatif bir) kullanmak apt-cache rdepends (kullanarak komutu --installed yüklü paketlere sınırlamak için anahtarı için):
$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
|xorg
clusterssh
|xinit
|tk8.5
|tk8.4
|transcode
'|' Dönüşüm karakteriyle başlayan bağımlılıklar paketin xterm veya sağladığı bir şeye bağlı olduğu anlamına gelir (bu durumda bir şey x-terminal emülatörüdür ). Clusterssh paketi bağlıdır xterm'den açıkça ve bir alternatif izin vermez. Bu, xterm'in gerekli olmasına neden olan paketlerin kısa listesidir.
Peki ya deborphan?
İzleme yetim işlevselliği dahil oldu 2010 yılında 'autoremove' işlevselliği (Debian hata yoluyla apt-get 582.791 deborphan render) çoğunlukla gereksiz ve esasen eskimiş. Deborphan ve bunun gibi diğer çözümlerden farklı olarak apt-get, hangi paketlerin açıkça yüklendiğini ve hangi paketlerin yan etki veya açıkça yüklenen bir paketin bağımlılığı olarak yüklendiğini doğrudan izler . Bir yönetici foo yükler, örneğin, libfoo bir şekilde yüklü yan etki ve apt-olsun autoremove olacak foo çıkartırken autoremove (veya --auto-kaldırmak) belirtilirse, aslında, libfoo çıkarın.
Deborphan tarafından ele alınan yaklaşım birtakım tahminler topluluğudur. Örneğin, bağımlı olmayan yüklü bir kütüphanenin yetim olması gerektiği tahmininde bulunuluyor : libfoo yüklü, ancak ne foo ne de xfoo değilse , deborphan bunun bir yetim olması gerektiğine karar verebilir. Buradaki başarısızlık modlarından biri, kitaplıkların sağladıkları araçlar için özel olarak kurulabilecekleri (libxml2-utils içine yeniden paketlenmeden önce xmllint için libxml2) veya geliştirme amaçları için kullanılabilir durumda olmasıdır. Bu tür paketler yetim değildir . Ek olarak, deborphan kütüphanelere odaklanır, bu nedenle izleri yerleştiren kütüphane dışı yetimleri kaçırır (eski paketler ve artık paketler) .
munin
nedenden ötürü de ortadan kalktı, ancak daha sonra kolayca geri koyabiliyorum.