데비안 제시가 너무 많은 백 포트를 설치하고 있습니다 | sudo tee /etc/apt/sources.list.d/backports.list (필요에 따라 랩톱의 일부

데비안 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파이프 라인 끝에서 에코를 배치하는 것은 작동하지 않습니다) :

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. 다음 중 하나 /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일명을 실행하기 때문에 작동 unstable하지 않을 수 있으므로 이전 버전은 deb 저장소에서 더 이상 사용할 수 없습니다. jessiejessie-backports 버전으로 다운 그레이드 한 패키지의 jessie 버전을 실행 하고 다시 설치하는 경우 예상대로 작동합니다.

마찬가지로, 패키지가 제거 된 경우 remove에서에서 grepping하여 패키지와 정확한 버전을 찾을 수 있습니다 /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해당 명령 의 일부만 먼저 실행하는 것이 좋으므로 다시 설치할 패키지와 버전 목록을 볼 수 있습니다.


답변

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

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


답변

/ etc / apt / preferences 및 /etc/apt/preferences.d/에서 apt의 고정 구성을 확인하십시오.

사용자 정의 고정 구성을 추가하고 잊었을 수 있습니까? 그것이 내가 당신에게하고있는 것처럼 백 포트를 선호하게 할 것이라고 생각할 수있는 유일한 방법입니다. 그렇지 않으면 지정한 패키지에 필요한 종속성을 끌어 당기는 것입니다.

공식 백 포트는 백 포트 리포지토리의 백 포트 패키지 릴리스 파일에서 jessie보다 100보다 낮게 고정되어 있습니다. jessie-backports보다 jessie를 선호하도록 apt 구성을 수행하지 않아도됩니다.


답변