특정 리포지토리 세트의 업데이트로 설치되는 업데이트를 어떻게 제한합니까? 이것도 가능합니까?
특정 리포지토리 세트의 업데이트로 설치되는 업데이트를 어떻게 제한합니까? 이것도 가능합니까?
답변:
고정은 최신 버전에서 패키지를 가져 오는 동안 Ubuntu (또는 다른 데비안 시스템)의 안정적인 릴리스를 유지하는 프로세스입니다. — help.ubuntu.com
apt
정책을 통해 완전히 제거하지 않고 특정 리포지토리에서 자동 업데이트를 비활성화 할 수 있습니다 .
repository에서 자동 업데이트를 사용하지 않으려면 다음 컨텐츠가 포함 repo
된 파일 /etc/apt/preferences.d/repo
을 추가하십시오 .
Package: *
Pin: release n=repo
Pin-Priority: 50
이 저장소의 모든 패키지는 이미 설치된 패키지 (100)보다 우선 순위가 낮습니다.
자세한 내용 man apt_preferences
은 Ubuntu Community Wiki를 확인하십시오 .
apt-cache policy package-name
release n=repo
누군가를 캐시하지 않기 때문에
-t
옵션 으로 릴리스를 지정할 수 있습니다 . 예를 들어 /etc/apt/sources.list
Iceweasel 최신 릴리스를 설치 하기 위해 다음 저장소를 추가했습니다 .
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와 달리 ...").
apt-get
매뉴얼 에서 볼 수 있듯이 -t
저장소 이름이 아닌 릴리스를 지정 하십시오 . 우분투에는 RHEL, Fedora, CentOS 등과 같은 RedHat 기반 리눅스와 달리 리포지토리 이름이 없습니다.
-t xenial
단일 패키지에서 작동합니다. 그러나 모든 의존성은 여전히 상위 패키지에서 가져옵니다.
당신은 더 적은 100보다 우선 순위에서 설치하지 않을 저장소를 고정해야하는 수단 (에서 apt_preference
man 페이지)
100 <= P <500
은 다른 배포에 속하는 버전이 없거나 설치된 버전이 최신 버전이 아닌 한 버전을 설치합니다.
고정 할 저장소를 선택하려면 저장소 Release
파일의 필드를 사용 합니다. 이에 따라 archive
, label
, release
, version
등이 필드의 값을 지정하여 정확하게 저장소를 선택하고 그것을 원하는 우선 순위를 할당합니다. 자세한 내용 은 apt_preference 페이지를 확인하십시오.
계속 진행하기 전에 고정에 대한 중요한 사항을 알아야합니다. 그 포함
Release
파일 필드 와 apt-cache policy
출력에 매핑
적절한 환경 설정 파일의 형식
Release
파일 필드를 사용하여 우선 순위 설정
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=
출력 과 같이 표시
Suite 는 Archive 와 동일합니다 . 데비안 위키에서 그것은 이 디렉토리에있는 패키지가 속해있는 (또는 설계된) 데비안 배포판의 이름입니다. . 우분투를 들어, 다음은 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=xenial
n=trusty
apt-cache policy
출력으로 시작 하는 다른 행 origin
은 리포지토리의 인터넷 출처를 알려줍니다. 고정에도 사용할 수 있습니다. 그러나 Release
파일 Origin
필드 와 혼합해서는 안됩니다 . 그것들이 다릅니다.
이 값을 사용하여 리포지토리를 고정합니다.
그렇다면 고정 1 을 사용하여 리포지토리를 제한 하는 방법은 무엇입니까?
고정을 제어하는 방법에는 여러 가지가 있으며 작은 하위 집합 만 우분투에 효과적입니다. 자세한 설명은 답변 범위를 벗어납니다. 이에 대한 apt_preference
맨 페이지 를 참조하십시오 .
고정 또는 적절한 환경 설정 파일은 /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:
하고 그 값은 숫자입니다. 위의 타겟팅 된 항목의 우선 순위를 나타냅니다.
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
릴리스 파일에서 동일한 값을 사용하기 때문에 우선 순위가 동일 합니다. 성공적으로 고정하려면 핀 파일에 더 많은 필드를 결합해야합니다.
저장소에서 패키지를 고정하려면 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
여기서는 Origin
PPA의 값 뿐만 아니라 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
매뉴얼 페이지 를 확인 하십시오.
명백한 선택은 /etc/apt/sources.list
다른 모든 저장소 를 수정 하고 주석 처리 한 다음 실행하는 것입니다.
apt-get update && apt-get upgrade && apt-get autoclean
그런 다음에서 주석을 제거하십시오 sources.list
. 아마도 가장 좋은 방법은 아니지만 적어도 apt-get
맨 페이지는 그렇게하는 방법을 지정하지 않습니다.
예를 들어 Ubuntu 배포 업그레이드 프로세스는 업그레이드 중에 모든 타사 리포지토리를 비활성화합니다 (일부 옵션을 실행하여 임시로 제외하지 마십시오).