İki ana bilgisayara yüklenen paketler arasındaki farkların listesini hesaplama


11

Sadece Debian sanal sunucularım ile ilgili bazı problemler ekliyorum ve hepsini sıfırdan yeniden yüklemek için ekliyorum. Ancak, hala eski sürüme erişimim vardı ve yüklü paketler listesini alabildim.

Gelecekte bir sanal sunucuyu geri yükleme işlemini kolaylaştırmak için, sunucumun her biri için belirli paketlerin bir listesini oluşturmak istiyorum.

Neyi başarmak istediğimi daha iyi açıklamak için. Zaten her yerde kullanılan bazı temel paket ve yapılandırma ile yeni bir sanal sunucu oluşturmak için otomatik bir işlemim var. Şimdi belirli bir sunucunun yeniden kurulumunu kolaylaştırmak için deltayı bu "iskelet" ile kaydetmek istiyorum.

Gerçek bir artı da değiştirilen yapılandırma dosyalarını varsayılandan kaydetmek olacaktır, ancak sadece paket listesiyle yaşayabilirim.

Kısacası, bir ana bilgisayarda yüklü, ancak başka bir bilgisayarda değil paketlerin bir listesini oluşturmak için bir yol istiyorum.

Listenin tüm bağımlılıkların listesini değil, yalnızca elle yüklenen paketleri içermesi gerçekten harika olacaktır.

Bu özel görevi yerine getirmek için tasarlanmış bazı mevcut araçlarınız varsa, bunları teklif etmekten çekinmeyin, ancak bağımlılığı olabildiğince küçük tutmak istiyorum. Bilgi için, bunlar tam olarak sanal sunucular değil, LXC kapsayıcılarıdır.


Sadece bir düşünce, ama bununla ters yönde çalışmaya başlamanın zamanı gelmiş olabilir. Bilgileri almaya çalışmak yerine, neden bir yapılandırma yönetim sistemi (kukla) kurulacağını. Ardından işleri yönetilen sistemlerinize aktarın.
Zoredache

Oh, BTW, bu soruyu gör. serverfault.com/questions/3852/…
Zoredache

@Zoredache Şu anda tüm bunları yönetmek için daha iyi bir yol arıyorum, ama bu arada her ihtimale karşı sunucuların durumunu kurtarmak için bazı hızlı bir yol bulmak istedim. Bağlantı için teşekkürler!
krtek

Yanıtlar:


12

Referans kurulumda (sadece bir kez):

dpkg-query -W -f='${Package}\n' | sort > baselist.txt

(Aşağıdaki varsayılmaktadır bash)

Paketleri referans kurulumundan eklemek için (neyin kaldırıldığını göstermez):

comm -1 -3 baselist.txt <(dpkg-query -W -f='${Package}\n' | sort)

Daha da iyisi, kopyalarından kaçınmak baselist.txt:

comm -1 -3 <(ssh user@refserver cat /path/to/baselist.txt) <(dpkg-query -W -f='${Package}\n' | sort)

2

eski sunucuda şunu çalıştırın:

dpkg --get-selectionler> eski paketler listesi

yukarıdaki dosyayı yeni sunucuya kopyalayın ve yeni sunucuda çalıştırın:

dpkg - set-selection <eski paketler listesi

uygun güncelleme

Güncellemeyi seç

Ayrıca, /etc/apt/sources.listpaketlerin bu geçişinden önce, eski sunucudan yeni sunucuya tüm ekstra depoları eklemeyi unutmayın , eğer sanki yokmuş gibi, çoğu paket kaldırılmadan bırakılacaktır.


Bu, tüm paket listesini kaydedecek ve sunucuları geri yüklemek için kullandığım çözüm tam olarak bu. Ancak şimdi, süreci ileride kolaylaştırmak için, yalnızca temel sunucudan farklı olan paketlerin listesini kaydetmek istiyorum.
krtek

1
Tamam, bu da çok kolay., önce "dpkg --get-selection> old-Packages-list" ile eski sunucudan listenin yedeğini alın, sonra "dpkg --get-selection'ler tarafından yeni sunucudaki paketlerin listesini alın > new-Packages-list ",,, bu komutu çalıştırın" cat old-Packages-list | awk '{print $ 1}'> old-list ",,, yeni sunucuda aynı komutu kullanın, ancak eskisini yenisiyle değiştirin. Her iki dosyada da farkı gösterecek bir fark çalıştırın. by diff -w eski liste yeni liste
Farhan

1
cut -f1probablz awk'den daha hızlı olacak ve Khaled cevabına yorum yaptığı gibi diff her zaman doğru bir sonuç vermeyecektir. commŞimdilik gerçekten lütfen çözüm ... Ancak sadece elle yüklenen paketleri listeleyen bir sürümü eksik.
krtek

1

Her iki sunucudaki paketlerin tam listesini almak için aşağıdaki komutu kullanabilirsiniz:

     dpkg -l | sort > old_file
     dpkg -l | sort > new_file

Ardından, farklılıkları kullanarak şunları elde edebilirsiniz:

     diff -Nur old_file new_file > changes.txt

Gerekli değişiklikleri grep kullanarak filtreleyebilirsiniz. Ayrıca diff, yapılandırma dosyalarındaki değişiklikleri almak ve gerektiğinde uygulanacak yamalar oluşturmak için kullanılabilir. Bu arada, diff sadece iki dosyayı değil, iki klasörü karşılaştırabilir.


Fark çıkışı ile ilgili sorun, her şeyi otomatik olarak yeniden yüklemek için doğrudan apt-get'e beslenememesidir ... Ve önerilen Shellholic gibi, bu özel durumda comm kullanmak daha iyidir, diff, yanlış sonuçlar verebilir. paket listesi gerçekten uzun.
krtek

Başka bir sorun, dpkg çıktısının sütununu otomatik olarak boyutlandırmasıdır. Böylece daha uzun paket adı olan bir sunucudan gelen dpkg -l farkı zorlaştırır.
Paolo

1

Blueprint tam olarak ihtiyaçlarınız için tasarlanmıştır. Yüklü bir açıklama paketi tükürür ve değiştirilen yapılandırma dosyaları. Bu açıklamaları temiz kutulara uygulamak için Kukla veya Şef komut dosyalarına dönüştürebilir.


0

Ayrıca açıklaması aşağıdaki gibi olan bu yararlı paketi de buldu:

Debian paketinin dosya sistemi ağacını mevcut dosya sistemi ağacıyla karşılaştıran ve farklı dosyalar için birleştirilmiş diffs'ler basan bir Bash betiği.

https://code.google.com/p/dpkg-diffs/

PATH'ınıza bir yere yapışıp çalıştırabileceğiniz tek bir bash dosyası - benim için çalışıyor ve çok eski değil.

Umarım bu birine yardımcı olur.

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.