특정 패키지의 업데이트를 방지하는 방법은 무엇입니까?


374

때문에의 버그 # 693758 나는 것을 방지하고 싶습니다 apt-get upgrade은 "libgtk2.0-0"패키지를 업데이트하고 업데이트 관리자.

이것이 어떻게 달성 될 수 있습니까?


@ hhlp : 그러나이 질문은 설치되지 않은 패키지에 대해 묻습니다.
Nathan Osman

1
@George Edison-패키지를 보유하고 있으므로 패키지를 업데이트 할 수 없습니다. 따라서 패키지를 보유한다는 것은 기본적으로 패키지 관리자에게 현재 버전을 유지하도록 지시한다는 의미입니다. 업데이트 후 현재 작동중인 프로그램의 최신 버전이 중단 된 경우에 유용합니다. (당신은 결코 설치되지 않은 패키지를 가질 수 없으며 내 질문은 동일하다는 것을 알 수 있습니다.). 나는 지금 그것을 테스트했습니다-그는 말했다disable packages from the auto-update
hhlp

답변:


554

보유

dpkg, apt, aptitude 또는 dselect를 사용하여 패키지를 보류하는 네 가지 방법이 있습니다.

dpkg

패키지를 보류하십시오.

echo "<package-name> hold" | sudo dpkg --set-selections

보류를 제거하십시오.

echo "<package-name> install" | sudo dpkg --set-selections

패키지 상태를 표시하십시오.

dpkg --get-selections

단일 패키지의 상태를 표시합니다 :

dpkg --get-selections | grep "<package-name>"

적절한

패키지를 잡으십시오 :

sudo apt-mark hold <package-name>

보류를 제거하십시오.

sudo apt-mark unhold <package-name>

보류중인 모든 패키지 표시 :

sudo apt-mark showhold

dselect

dselect를 사용하여 [S] 선택 화면으로 들어가서 현재 상태로 유지하려는 패키지를 찾은 다음 =또는을 누르십시오 H. [S] 선택 화면을 종료하면 변경 사항이 즉시 적용됩니다.


적성 또는 시냅스 내에서 패키지를 잠금 / 홀딩하는 것이 앱-에프 / 앱에 영향을 미치지 않는다는 점에서 다음과 같은 접근 방식이 제한됩니다.

적성

패키지를 잡으십시오 :

sudo aptitude hold <package-name>

보류를 제거하십시오.

sudo aptitude unhold <package-name>

시냅틱 패키지 관리자로 잠금

이동 시냅틱 패키지 관리자 (시스템> 관리> 시냅틱 패키지 관리자).

검색 버튼을 클릭하고 패키지 이름을 입력하십시오.

패키지를 찾으면 패키지를 선택하고 패키지 메뉴 로 이동하여 버전 잠금을 선택하십시오 .

시냅틱 메뉴

해당 패키지는 이제 업데이트 관리자에 표시되지 않으며 업데이트되지 않습니다.


4
또한 패키지가 설치되지 않도록합니다. 설치시 devscripts로트 패키지는 권장 패키지로 가져옵니다. 메일 서버 (접두사)가 필요하지 않으므로을 실행 echo postfix hold | sudo dpkg --set-selections하기 전에 실행 하여 설치를 비활성화 할 수 sudo apt-get install devscripts있습니다. 이 보류 조치는 설치 후 선택 사항이 재설정 된 경우에만이 설치에 대해서만 지속됩니다.
Lekensteyn

3
또한 지적 할만한 가치가있는 것은, 패키지 홀드는 합법적 인 해결책이없는 상황을 만들어서 업그레이드와 패치를 깨뜨리는 경우가 있다는 것입니다. 패키지 foo가 libbar에 == <또는 <= 의존성을 가지면, apt는 foo뿐만 아니라 libbar의 업그레이드를 거부합니다. 시간이 지남에 따라 이러한 계단식 종속성은 중요한 보안 업데이트를 포함하여 많은 업데이트를 차단하기 위해 커질 수 있습니다. 보류를 제거하고 업그레이드가 발생하도록하거나, 최신 버전의 종속성에 대해 보유중인 패키지를 다시 빌드해야합니다.
Stephanie

2
참고 사항 : 버전 0.7.25 (Ubuntu Lucid)에서 apt-mark지원되지 않음hold
Joril

1
그래픽 드라이버를 보류하려고 할 때 특히 유용합니다. ATI 사용자의 경우 apt-mark hold fglrx fglrx-amdcccle fglrx-dev && aptitude hold fglrx fglrx-amdcccle fglrx-dev.
earthmeLon

8
현재 시냅스와 적성은 해당 프로그램 내의 패키지 만 잠급니다. "패키지 업그레이드를 수행하는 다른 모든 것 (읽기 : Update Manager, apt-get, aptitude 등)은이를 무시합니다." 에서 이 질문에 .
holocronweaver

44

"foo"패키지를 보류 시키려면 :

echo "foo hold" | dpkg --set-selections

당신의 경우에 우리는 와인을 보류 할 것입니다 :

sudo -i
echo "wine hold" | dpkg --set-selections

보류를 제거하려면 다음을 수행하십시오.

sudo -i
echo "wine install" | dpkg --set-selections

또한 패키지가 보류중인 동안을 통해 특정 버전을 설치할 수 있습니다apt-get install wine=1.2.3 . 보류 중이면 apt-get (dist-)upgrade변경되지 않습니다.
rcoup

@rcoup 이전 버전이 보류 중이고 설명에 따라 보류를 제거하지 않고 수동으로 새 버전으로 업그레이드하는 경우 이전 버전이 다시 캐시 될 수 있도록 캐시에 유지됩니까?
cxrodgers

1
@cxrodgers 로컬 캐시 (일반적으로 /var/cache/apt/archives)는 보류 및 업그레이드 및 항목과 무관하므로 다운로드 할 때까지 다운로드 한 모든 버전이 실행됩니다apt-get [auto]clean
rcoup

35

나는 똑같은 것을 찾고 있었고 많은 연구 끝에 다음 구문을 사용하면 하나의 특정 버전을 금지하고 다음 업데이트를 허용한다는 것을 알았습니다.

패키지 : compiz-plugins-main
핀 : 버전 1 : 0.9.7.0 ~ bzr19-0ubuntu10.1
핀 우선 순위 : -1

이것은 / etc / apt / preferences 파일로 들어갑니다.


9
업데이트를 무기한 방지하는 것보다 훨씬 더 좋은 방법입니다.
Eero Aaltonen

이 방법을 사용하면 우분투 하나 또는 아마존 아이콘과 같은 우분투 '애드웨어'가 다음 릴리스 업그레이드로 다시 설치되지 못하게 될 가능성이 더 큽니다 ...
Daniel Alder

19

synaptic사용하여 설치하십시오 sudo apt-get install synaptic.

gksudo synaptic검색 상자를 사용하여 실행 하고 잠 그려는 패키지를 찾으십시오.gedit

여기에 이미지 설명을 입력하십시오

패키지 메뉴에서 버전 잠금을 선택하십시오 .

여기에 이미지 설명을 입력하십시오

이것이 전부입니다. 잠금시 현재 설치된 버전은 업그레이드 중에도 설치 상태를 유지합니다.


7
"잠금 버전은 소리만큼 영리하지 않습니다. 주석에 표시된 내용을 수행하고, 버전을 잠 가야합니다 ...하지만 시냅틱 내에서만 잠급니다. 패키지 업그레이드를 수행하는 다른 것 (읽기 : 업데이트 관리자) , apt-get, aptitude 등)은 이것을 무시합니다. 이것은 아마도 버그가있는 행동 일 것이므로 시간이 지나면 해결 될 것으로 기대합니다. " 에서 askubuntu.com/questions/9607/what-does-lock-version-do . 현재 상태는 무엇입니까? Synaptic에 무언가가 잠겨 있다면, 다른 패키지 관리자가 자물쇠를 "명예롭게"할 것입니까?

2
vasa1 : 버전 0.75.13부터는 여전히 :( 적성과 같은 문제.
syockit

16

패키지가 설치되는 것을 방지하는 것을 "패키지 유지"라고하며 매우 간단합니다.

echo package_name hold | dpkg-세트 선택

... 여기서 * package_name *은 설치하지 못하게하려는 패키지의 이름입니다.

참고 : 위 명령은 루트 권한을 가정합니다. 다시 말해, sudo su실행하기 전에 입력해야 할 수도 있습니다.


완벽한 대답했다. 감사합니다.
asoundmove

s/sudo su/sudo -s/g(또는 sudo -i). ( -i로그인 쉘을 제공하고 -s그렇지 않습니다).
derobert

6

"Tab Groups" 와 같은 많은 애드온 이 새로운 Firefox 57에서 더 이상 작동하지 않기 때문에 시간 apt-get이로 대체 apt되었으므로, 예를 들어 Firefox가 56 이상의 버전으로 업데이트되는 것을 방지하고 싶습니다 ( "WebExtensions"참조). 최신 정보").

하나의 명령으로 둘 이상의 패키지를 보유하고 와일드 카드를 사용할 수 있습니다.

Firefox가 업데이트되지 않도록 방지

sudo apt-mark hold firefox firefox-locale-*

나중에 보류하지 않으려면 다음 명령을 사용하십시오.

sudo apt-mark unhold firefox firefox-locale-*

4

시냅틱으로 특정 패키지의 버전을 고정시킬 수 있습니다. 이는 apt-get을 수정할지 100 % 확실하지 않지만 업데이트 관리자를 확실히 중지시킵니다.

패키지를 고정하려면 시냅스에서 패키지를 선택한 다음 패키지 메뉴를 열고 고정 버전을 선택하십시오.

도움이 되었기를 바랍니다

편집 :이 질문 16668 은 비슷한 상황을 다룹니다.



3

버그 # 75332 , # 158981# 72806을 참조하십시오 .

요약하면 apt-get / aptitude 수준에서 보류가 dpkg에서 보류 상태를 트리거하지 않고 (특히 버그 72806 참조) 업데이트 관리자가 dpkg에서 상태를 읽습니다.

해결 방법은 루트로 실행됩니다. echo "package hold" | dpkg --set-selections


2

다음과 같이 "특정 재정의"를 적시에 사용할 수 있습니다.

aptitude reinstall ~i oracle-java8-jre:

이것은 oracle-java8-jre가 아닌 시스템의 모든 패키지를 다시 설치하기 위해 한 번만 사용하고 (나중에 다시 설치하기 위해 저장되지 않음) 특정 재정의를 유지합니다.

Keep specific override를 사용하는 경우 패키지는 일시적으로 설치 상태를 유지하지 않는 상태가됩니다.

시스템이 어떻게 손상되었다고 생각하면 아주 좋습니다.


1

Synaptic을 설치 한 경우 패키지를 선택하고 패키지-> 잠금 버전 메뉴를 사용하여 업데이트되지 않도록 할 수 있습니다.

sudo apt-get install synaptic을 사용하여 Synaptic을 설치할 수 있습니다. 나는 개인적으로 소프트웨어 센터보다 더 유용하다고 생각합니다 ... 다시, 저는 상당히 오래된 학교입니다. :)


0

때때로 현재 설치된 모든 패키지 를 보류하고 싶을 수도 있습니다 . 방법은 다음과 같습니다.

먼저 현재 상태를 저장하여 실행 취소 할 수 있습니다.

dpkg --get-selections > current_selections.txt

그런 다음 모든 패키지를 보류하십시오.

dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections

마지막으로 이전 상태로 되돌리려면

dpkg --set-selections < current_selections.txt

이를위한 한 가지 사용 사례는 VM 또는 Amazon AMI 스냅 샷을 생성하여 QA에서 프로덕션 환경으로 마이그레이션 할 때입니다.


0

우분투 16.04와 관련 하여 @ soger 의 의견에 세부 사항 추가 .

Ubuntu 16.04에는 기본적으로 기존 / etc / apt / preferences 파일이 없습니다. 현재 파일이 없으면 위에서 설명한 @soger에서 설명한대로 새 파일을 작성하고 스탠자로 채워서 제공된 패키지 및 해당 종속성을 업데이트에서 제외하십시오.

그 후에는 달리고 apt updateGTG입니다. : 0)

예를 들어 인텔 비디오 카드와 NVidia 카드가 내장 된 Ubuntu 16.04.5 LTS 서버가 있습니다. NVidia 카드는 유일하게 사용됩니다. 서버는 CUDA 드라이버도 사용합니다. apt계속 주장 하는 데 문제가 있었다

va-driver-all

(Intel 드라이버) 업데이트가 필요했지만 설치할 버전을 확인할 수 없습니다. 이것은 나를 미치게 만들었고, 어쨌든 인텔 드라이버가 필요하지 않았습니다. 이 텍스트를 환경 설정 파일에 입력하고 적절하게 문제를 해결했습니다.

Package: va-driver-all
Pin: release *
Pin-Priority: -1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.