데비안 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
주의:
일부 패키지는 자동으로 설치되므로 모두 다시 설치하면 자동으로 설치된 패키지가 수동으로 설치된 것으로 표시됩니다. 따라서 필요하지 않은 경우 제거되지 않습니다.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
답변
-
다음 중 하나
/etc/apt/apt.conf
또는 파일에 다음을 추가하십시오/etc/apt/apt.conf.d
.APT::Default-Release "jessie";
-
기존 백 포트를 제거하려면 설치된 백 포트 목록과 교체 된 버전을 확인해야합니다. 다행히도이 정보는 다음에서 매우 쉽게 추출 할 수 있습니다.
/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 저장소에서 더 이상 사용할 수 없습니다. jessie
jessie-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 구성을 수행하지 않아도됩니다.