나는 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 (일명 debian)을 실행하고 있기 때문에 작동하지 않을 수 있습니다. unstable
따라서 이전 버전은 deb 저장소에서 더 이상 사용하지 못할 수 있습니다. jessie
jessie-backports 버전에 대한 다운그레이드로 패키지의 jessie 버전을 실행하고 다시 설치하는 경우 예상대로 작동합니다.
마찬가지로, 패키지가 제거된 경우 remove
grep 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를 선호하도록 하기 위해 적절한 구성을 수행할 필요가 없습니다.