나는 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
다음을
/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
참고: 이 특별한 경우에는 debian aka를 실행하므로 작동하지 않을 수 있습니다. unstable
따라서 이전 버전은 deb 저장소에서 더 이상 사용할 수 없습니다. jessie
jessie-backports 버전으로의 다운그레이드로 패키지의 jessie 버전을 실행 중이고 다시 설치하는 경우 예상대로 작동합니다.
마찬가지로, 패키지가 제거된 경우 에서 찾아 패키지와 정확한 버전을 찾을 수 remove
있습니다 /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-backport보다 jessie를 선호하도록 하기 위해 적절한 구성을 수행할 필요는 없습니다.