Usiłuję skonfigurować środowisko pomostowe na maszynie wirtualnej, aby przetestować aktualizacje przed zastosowaniem ich w moim głównym systemie.
W tym celu wykonałem podstawową instalację Debian Wheezy (taką samą jak w systemie głównym) na maszynie wirtualnej, a następnie uruchomiłem jako root z poziomu maszyny wirtualnej:
# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
dpkg --set-selections
Niestety architektura i386 jest w moim przypadku potrzebna; system jest natywny dla amd64.
Problem dotyczy dpkg --set-selections
uruchomienia na maszynie wirtualnej. Mam kilka pakietów, które wymagają specjalnej obsługi (są to tak naprawdę główny powód, dla którego chcę przede wszystkim środowisko pomostowe), ale kiedy uruchomię ostatnie polecenie powyżej, otrzymuję około miliardów wierszy wyników, takich jak:
dpkg: warning: package not in database at line NNN: package-name
dla pakietów, które naprawdę powinny być dostępne w systemie podstawowym. Przykłady obejmują xterm
, yelp
i zip
.
Teraz moje pytanie:
Jaki jest specyficzny proces przenoszenia listy wyboru pakietów z jednego systemu Debian na inny (przy założeniu tego samego poziomu wydania Debiana, w Wheezy), a następnie zastosowania tych zmian? Chodzi o to, aby oba miały tę samą listę zainstalowanych pakietów, idealnie, aby powrót diff
między wyjściami dpkg --get-selections
lub dpkg --list
na obu nie powrócił bez żadnych różnic.
grep -v deinstall
Część jest zapożyczona z pakietów uniemożliwić są usuwane po wykonaniudpkg --set-selections
ponad Zapytaj na Ubuntu.
Zmieniłem źródło w maszynie wirtualnej na to samo, co w systemie głównym, instalując również 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
Patrząc na wynik --set-selections, widzę:
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
...
Numery linii wyglądały dziwnie, a odpowiadająca im część wyniku --get-selections to:
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
Zauważ, że pomiędzy acl
i aglfn
są acpi-support-base
, acpid
i adduser
dla których nie są zgłaszane żadne błędy . Wygląda na to, że pakiety, dla których zgłaszane są błędy, są albo un
zgodne dpkg -l
, albo dpkg -l
nie mają o nich pojęcia ( dpkg-query: no packages found matching ...
). Wiem, że jest kilka zainstalowanych lokalnie pakietów, ale nie wiele. i386
nie pojawia się, dopóki nie będzie gcc-4.7-base:i386 install
dużo dalej w dół listy (wiersz 342 w wyjściu --get-selections).
dpkg --get-selections … | … dpkg --set-selections
jest sposobem na replikację wybranych pakietów. Jeśli to się nie powiedzie, musisz podać więcej informacji o tym, dlaczego. Zamieść pełny zestaw źródeł w obu systemach, dane wyjściowedpkg --get-selections
i pełny transkrypt zdpkg --get-selections
(być może możemy rozpoznać wzór, sprawdzając, co działa, a co nie). Jeśli główny system amd64 lub i386? Czy to działa, jeśli nie dodasz architektury i386?dpkg --get-selections
(i zakładam, że miałeś na myślidpkg --set-selections
zapis?)? Nawet ten pierwszy ma ponad 3600 linii i około 100 KB./var/lib/dpkg/Packages
Przydatna może być również kopia (która jest jeszcze dłuższa) - może to być objaw uszkodzonego pliku Packages.Odpowiedzi:
Aby sklonować instalację Debiana, użyj
apt-clone
narzędzia. Jest dostępny (jako oddzielny pakiet, nie jest częścią domyślnej instalacji) w Debianie od wheezy i w Ubuntu od 12.04. Na istniejącej maszynie uruchomSpowoduje to utworzenie pliku
foo.apt-clone.tar.gz
. Skopiuj go na komputer docelowy i uruchomJeśli pracujesz ze starym systemem, który
apt-clone
nie jest dostępny, lub jeśli chcesz po prostu zreplikować listę zainstalowanych pakietów, ale nie plik konfiguracyjny, wykonaj poniższe instrukcje.Na maszynie źródłowej:
Na maszynie docelowej:
Uważam, że masz wpływ niekompatybilnej zmiany dpkg, która po raz pierwszy zmieniła się w świszczący oddech. Zobacz błąd # 703092 jako tło.
Krótka historia jest taka, że
dpkg --set-selections
teraz akceptuje tylko nazwy pakietów obecne w pliku/var/lib/dpkg/status
lub/var/lib/dpkg/available
. Jeśli używasz APT tylko do zarządzania pakietami, jak większość ludzi,/var/lib/dpkg/available
nie jest on aktualizowany.Po uruchomieniu
apt-get update
i przed uruchomieniemdpkg --set-selections
iapt-get -u dselect-upgrade
uruchom następujące polecenie:Od jessie możesz to uprościć
Alternatywnie, uruchom
lub nawet prościej
Inną prostą metodą, która nie wymaga instalowania dodatkowego pakietu, ale spowoduje ponowne pobranie list pakietów, jest
Aby uzyskać więcej informacji, zobacz często zadawane pytania dotyczące dpkg . (Jest to wspomniane na stronie podręcznika dpkg, ale bardziej w sposób, który przypominałby ci problem, gdybyś był już tego świadomy, a nie w sposób, który wyjaśnia, jak rozwiązać problem!)
Zauważ, że klonowanie instalacji pakietu
dpkg --set-selections
nie przywraca automatycznego / ręcznego znaku w APT. Zobacz Przywracanie wszystkich danych i zależności z dpkg --set-selections '*', aby uzyskać więcej informacji. Możesz zapisać znaki w systemie źródłowym za pomocąi przywróć je w systemie docelowym za pomocą
źródło
dpkg --set-selections
od pre-wheezy!--set-selections
. Jak teraz zastosować zmiany? Nawetapt-get -u dist-upgrade
wspomina tylko o kilku pakietach (wszystkie związane z ZFS), w których powinny znaleźć się setki, jeśli nie tysiące pakietów.apt-get -u dselect-upgrade
Jak to zrobiłem
Na hoście źródłowym :
dbać o to,
/etc/apt/sources.list.d
czy zostanie użyty ...Następnie skopiuj
source.sel
plik do hosta docelowego.Na hoście docelowym :
dostosuj sources.list nawet z różnymi serwerami lustrzanymi, ale tą samą listą komponentów .
A teraz mój docelowy host instaluje obecnie wiele rzeczy, więc może trochę czasu to opublikować.
źródło