Kurulu paket seçimlerini bir Debian sisteminden diğerine nasıl çoğaltırım? (Debian Wheezy)


19

Güncellemeleri ana sistemime uygulamadan önce test etmek için bir sanal makinede bir hazırlama ortamı kurmaya çalışıyorum.

Bunu yapmak için, VM'de Debian Wheezy'nin (ana sistemde olduğu gibi) temel bir kurulumunu yaptım, sonra VM'den kök olarak çalıştım:

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
  dpkg --set-selections

Benim durumumda maalesef i386 mimarisine ihtiyaç var; sistem amd64 yereldir.

Sorun dpkg --set-selectionsVM'de çalıştırma ile ilgilidir . Özel işleme gerektiren bazı paketlerim var (bunlar aslında ilk aşamada bir hazırlama ortamı istemememin ana nedeni), ancak yukarıdaki son komutu çalıştırdığımda, yaklaşık bir gazilyon satır çıktısı alıyorum:

dpkg: warning: package not in database at line NNN: package-name

temel sistemde gerçekten bulunması gereken paketler için. Örnekler arasında xterm, yelpve zip.

Şimdi sorum için:

Paket seçim listesini bir Debian sisteminden diğerine aktarmak için (Wheezy'de aynı Debian sürüm seviyesini varsayarak) ve daha sonra bu değişiklikleri uygulamak için özel süreç nedir ? Amaç, her ikisinin de aynı kurulu paket listesine sahip olması, ideal olarak, ikisinin diffçıktıları arasında dpkg --get-selectionsveya arasında bir değişiklik yapmanın dpkg --listhiçbir fark göstermemesi.

grep -v deinstallBölüm ödünç yaptıktan sonra kaldırılmakta engelle paketleridpkg --set-selections Ask Ubuntu üzerine bitti.

VM'deki kaynağı ana sistemdeki ile aynı olacak şekilde değiştirdim, ayrıca apt-transport-httpsşunları da yükledim :

deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main

--Set-selections çıktısına bakıyorum:

dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...

Satır numaraları tuhaf görünüyordu ve --get-selection çıktısının karşılık gelen kısmı:

a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install

Arasındaki o Bildirim aclve aglfnvardır acpi-support-base, acpidve adduser bunun için hiç hata rapor edilmektedir . Hataların bildirildiği paketler, bunlara ungöre dpkg -lya dpkg -lda hiç bir fikre sahip değildir ( dpkg-query: no packages found matching ...). Yerel olarak kurulu bazı paketler olduğunu biliyorum, ama çok değil. listede çok daha aşağıya i386kadar (--get-selection çıktısındaki 342 satırı) görülmez .gcc-4.7-base:i386 install


dpkg --get-selections … | … dpkg --set-selectionspaket seçimlerini çoğaltma yoludur. Bu sizin için başarısız olursa, nedenine ilişkin daha fazla bilgi vermeniz gerekecektir. Kaynaklarınızın tamamını her iki sistemde, çıktı dpkg --get-selectionsve tam transkriptte dpkg --get-selectionsyayınlayın (belki neyin işe yarayıp neyin yaramadığını görerek bir desen ayırt edebiliriz). Ana sistem amd64 veya i386 ise? İ386 mimarisini eklemezseniz çalışır mı?
Gilles 'SO- kötü olmayı bırak'

@Gilles Gerçekten tam çıktı olması gerekiyor mu dpkg --get-selections(ve ben dpkg --set-selectionstranskript demek olduğunu varsayalım ?)? Sadece birincisi 3.600 satırdan fazla ve 100 KB civarında.
CVN

Hangi paketlerin hataları tetiklediğini ve hangilerinin yapmadığını (kendiniz anlayamadıkça) modelini ayırt edebilmemiz için yeterince yayınlamalısınız. /var/lib/dpkg/Packages(Daha da uzun olan) bir kopyası da yararlı olabilir - bu bozuk bir Paket dosyasının belirtisi olabilir.
Gilles 'SO- kötü olmayı bırak

@Gilles İlginç nokta. Olasılığı gerçekten düşünmemiştim, ama bunlar üzerinde farklı aynalar kullanıyorum. VM'yi aynı Debian aynasına doğrulttuğumda hala olup olmadığını göreyim. Yanında olmak.
CVN

@Gilles Bu gerçekten fark edilebilir bir fark yaratmadı, ama başka bir şey buldum. Güncellenmiş soruya bakın.
CVN

Yanıtlar:


17

Bir Debian kurulumunu klonlamak için apt-cloneyardımcı programı kullanın . Wheezy'den beri Debian'da ve 12.04'ten beri Ubuntu'da (ayrı bir paket olarak, varsayılan kurulumun bir parçası olarak değil) mevcuttur. Mevcut makinede,

apt-clone clone foo

Bu bir dosya oluşturur foo.apt-clone.tar.gz. Hedef makineye kopyalayın ve çalıştırın

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

Kullanılamayan eski bir sistemle çalışıyorsanız apt-cloneveya yalnızca yüklü paketler listesini kopyalamak istiyorsanız, ancak herhangi bir yapılandırma dosyası değil istiyorsanız, burada manuel adımlar verilmiştir.

  • Kaynak makinede:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • Hedef makinede:

    cp sources.list /etc/apt/
    apt-get update
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections <selections.list
    apt-get dselect-upgrade
    xargs apt-mark auto <auto.list
    

Dpkg'da ilk önce hışıltılı hale getiren uyumsuz bir değişiklikten etkilendiğinizi düşünüyorum. Arka plan için hata # 703092'ye bakın .

Öykü olduğunu dpkg --set-selectionsşimdi sadece dosyada mevcut paket adları kabul /var/lib/dpkg/statusveya /var/lib/dpkg/available. APT'yi yalnızca çoğu kişi gibi paketleri yönetmek için kullanırsanız, /var/lib/dpkg/availablegüncel tutulmaz.

Çalıştırdıktan sonra apt-get updateve çalıştırmadan önce dpkg --set-selectionsve apt-get -u dselect-upgradeaşağıdaki komutu çalıştırın:

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

Jessie'den itibaren bunu basitleştirebilirsiniz.

apt-cache dumpavail | dpkg --merge-avail

Alternatif olarak,

/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

hatta daha basit

apt-get install dctrl-tools
sync-available

Ek bir paket yüklemeyi gerektirmeyen ancak paket listelerini tekrar indirecek başka bir basit yöntem

dselect update

Daha fazla bilgi için dpkg SSS sayfasına bakın . (Bu, dpkg man sayfasında belirtilir, ancak daha önce sorunun farkında olduğunuzu hatırlatacak şekilde, sorunun nasıl çözüleceğini açıklayan bir şekilde değil!)

Paket kurulumunu klonlamanın APT'deki dpkg --set-selectionsotomatik / manuel işareti geri yüklemediğini unutmayın . Daha fazla bilgi için bkz. Tüm verileri ve bağımlılıkları dpkg --set-selection '*' den geri yükleme . Kaynak sistemdeki işaretleri ile

apt-mark showauto >auto.list

ve bunları hedef sisteme geri yükleme

xargs apt-mark auto <auto.list

3
Bu problem olduğundan çok daha görünür olmalıdır. Daha önce duymadığımı düşünemiyorum!
Faheem Mitha

İlginç. Bunu denemek için gidiyoruz. Teşekkürler!
CVn

@FaheemMitha Evet, bugün daha önce hiç duymadığım için şaşırdım. Ben kullanmadıysanız inanamıyorum dpkg --set-selectionsöncesi hışıltılı beri!
Gilles 'SO

Tamam, bu çok daha kısa bir uyarı listesi verdi --set-selections. Şimdi değişiklikleri nasıl uygularım? Hatta apt-get -u dist-upgradebinlerce paketin etkilenmemesi durumunda yüzlerce olması gereken birkaç paketten (tümü ZFS ile ilgili) bahseder.
CVn

@ MichaelKjörling İşteapt-get -u dselect-upgrade
Gilles 'SO- kötü olmayı bırak'

1

Nasıl yaptım

  1. Açık kaynak host:

    apt-get update && apt-get dist-upgrade
    dpkg --get-selection >/tmp/source.sel
    cat /etc/apt/sources.list
    

    /etc/apt/sources.list.dkullanılırsa dikkat edin ...

    Ardından source.seldosyayı hedef ana bilgisayara kopyalayın .

  2. Açık hedef host:

    vi /etc/apt/sources.list 
    

    Farklı aynalarla bile kaynaklar listesini uyarlayın , ancak aynı bileşen listesi.

    apt-get update
    dselect upgrade
    dpkg --set-selection </tmp/source.sel
    dselect install
    

    Ve şimdi, hedef sunucum şu anda çok şey yüklüyor, o zaman bunu yayınlamak için biraz zaman alabilirim.


Belki de 'dselect yükseltmesi' yukarıdaki 'Nasıl Yaptım' açıklamasında 'dselect güncellemesi' olmalıdır.
Jonathan Kimmitt
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.