특정 저장소에서만 업데이트를 설치하는 방법은 무엇입니까?


39

특정 리포지토리 세트의 업데이트로 설치되는 업데이트를 어떻게 제한합니까? 이것도 가능합니까?


런타임 동안 저장소를 지정할 수 있습니까, 아니면 좀 더 정적 인 것입니까? 아래 의 답변 은 후자의 옵션을 가정합니다.
tshepang

이상적으로는 런타임 중입니다. 정적 옵션이면 충분합니다.
톤 반 덴 Heuvel

2
제목과 요청한 실제 도움이 다릅니다.
sundar

답변:


29

피닝 사용

고정은 최신 버전에서 패키지를 가져 오는 동안 Ubuntu (또는 다른 데비안 시스템)의 안정적인 릴리스를 유지하는 프로세스입니다. — help.ubuntu.com

apt정책을 통해 완전히 제거하지 않고 특정 리포지토리에서 자동 업데이트를 비활성화 할 수 있습니다 .

repository에서 자동 업데이트를 사용하지 않으려면 다음 컨텐츠가 포함 repo된 파일
/etc/apt/preferences.d/repo을 추가하십시오 .

Package: *
Pin: release n=repo
Pin-Priority: 50

이 저장소의 모든 패키지는 이미 설치된 패키지 (100)보다 우선 순위가 낮습니다.

자세한 내용 man apt_preferencesUbuntu Community Wiki를 확인하십시오 .


3
유일한 apt_preferences 답변이 마지막 인 것은 부끄러운
Robert Siemer

어떤 버전의 리포지토리를 찾는 방법?
최대 N

2
@MaxN 당신은 보통 다음 정보를 실행함으로써 그 정보를 찾을 것입니다apt-cache policy package-name
Anwar

이렇게하면 업데이트 중에 저장소를 고려하지 않아도됩니다. release n=repo누군가를 캐시하지 않기 때문에
Anwar

35

-t옵션 으로 릴리스를 지정할 수 있습니다 . 예를 들어 /etc/apt/sources.listIceweasel 최신 릴리스를 설치 하기 위해 다음 저장소를 추가했습니다 .

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

아시다시피 iceweasel공식 데비안 저장소 에는 동일한 패키지 가 있습니다. 이 특정 릴리스에서 Iceweasel을 설치하려면 다음을 실행하십시오.

apt-get install -t squeeze-backports iceweasel

apt-get 매뉴얼 페이지에서 :

-t, --target-release, --default-release
           This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
           release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
           the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
           from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
           apt_preferences(5) manual page.

이것이 더 나은 해결책이라고 생각합니다.

업데이트 : 주석에서 언급 한 @SuB는 " -t리포지토리 이름이 아닌 릴리스를 지정합니다. Ubuntu에는 리포지토리 이름이 없습니다 (RHEL, Fedora, CentOS 등의 RedHat 기반 Linux와 달리 ...").


4
apt-get매뉴얼 에서 볼 수 있듯이 -t저장소 이름이 아닌 릴리스를 지정 하십시오 . 우분투에는 RHEL, Fedora, CentOS 등과 같은 RedHat 기반 리눅스와 달리 리포지토리 이름이 없습니다.
SuB

1
@SuB 네, 맞습니다! 리포지토리 이름을 릴리스와 혼동했습니다!
cartoonist

-t xenial단일 패키지에서 작동합니다. 그러나 모든 의존성은 여전히 ​​상위 패키지에서 가져옵니다.
Anwar

11

짧은 답변

당신은 더 적은 100보다 우선 순위에서 설치하지 않을 저장소를 고정해야하는 수단 (에서 apt_preferenceman 페이지)

100 <= P <500
은 다른 배포에 속하는 버전이 없거나 설치된 버전이 최신 버전이 아닌 한 버전을 설치합니다.

고정 할 저장소를 선택하려면 저장소 Release파일의 필드를 사용 합니다. 이에 따라 archive, label, release, version등이 필드의 값을 지정하여 정확하게 저장소를 선택하고 그것을 원하는 우선 순위를 할당합니다. 자세한 내용 은 apt_preference 페이지를 확인하십시오.


긴 답변

계속 진행하기 전에 고정에 대한 중요한 사항을 알아야합니다. 그 포함

  1. Release파일 필드 와 apt-cache policy출력에 매핑

  2. 적절한 환경 설정 파일의 형식

  3. Release파일 필드를 사용하여 우선 순위 설정

1. Release파일 및 apt-cache policy출력 필드

에서 데비안 위키 기사

  • 기술
  • 상표
  • 유래
  • 번역
  • 모음곡
  • 코드 네임
  • 구성 요소
  • 아키텍처

apt-cache policy다음과 같은 결과가 표시됩니다.

 500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
 release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64

이 줄의 값은 Release파일 에서 가져 옵니다.

  • 설명 은 저장소에 대한 설명을 설정합니다. 이것은 apt-cache policy출력에 표시되지 않습니다

  • 레이블 은 저장소의 레이블입니다. 많은 리포지토리에는 빈 레이블이 있습니다. 그것은에 표시된 것 l=<label>출력한다.

  • 원점 이것은 저장소의 원점을 알려줍니다. 공식 우분투 저장소는 Ubuntu그 가치가 있습니다. o=출력 과 같이 표시

  • 버전 은 배포판의 버전입니다. Xenial의 경우 16.04입니다. v=출력 과 같이 표시

  • SuiteArchive 와 동일합니다 . 데비안 위키에서 그것은 이 디렉토리에있는 패키지가 속해있는 (또는 설계된) 데비안 배포판의 이름입니다. . 우분투를 들어, 다음은 release-updates, release-security예를 들어 등, xenial-updates, xenial-security. 출력에 a=xenial,로 표시 a=xenial-security됩니다. PPA는이를 위해 릴리스 이름 만 사용하므로 Pinning에서 그다지 도움이되지 않습니다.

  • 구성 요소 가 라이센싱에 대해 알려줍니다. 그것은이다 main, multiverse, restricted, universe우분투. 출력에서는 c=main또는 c=restricted등으로 표시됩니다 . 대부분의 PPA main는이 필드에 사용하므로 많이 고정하는 데 도움이되지 않습니다.

  • 아키텍처 는 OS 아키텍처에 관한 것입니다. 출력 으로 b=i386또는 b=amd64출력으로 표시

  • 코드 이름은 배포의 릴리스 이름입니다. 16.04의 경우입니다 xenial. 14.04의 경우입니다 trusty. 또는 로 apt-cache policy출력에 표시됩니다 . 일반적으로 단일 배포의 모든 리포지토리에서 동일합니다. 그래서 많이 고정하는 데 도움이되지 않습니다.n=xenialn=trusty

apt-cache policy출력으로 시작 하는 다른 행 origin은 리포지토리의 인터넷 출처를 알려줍니다. 고정에도 사용할 수 있습니다. 그러나 Release파일 Origin필드 와 혼합해서는 안됩니다 . 그것들이 다릅니다.

이 값을 사용하여 리포지토리를 고정합니다.

그렇다면 고정 1 을 사용하여 리포지토리를 제한 하는 방법은 무엇입니까?

고정을 제어하는 ​​방법에는 여러 가지가 있으며 작은 하위 집합 만 우분투에 효과적입니다. 자세한 설명은 답변 범위를 벗어납니다. 이에 대한 apt_preference맨 페이지 를 참조하십시오 .

2. 핀 파일 형식

고정 또는 적절한 환경 설정 파일은 /etc/apt/preferences.d폴더에 있습니다. 각 고정에는 세 줄이 있습니다.

  • 첫 줄은 Package:쉼표로 구분 된 패키지 이름으로 시작합니다 . 정규 표현식과 글로브가 허용됩니다

  • 두 번째 줄 Pin:은 패키지 세트를 대상으로하는 데 사용됩니다.

    xenial보다 높은 패키지를 고정 xenial-updates하려면을 사용 release a=xenial합니다.

    버전 5.0을 고정하려면 version 5.0여기에서 사용 합니다. 글로벌 패튼이 허용됩니다.

    또는 origin http://archive.ubuntu.com에서 패키지를 고정 하려면을 사용 origin "archive.ubuntu.com"합니다. 우리는 http://거기에 프로토콜 을 쓰지 않습니다 .

  • 세 번째 줄로 시작 Pin-Priority:하고 그 값은 숫자입니다. 위의 타겟팅 된 항목의 우선 순위를 나타냅니다.

3. Release파일 필드를 사용하여 우선 순위 설정

여기에 예가 있습니다

Package: *
Pin: release a=xenial
Pin-Priority: 1001

이 예에서 xenial아카이브의 패키지는 xenial-updates및 보다 우선 순위가 높습니다 xenial-security.

고정 후, 프로그램을 실행하면 apt-cache policy nautilus실제로 xenial아카이브의 상위 버전보다 아카이브 의 하위 버전에 우선 순위가 더 높은 것으로 나타났습니다 xenial-updates. 통지 Candidate:라인을.

nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 100
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

그러나 PPA 제공 패키지보다 우선 순위를 부여하려는 경우에는 작동하지 않습니다. PPA xenial는 기본적으로 동일한 아카이브 이름 을 사용하기 때문 입니다. 따라서 우선 순위를 할당하면 a=xenial해당 패키지에도 적용됩니다. 예를 들어 (PAP 사용 후)

13:31 $ apt-cache policy nautilus
nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.5-0ubuntu1~xenial1
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 1001
        500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
        500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

이제 후보 버전은 PPA에서 온 것입니다. xenial공식 우분투 저장소와 PPA의 아카이브에있는 두 패키지는 1001모두 Archive릴리스 파일에서 동일한 값을 사용하기 때문에 우선 순위가 동일 합니다. 성공적으로 고정하려면 핀 파일에 더 많은 필드를 결합해야합니다.


몇 가지 예

PPA 저장소 고정

저장소에서 패키지를 고정하려면 apt-cache policy명령 에서 찾은 정보를 사용하여 패키지를 대상으로 지정해야합니다 . 우리는 그것이 a=xenial저장소를 정확히 지적하는 데 도움이되지 않는 것을 보았습니다 . 저장소를 정확하게 타겟팅하려면 환경 설정 파일에서 쉼표를 사용하여 여러 필드를 함께 사용해야합니다.

예를 들어, 모든 패키지가 http://ppa.launchpad.net/oibaf/graphics-drivers/ppa 되는 것을 방지하기 위해

Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10

여기서는 OriginPPA의 값 뿐만 아니라 codename 값을 사용하고 있습니다. (실제로 코드 이름 값이 필요하지는 않습니다). 때때로 저장소가이 값을 놓칠 수 있습니다. 이 경우 다른 기술을 사용해야합니다. 의 결과는 apt-cache policy libgl1-mesa-glx작동한다고 말합니다. 이 PPA의 모든 패키지 우선 순위를 낮췄습니다.

libgl1-mesa-glx:
  Installed: 12.1~git1608200730.16ef7a~gd~x
  Candidate: 12.1~git1608200730.16ef7a~gd~x
  Version table:
 *** 12.1~git1608200730.16ef7a~gd~x 100
        -10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     11.2.0-1ubuntu2.1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     11.2.0-1ubuntu2 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

후보자라는 사실을 무시하십시오. 시스템에 이미 설치되어 있기 때문에 발생했습니다 . 오른쪽에서 우선 순위 확인

릴리스 정보가 누락 된 경우 리포지토리 고정

릴리스 정보가없는 리포지토리를 고정 http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04하려면 다른 방법을 사용해야합니다. 다른 리포지토리에서 해당 오리진을 사용하고 있지 않으므로이 리포지토리를 안전하게 origin고정 하는 데 사용할 수 있습니다 .

Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10

참고 1 : 이 원본은 인터넷 원본이며 릴리스 파일에서 공급 업체를 지정하는 것이 아닙니다.

참고 2 : Pin-Priority 숫자는 특별한 의미가 있습니다. 자세한 내용은 apt_preference매뉴얼 페이지 를 확인 하십시오.


7

GUI 기반 대안은 소프트웨어 센터를 열고 편집> 소프트웨어 소스를 선택하는 것입니다.

Ubuntu 소프트웨어 탭이 선택된 소프트웨어 소스

다른 소프트웨어 탭이 선택된 소프트웨어 소스

업데이트를 원하지 않는 리포지토리를 선택 해제하기 만하면됩니다.

도움이 되었기를 바랍니다


5

명백한 선택은 /etc/apt/sources.list다른 모든 저장소 를 수정 하고 주석 처리 한 다음 실행하는 것입니다.

apt-get update && apt-get upgrade && apt-get autoclean

그런 다음에서 주석을 제거하십시오 sources.list. 아마도 가장 좋은 방법은 아니지만 적어도 apt-get맨 페이지는 그렇게하는 방법을 지정하지 않습니다.

예를 들어 Ubuntu 배포 업그레이드 프로세스는 업그레이드 중에 모든 타사 리포지토리를 비활성화합니다 (일부 옵션을 실행하여 임시로 제외하지 마십시오).


1

다른 GUI 옵션 중 하나는 Synaptic 패키지 관리자에서 원본을 선택하는 것입니다.

  1. 설치하려는 패키지 이름을 검색하십시오.
  2. 원점 단추를 클릭하십시오
  3. 설치할 저장소를 선택하십시오
  4. 패키지를 선택하십시오
  5. 대다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.