PPA에서 패키지를 체리 피킹하려면 어떻게합니까?


45

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

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

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

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


나는 세 가지 이유로 시냅틱을 전달했습니다. 우분투는 우분투 소프트웨어 센터에 유리하게 소프트웨어 업데이터로 떨어 뜨 렸습니다. GUI보다 명령 줄 솔루션을 선호하십시오. 작동하는 것을 찾게되었습니다 (아래 답변 참조).
yuvilio

2
소프트웨어 센터는 소프트웨어 설치 및 제거에 사용되며, Update Manager는 업데이트에 사용되며, Synaptic에서 고정을 사용하여 다른 패키지가 업그레이드되지 않도록 할 수 있으며 터미널을 엉망으로 만들고 싶지 않은 새로운 사용자의 경우 물론 GUI가 선호 될 것입니다. 물론 정답입니다.
Uri Herrera

소프트웨어 센터 (시냅틱에서 사용하기 쉬운)를 통해 간단하게 할 수없는 일이 몇 가지 있습니다. 그리고 모든 사람 (특히 초보자)이 명령 줄에 익숙하지는 않습니다.
Mrokii

@Mrokii 나는 나의 접근 방식이 초보자가 아니라는 것에 동의합니다. 당신이 쓴 시냅틱 답변과 Uri Herrera가 힌트를 드리겠습니다. 나는 그것을 시도하는 다른 사람들이 그것을 평가하게 할 것이다.
yuvilio

답변:


61

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

트릭은 두 개의 고정 구절을 사용하고 있습니다. 첫 번째는 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]?

5
꽤 복잡합니다.
Mrokii

5
나는 동의하지 않는다. 이것은 누군가가 좋아하는 것에 대해 매우 직설적이다. 그리고 ppa 's Pin 이름을 식별하는 데 필요한 모든 지침을 가지고 있습니다.
Nicholi

이 특정 답변은 apt가 항상 특정 리포지토리 패키지를 선호하도록하려는 사람들을위한 것입니다. 당신이 솔루션 오프를 원하는 경우, 시도 이 답변 또는 이 한
Braiam

7

?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

5

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

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

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

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

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