일부 데비안 저장소에서 "향상된" 패키지가 많이 있습니다. 이제 저장소를 비활성화했으므로 /etc/apt/sources.list.d
사용 가능한 모든 패키지에 "향상된" 모든 패키지를 다시 설치하고 싶습니다. grep을 사용하면 패키지 목록을 잘 얻을 수 있지만
apt-get install --reinstall \
$(dpkg-query -Wf '${Version}\t${Package}\n' | grep SOMEREPO | awk '{print $2}' )
해당 패키지를 다운로드할 수 없다고 보고합니다. 물론 현재 버전에서는 불가능합니다. --reinstall --downgrade
거절당하다 apt
. 다운그레이드하는 유일한 방법은 특정 버전의 이름을 지정하는 것입니다(작성하려면 훨씬 더 성가신 스크립트가 필요함).일괄가방).
내가 간과한 것이 있나요? 어쩌면 자격이 그것을 할 수 있습니까?
고쳐 쓰다: 통과할 수 있다는 걸 알아요결정된(정말 고마워요, 모드님!) 하지만 사실 그건 해결책이 아닙니다. 매우 힘들고,난 상관 없어다운그레이드의 구체적인 출처에 관해. 현재 활성화된 소스에서 사용 가능한 버전으로 다운그레이드하고 싶습니다.
업데이트 2: Debian 파생 제품(MX Linux)을 사용하고 있으므로 다운그레이드는 다음에서 가능합니다.
- 데비안 스포일러
buster-backports
- 배포판별
https://mirrors.*/mx/MX-Packages/mx/repo/
답변1
핀 우선 순위는 /etc/apt/preferences
또는 아래의 새 파일 에 추가하는 것입니다 /etc/apt/preferences.d
.
Package: *
Pin: release a=*
Pin-Priority: 1001
apt upgrade
다운그레이드를 의미하더라도 알고 있는 설치된 패키지의 최신 버전을 설치합니다. apt
이후에는 현재 구성된 저장소의 패키지만 알려지므로 apt update
원하는 효과를 얻을 수 있습니다.
답변2
이것이 내가 생각해낸 것입니다:
apt install $(apt-show-versions | grep newer | awk '{print $1}' | while read pkg; do ver="$(apt-cache madison "$pkg" | head -n1 | awk -F'|' '{gsub("\\s", "", $2); print $2}')"; printf "%s=%s\n" "$pkg" "$ver"; done)
작동 방식은 다음과 같습니다.
apt-show-versions | grep newer | awk '{print $1}'
다운그레이드해야 하는 패키지 목록을 결정 하는 데 사용됩니다 .host ~ # apt-show-versions|grep newer libapache2-mod-php:all 2:8.3+94+0~20240205.51+debian11~1.gbp6faa2e newer than version in archive libapache2-mod-php8.2:amd64 8.2.18-1+0~20240411.52+debian11~1.gbp91aa2d newer than version in archive [...]
각 패키지의 최신 버전을 확인하려면
apt-cache madison
(파싱하기 쉬운 대안인 것 같음 )을 사용하십시오 .apt-cache policy
host ~ # apt-cache madison libapache2-mod-php libapache2-mod-php | 2:8.2+93~iservbpo11+1 | https://update.iserv.eu/debian bullseye-stable/main amd64 Packages libapache2-mod-php | 2:7.4+76 | http://deb.debian.org/debian bullseye/main amd64 Packages
pkg=ver
APT에 이 특정 버전의 패키지를 설치하도록 지시하는 각 패키지에 대한 문자열을 구성하고libapache2-mod-php=2:8.2+93~iservbpo11+1
이러한 모든 문자열을apt install
.
답변3
나중에 참고할 수 있도록네 말대로 해, 데비안부서... 강렬한 스크립팅 후:
ps=$(for p in $(dpkg-query -Wf '${Version}\t${Package}\n' | grep REPO | awk '{print $2}'); do
apt --quiet list $p | grep -v /now | grep / | awk '{print $1}' | head -1
done)
# this still leaves some /oldstable,oldstable broken versions
apt install --reinstall $(echo "$ps" | cut -f1 -d,)
권장하는 것은 아닙니다. 시스템이 간단한 작업을 방해하면 짜증납니다.