Debian Jessie instaluje zbyt wiele backportów

9

Mam Debian Jessie i dodałem backporty (zgodnie z tymi instrukcjami ):

echo "deb http://http.debian.net/debian jessie-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/backports.list

(Zrobiłem to, aby uzyskać nowsze jądro, w razie potrzeby, dla jakiegoś sprzętu w moim laptopie).

Instrukcje mówią, że nic nie powinno się zdarzyć, chyba że wyraźnie poproszę o przeniesienie pakietu. np apt-get -t jessie-backports install "package".

Jednak teraz wydaje mi się, że mam cały ładunek mojego systemu z backportów, a jeden pakiet został odinstalowany, ponieważ zależy to od dokładnej wersji czegoś, co zostało zaktualizowane do back-portów.

Więc moje pytanie:

  • Jak najpierw go zatrzymać, aby nie było już instalowanych żadnych backportów?
  • Jak usunąć istniejące backporty?

Uwaga: otrzymuje listę zainstalowanych pakietów pochodzących z backportów (w formacie, który można przekazać apt-get install, z jakiegoś powodu umieszczenie sudo apt-get installecha na końcu potoku nie działa):

cat /var/log/dpkg.log.1 |grep -v linux | grep -v xserver | grep -v firmware | grep "status installed" | grep bpo | cut -d" " -f 5 | cut -d: -f 1 | xargs -i{} -n1 bash -c "dpkg-query -s {} >/dev/null && echo {}" | sed -r -e "s~.*~\0/jessie~" | xargs echo

Uwaga:

Niektóre pakiety są instalowane automatycznie, więc jeśli ponownie je wszystkie, to te automatycznie zainstalowane pakiety zostaną oznaczone jako zainstalowane ręcznie. Dlatego nie jest usuwany, gdy nie jest potrzebny.

Czy ktoś ma jakieś pomysły, jak to rozwiązać?

ctrl-alt-delor
źródło

Odpowiedzi:

10
  1. Spróbuj dodać następujące elementy do jednego /etc/apt/apt.conflub jednego z poniższych plików /etc/apt/apt.conf.d:

    APT::Default-Release "jessie";

  2. Aby usunąć istniejące backporty, musisz uzyskać listę tych, które zostały zainstalowane oraz wersji, którą zastąpiły. Na szczęście informacje te można bardzo łatwo wydobyć/var/log/dpkg.log

np. grep ' upgrade ' /var/log/dpkg.logda ci wiele wierszy takich jak:

2016-02-15 11:06:32 upgrade python-numpy:amd64 1:1.11.0~b2-1 1:1.11.0~b3-1

To mówi, że o godzinie 11:06 15 lutego zaktualizowałem python-numpy z wersji 1: 1.11.0 ~ b2-1 do wersji 1: 1.11.0 ~ b3-1

Gdybym chciał przywrócić poprzednią wersję, uruchomiłbym:

apt-get install python-numpy=1:1.11.0~b2-1

UWAGA: w tym konkretnym przypadku prawdopodobnie nie zadziała, ponieważ uruchamiam debian sidaka, unstablewięc stara wersja prawdopodobnie nie jest już dostępna w repozytorium deb. Jeśli działasz jessiei ponownie instalujesz wersję pakietu jessie jako wersję starszą do wersji jessie-backports, będzie działać zgodnie z oczekiwaniami.

Podobnie, jeśli pakiet został usunięty, możesz go znaleźć i jego dokładną wersję, szukając removew nim /var/log/dpkg.log.


Redukcję masową wielu pakietów można w dużej mierze zautomatyzować przy użyciu standardowych narzędzi, takich jak awki grep. Na przykład, jeśli wiesz, że wszystkie zainstalowane aktualizacje jessie-backports zostały wykonane w określonym dniu (np. 15.02.2016), możesz przejść na poprzednie wersje, używając czegoś takiego:

 apt-get -d -u install $(awk '/2016-02-15 ..:..:.. upgrade / {print $4 "=" $5}'
    /var/log/dpkg.log)

(dodano przesunięcie wiersza i wcięcie, aby uniknąć poziomego paska przewijania)

UWAGA użycie opcji -d( --download-only). Ponownie uruchom polecenie i usuń tę opcję po sprawdzeniu, że apt-get installzrobi to, co chcesz i TYLKO, co chcesz.

Poleciłbym również, aby najpierw uruchomić tylko awkczęść tego polecenia, abyś mógł zobaczyć listę dokładnie, które pakiety i wersje zostaną ponownie zainstalowane.

cas
źródło
1
przez „w dużej mierze zautomatyzowany” mam na myśli to, że chociaż będzie on w większości działał bezproblemowo, nie działa / nie zawsze będzie działał idealnie (w zależności od konkretnych zaangażowanych pakietów i ich zależnych / poleconych / konfliktów / itd.). Nie może być jeden lub dwa pakiety trzeba ręcznie zainstalować lub odinstalować z albo apt-getalbo dpkg. Dopóki nie panikujesz, nie ma się czym martwić. Większość problemów z systemami pakowania jest spowodowana przez ludzi panikujących i reagujących bez zastanowienia.
cas
Czy nie powinien przypiąć nowych pakietów jądra do backports @cas?
Rui F Ribeiro
Nie zaszkodzi, ale nie jest to konieczne, a przypinanie jest nieco bardziej skomplikowane i trudne do uzyskania niż ustawienie Apt :: Default-Release. apt-getnie obniży wersji już zainstalowanego pakietu, chyba że wyraźnie to powiesz. I @richard powiedział, że chce instalować jessiepakiety domyślnie, chyba że wyraźnie to określił jessie-backports- zakładam, że życzenie to dotyczy również pakietów jądra.
cas
powiedział, że dołączył backports, aby mieć nowe jądro, prawdopodobnie jak ja, aby mieć jądro 4 w Jessie.
Rui F Ribeiro
1
Myślę, że ludzie, którzy używają stable+, stable-backportsprawdopodobnie bardziej troszczą się o przypinanie niż ja i włożyli wysiłek, aby dowiedzieć się więcej na ten temat. Zwykle uruchamiam unstablei regularnie synchronizuję moje systemy z najnowszymi sidami (z okazjonalnymi dodatkami od experimental), więc nie muszę ich przypinać. Jedyny raz, kiedy intensywnie go używałem, to lata temu podczas przejścia na gnome3, kiedy nie chciałem, aby moje pakiety gnome2 były wymieniane - pamiętam, że utrzymywanie ciągle zmieniającej się listy pakietów do przypięcia było PITA. Od tego czasu przeszedłem na Xfce i oczyściłem gnoma.
cas
1

Wygląda na to, że nie masz poprawnie skonfigurowanej /etc/apt/preferences. Poniższe informacje uniemożliwiają zainstalowanie czegokolwiek z jessie-backports, które oczekują tego, co nakazuje zainstalować (np. Jądro z backportowanym oprogramowaniem). Nadal będziesz mieć problemy, jeśli określone pakiety wymagają innych pakietów z backportów, których nie ma na liście.

Package: *
Pin: release n=jessie-backports
Pin-Priority: -1

Package: *
Pin: release n=jessie
Pin-Priority: 1000

# this will allow you to not have to use '-t jessie-backports install'
Package: linux-doc linux-headers-amd64 linux-image-amd64 linux-source
Pin: release n=jessie-backports
Pin-Priority: 1000

Jeśli chcesz uzyskać listę zainstalowanych backportowanych pakietów, możesz użyć następującego skryptu (lub jego części):

chmod a+x name_of_script ./name_of_script > name_of_output_file

#!/bin/bash
RELEASES="jessie-backports"

echo  "Searching for installed packages from" >&2
echo $RELEASES | sed s/^/" * "/ | sed s/\|/"\n * "/g >&2

for package in $(dpkg -l | grep -i ^ii | awk '{print $2}')
do
check=$( apt-cache policy $package 2>&1 | grep -i -A 1 "[*]" | egrep $RELEASES )
if [ "$check" == "" ] ; then
 echo -ne "." >&2
else
 echo -ne "#" >&2
 echo
 apt-cache policy $package
fi
done
echo >&2
echo

Jeśli chcesz obniżyć wersję dowolnego pakietu wymienionego przez powyższy skrypt, dołącz następujące elementy do /etc/apt/preferences:

Package: package1 package2 package3
Pin: release n=jessie
Pin-Priority: 1000

Następnie uruchomić:

sudo apt-get upgrade
NeoH4x0r
źródło
1

Sprawdź konfigurację przypinania dla apt w / etc / apt / preferences i /etc/apt/preferences.d/

Czy to możliwe, że dodałeś niestandardową konfigurację przypinania i o niej zapomniałeś? To jedyny sposób, w jaki o tym myślę, sprawiłby, że apt wolałby backports, ponieważ wydaje się, że ci to robi. W przeciwnym razie po prostu wyciąga zależności - których wymagają określone pakiety.

Oficjalne backporty są już przypięte niżej (100) niż jessie w backportowanych pakietach Plik Release w repozytorium backports. Nie powinieneś wykonywać żadnej konfiguracji apt, aby apt wolał jessie od jessie-backports.

figtrap
źródło