GNU/Linux >> Znalost Linux >  >> Debian

Debian – Jak replikovat výběr nainstalovaných balíčků z jednoho systému Debian do druhého? (debian Wheezy)?

Snažím se nastavit pracovní prostředí ve virtuálním počítači, abych otestoval aktualizace před jejich použitím na můj hlavní systém.

Abych to mohl udělat, provedl jsem základní instalaci Debian Wheezy (stejné jako na hlavním systému) do virtuálního počítače a poté jsem jej spustil jako root z virtuálního počítače:

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh [email protected] 'dpkg --get-selections | grep -v deinstall' | 
  dpkg --set-selections

Architektura i386 je v mém případě bohužel potřeba; systém je nativní amd64.

Problém je s dpkg --set-selections spustit ve VM. Mám nějaké balíčky, které vyžadují speciální zacházení (to jsou vlastně hlavní důvod, proč chci pracovní prostředí na prvním místě), ale když spustím poslední příkaz výše, dostanu asi gazilión řádků výstupu jako:

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

pro balíčky, které by skutečně měly být dostupné v základním systému. Příklady zahrnují xterm , yelp a zip .

Nyní k mé otázce:

Jaký je konkrétní proces přenosu seznamu pro výběr balíčků z jednoho systému Debianu do druhého (za předpokladu stejné úrovně vydání Debianu ve Wheezy) a následně tyto změny použít? Cílem je, aby oba měly stejný seznam nainstalovaných balíčků, ideálně takový, že provedete diff mezi výstupy dpkg --get-selections nebo dpkg --list na dvou se vrací bez rozdílů.

grep -v deinstall část je vypůjčena z Zabránit odstranění balíčků po provedení dpkg --set-selections na Ask Ubuntu.

Změnil jsem zdroj ve virtuálním počítači tak, aby byl stejný jako v hlavním systému, a také jsem nainstaloval apt-transport-https :

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

Když se podívám na výstup –set-selections, vidím:

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
...

Čísla řádků vypadala podivně a odpovídající část výstupu –get-selections je:

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

Všimněte si, že mezi acl a aglfn jsou acpi-support-base , acpid a adduser pro které nejsou hlášeny žádné chyby . Zdá se, že balíčky, u kterých jsou hlášeny chyby, jsou buď un podle dpkg -l , nebo dpkg -l nemá o nich vůbec žádnou představu (dpkg-query: no packages found matching ... ). Vím, že existují nějaké lokálně nainstalované balíčky, ale není jich mnoho. i386 se nezobrazí, dokud gcc-4.7-base:i386 install hodně dále v seznamu (řádek 342 ve výstupu –get-selections).

Související:Jaké jsou zásadní rozdíly mezi mainstreamovými *NIX shelly?

Přijatá odpověď:

Chcete-li naklonovat instalaci Debianu, použijte apt-clone užitečnost. Je k dispozici (jako samostatný balíček, který není součástí výchozí instalace) v Debianu od wheezy a v Ubuntu od 12.04. Na stávajícím počítači spusťte

apt-clone clone foo

Tím se vytvoří soubor foo.apt-clone.tar.gz . Zkopírujte jej do cílového počítače a spusťte

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

Pokud pracujete se starým systémem, kde apt-clone není k dispozici, nebo pokud chcete pouze replikovat seznam nainstalovaných balíčků, ale nechcete žádný konfigurační soubor, zde jsou ruční kroky.

  • Na zdrojovém počítači:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • Na cílovém počítači:

    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
    

Domnívám se, že jste ovlivněni nekompatibilní změnou v dpkg, která z něj nejprve udělala sípavý. Pozadí viz chyba #703092.

Stručný příběh je, že dpkg --set-selections nyní přijímá pouze názvy balíčků, které jsou přítomny v souboru /var/lib/dpkg/status nebo /var/lib/dpkg/available . Pokud používáte APT pouze ke správě balíčků, jako většina lidí, pak /var/lib/dpkg/available není aktualizován.

Po spuštění apt-get update a před spuštěním dpkg --set-selections a apt-get -u dselect-upgrade , spusťte následující příkaz:

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

Od jessie to můžete zjednodušit na

apt-cache dumpavail | dpkg --merge-avail

Případně spustit

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

nebo ještě jednodušší

apt-get install dctrl-tools
sync-available

Další jednoduchá metoda, která nevyžaduje instalaci dalšího balíčku, ale stáhne znovu seznamy balíčků, je

dselect update

Další informace najdete v dpkg FAQ. (To je zmíněno v manuálové stránce dpkg, ale spíše způsobem, který by vám připomněl problém, pokud jste si toho byli vědomi, nikoli způsobem, který vysvětluje, jak problém vyřešit!)

Všimněte si, že klonování instalace balíčku pomocí dpkg --set-selections neobnoví automatickou/ruční značku v APT. Další podrobnosti najdete v části Obnovení všech dat a závislostí z dpkg –set-selections ‚*‘. Značky ve zdrojovém systému můžete uložit pomocí

apt-mark showauto >auto.list

a obnovte je v cílovém systému pomocí

xargs apt-mark auto <auto.list

Debian
  1. Jak upgradovat systém Debian Linux z Wheezy na stabilní verzi Jessie

  2. Jak nainstalovat Gradle na Debian 10

  3. Jak nainstalovat AnyDesk na Debian 10

  1. Debian – Jak nainstalovat jeden balíček z testování Debianu nebo nestabilního na stabilní?

  2. Fedora – Jak replikovat výběr nainstalovaných balíčků z jedné instance Fedory do druhé?

  3. Jak zkompilovat ze zdroje a nainstalovat Nginx do Debian 7 (Wheezy) VPS

  1. Jak nainstalovat Yarn na Debian 9

  2. Jak nainstalovat Yarn na Debian 10

  3. Jak nainstalovat Debian 7 (Wheezy) Minimal Server