PPA에서 패키지를 체리 피킹하려면 어떻게합니까? 에서 크롬 브라우저 패키지

추가 한 ppa 저장소에서 패키지를 선택하는 방법이 있습니까? 즉, 다른 사람을 포함하면서 일부를 업데이트에서 제외하려면?

예를 들어, 내가 원하는 단지 에서 크롬 브라우저 패키지 이 저장소 가 아닌 다른 사람을. 그래서 나는 sudo apt-get upgradeppa의 다른 (크롬 브라우저 이외의) 패키지가 기존 패키지 위에 설치되도록 하고 싶지 않습니다 .

나는 의존성을 잘못 읽고 내가 포함 한 것들에 필요한 것들을 배제하면 발자국을 찍을 수있는 라이센스라는 것을 알고 있지만,이 경우 다른 패키지가 그 패키지에 대한 의존성이 아니라는 사실을 알고 있습니다.

이것이 가능합니까? 어쩌면 화이트리스트 / 블랙리스트 파일이나 무언가가 있습니까?



답변

한 가지 방법을 찾았습니다.

트릭은 두 개의 고정 구절을 사용하고 있습니다. 첫 번째는 PPA에서 모든 패키지를 허용하지 않고 두 번째는 원하는 패키지를 선택하는 것입니다.

따라서 위의 예에서는 평소처럼 ppa를 먼저 추가합니다.

$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...

이제 apt-cache 정책을 실행하면 최신 버전의 크롬 브라우저가 있으며 현재 크롬 브라우저와 동일한 우선 순위 (500)이기 때문에 업그레이드와 함께 설치됩니다.

$ sudo apt-cache policy chromium-browser
chromium-browser:
  Installed: 18.0.1025.168~r134367-0ubuntu0.12.04.1
  Candidate: 20.0.1132.47~r144678-0precise1+webapps3
  Version table:
     20.0.1132.47~r144678-0precise1+webapps3 0
        500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main amd64 Packages
 *** 18.0.1025.168~r134367-0ubuntu0.12.04.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/universe amd64 Packages
        500 http://ppa.launchpad.net/chromium-daily/beta/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.1025.151~r130497-0ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
E: Unable to parse package file /etc/apt/preferences.d/webapps-preview-pin-400 (1)
$ 

그 패키지까지는 훌륭하지만이 ppa (500 우선 순위)의 다른 패키지를 설치하고 싶지 않습니다. 지금 업그레이드를 시도하면 해당 저장소에서 원하는 크롬 패키지 이상의 것을 얻을 수 있습니다.

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  bamfdaemon gwibber gwibber-service gwibber-service-facebook gwibber-service-twitter indicator-appmenu libbamf0 libbamf3-0 shotwell
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg gwibber-service-identica indicator-messages indicator-status-provider-mc5
  indicator-status-provider-pidgin libindicator-messages-status-provider1
8 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Need to get 25.3 MB of archives.
After this operation, 5,034 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

그래서 내가 할 수있는 일은 apt 에게이 경우 ppa, webapps-preview의 모든 패키지가 이름에 “chromium” 이있는 패키지를 제외하고 우선 순위 가 더 낮아지기 를 원한다는 것입니다. 이를위한 메커니즘 은 패키지를 고정하는 것입니다

/etc/apt/preferences.d/에 두 개의 절로 파일을 만듭니다. 첫 번째는 webapps-preview ppa의 모든 패키지를 일반 패키지보다 우선 순위가 낮게 지정한다고 말합니다 (따라서 버전 번호가 더 높더라도 선호 하지 않습니다 . 두 번째 절은 이름에 “크롬”이 포함 된 ppa는 다른 패키지와 동일한 우선 순위를 갖기 때문에 더 높은 버전 번호로 설치됩니다.

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  *chromium*
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

“Pin : release”옵션에 대한 올바른 문자열을 식별하기 위해 apt-cache 정책을 다시 사용할 수 있습니다.

$ apt-cache policy
...
500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main i386 Packages
    release v=12.04,o=LP-PPA-webapps-preview,a=precise,n=precise,l=preview,c=main
    origin ppa.launchpad.net
...

apt 버전 <0.8.14의 경우 와일드 카드가 작동하지 않으므로 고정 된 패키지를 명시 적으로 지정해야합니다.

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  chromium-browser chromium-codecs-ffmpeg chromium-browser-l10n chromium-codecs-ffmpeg-extra
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

그리고 지금 업그레이드하려고 할 때 다른 패키지가 아닌 해당 패키지에서 원하는 패키지 만 얻습니다. 멋지게 체리가 나를 위해 고른 것 :

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.1 MB of archives.
After this operation, 5,026 kB of additional disk space will be used.
Do you want to continue [Y/n]?

답변

?origin선택기 를 사용하여 설치할 릴리스를 선택할 수도 있습니다 .

오리진이 정규 표현식 오리진과 일치하는 패키지 버전과 일치합니다. 예를 들어“!? origin (debian)”은 시스템에서 데비안 아카이브가 아닌 비공식 패키지를 찾습니다.

따라서 특정 경우에는 다음을 사용할 수 있습니다.

sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium

또는 다음을 사용하여 버전을 지정할 수 있습니다 <packagename>=<version>.

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3

답변

실제로 Synaptic을 통해 특정 패키지를 “체리 픽”할 수 있으며 매우 쉽습니다. 다음과 같이 작동합니다.

  • 특정 PPA에 대해서만이를 수행하려면 시냅틱 창에서 “원본”(왼쪽 하단)을 선택한 다음 변경할 PPA를 선택하십시오.

  • 더 이상 자동으로 업그레이드하지 않으려는 모든 패키지를 선택하십시오.

  • “Package / Lock Version”메뉴를 선택하십시오. 선택한 모든 패키지는 다시 잠금을 해제 할 때까지 더 이상 자동으로 업그레이드되지 않습니다.