Debian Jessie에 백포트가 너무 많이 설치되어 있습니다.

Debian Jessie에 백포트가 너무 많이 설치되어 있습니다.

나는 Debian Jessie를 가지고 있고 백포트를 추가했습니다(다음에 따라)이 지침):

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

(노트북의 일부 하드웨어에 필요했기 때문에 최신 커널을 얻기 위해 이 작업을 수행했습니다.)

지침에는 백포트된 패키지를 명시적으로 요청하지 않는 한 아무 일도 일어나지 않을 것이라고 나와 있습니다. 예를 들어 apt-get -t jessie-backports install "package".

그러나 이제 백포트에서 시스템의 전체 로드를 가져오는 것 같고, 백포트된 항목의 정확한 버전으로 업데이트해야 하므로 패키지 하나가 제거되었습니다.

그래서 내 질문은 다음과 같습니다

  • 백포트가 더 이상 설치되지 않도록 처음에 어떻게 중지합니까?
  • 기존 백포트를 삭제하는 방법은 무엇입니까?

참고: 이는 백포트에서 설치된 패키지 목록을 가져옵니다(그리고 에 전달할 수 있는 형식으로 apt-get install, 어떤 이유로 sudo apt-get install파이프 끝에 echo를 넣는 것이 작동하지 않습니다).

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

경고하다:

일부 패키지는 자동으로 설치되므로 모든 패키지를 다시 설치하면 자동으로 설치된 패키지는 수동으로 설치된 것으로 표시됩니다. 따라서 필요하지 않을 때는 제거되지 않습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있는 사람이 있습니까?

답변1

  1. /etc/apt/apt.conf다음 파일 중 하나에 다음을 추가해 보세요 /etc/apt/apt.conf.d.

    APT::Default-Release "jessie";

  2. 기존 백포트를 제거하려면 설치된 백포트와 교체되는 버전 목록을 가져와야 합니다. 다행히도 이 정보는 다음 사이트에서 쉽게 얻을 수 있습니다./var/log/dpkg.log

예를 들어 grep ' upgrade ' /var/log/dpkg.log다음과 같은 많은 줄이 표시됩니다.

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

이는 2월 15일 오전 11시 6분에 python-numpy를 버전 1:1.11.0~b2-1에서 버전 1:1.11.0~b3-1로 업그레이드했다는 의미입니다.

이전 버전으로 다운그레이드하려면 다음을 실행합니다.

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

sid참고: 이 특별한 경우에는 debian (일명 debian)을 실행하고 있기 때문에 작동하지 않을 수 있습니다. unstable따라서 이전 버전은 deb 저장소에서 더 이상 사용하지 못할 수 있습니다. jessiejessie-backports 버전에 대한 다운그레이드로 패키지의 jessie 버전을 실행하고 다시 설치하는 경우 예상대로 작동합니다.

마찬가지로, 패키지가 제거된 경우 removegrep for in 을 사용하여 해당 패키지와 정확한 버전을 찾을 수 있습니다 /var/log/dpkg.log.


awk. grep​예를 들어, 설치한 jessie-backports 업그레이드가 특정 날짜(예: 2016-02-15)에 모두 완료되었음을 알고 있는 경우 다음 명령을 사용하여 이전 버전으로 다운그레이드할 수 있습니다.

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

(가로 스크롤 막대를 방지하려면 줄바꿈 및 들여쓰기를 추가하세요.)

-d() 옵션의 사용에 유의하십시오 --download-only. 명령이 apt-get install원하는 작업과 원하는 작업만 수행하는지 확인한 후 명령을 다시 실행하고 옵션을 제거하십시오.

또한 awk다시 설치될 패키지와 버전의 정확한 목록을 볼 수 있도록 먼저 명령 자체의 일부만 실행하는 것이 좋습니다.

답변2

제대로 설정하지 않으신 것 같습니다 /etc/apt/preferences. 다음은 jessie-backports(예: 백포트된 커널)에서 설치해야 하는 모든 것을 방지합니다. 지정된 패키지에 나열되지 않은 백포트의 다른 패키지가 필요한 경우 여전히 문제가 있습니다.

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

설치된 백포트된 패키지 목록을 얻으려면 다음 스크립트(또는 그 일부)를 사용할 수 있습니다.

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

위 스크립트에 나열된 패키지 중 하나를 다운그레이드하려면 다음을 추가하십시오 /etc/apt/preferences.

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

그런 다음 다음을 실행하십시오.

sudo apt-get upgrade

답변3

/etc/apt/preferences 및 /etc/apt/preferences.d/에서 apt의 고정 구성을 확인하세요.

사용자 정의 고정 구성을 추가하고 잊어버렸을 가능성이 있습니까? 이것이 당신처럼 백포팅을 선호하도록 제가 생각할 수 있는 유일한 방법입니다. 그렇지 않으면 지정한 패키지에 필요한 종속성을 가져옵니다.

공식 백포트는 백포트 저장소의 백포트 패키지 릴리스 파일에서 jessie(100) 아래에 수정되었습니다. apt가 jessie-backports보다 jessie를 선호하도록 하기 위해 적절한 구성을 수행할 필요가 없습니다.

관련 정보