it-swarm-ja.com

PPAからパッケージをチェリーピッキングするにはどうすればよいですか?

追加したppaリポジトリからパッケージを選択する方法はありますか?つまり、一部を更新から除外し、他を含めるには?

たとえば、justこのリポジトリ からのchrome-browserパッケージが必要ですが、その他は必要ありません。そのため、Sudo apt-get upgradeに、PPAの他の(クロムブラウザ以外の)パッケージを既存のパッケージの上にインストールさせたくありません。

私はこれが依存関係を読み違え、含まれているものに必要なものを除外する場合に自分自身を撃つライセンスであることに気付きますが、この場合、他のパッケージはその依存関係ではないことを知っています。

これはまったく可能ですか?ホワイトリスト/ブラックリストファイルなどがありますか?

45
yuvilio

それを行う1つの方法が見つかりました。

トリックは、twoピン留め句を使用することです。 1つ目はPPAからのすべてのパッケージを禁止し、2つ目は必要なパッケージを選択します。

したがって、上記の例では、最初に通常どおり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]? 

したがって、私ができることは、そのppaのすべてのパッケージ、この場合はwebapps-previewにlower優先度except名前に「クロム」が含まれているもの。このメカニズムは パッケージの固定 です

/etc/apt/preferences.d/に2つの句を含むファイルを作成します。最初のものは、webapps-preview ppaのすべてのパッケージに通常のものよりも低い優先度を与えると言います(したがって、たとえそれらがnot優先される場合でもより高いバージョン番号。2番目の節は、そのppaの名前に「chromium」を含むパッケージに他のパッケージと同じ優先順位を付けて(より高いバージョン番号を持つことにより)インストールされると言うことで、最初の節を部分的にオーバーライドします.

$ 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

そして今、私がアップグレードしようとすると、私はそのPPAから必要なパッケージのみを取得し、他のパッケージは取得しません。素敵なチェリーが私のために選ばれました:

$ 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]?
61
yuvilio

?originセレクタを使用して、インストールするリリースを選択することもできます。

Originが正規表現Originと一致するパッケージバージョンに一致します。たとえば、「!? origin(debian)」はシステム上の非公式パッケージ(Debianアーカイブからではないパッケージ)を見つけます。

したがって、特定のケースでは次を使用できます。

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

または、<packagename>=<version>を使用してバージョンを指定できます。

Sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
7
Braiam

実際、Synapticを介して特定のパッケージを「チェリーピック」することができ、それはvery簡単です。それはこのように動作します:

  • 特定のPPAに対してのみこれを行う場合は、Synapticウィンドウで「Origin」(左下隅)を選択し、変更するPPAを選択します

  • 自動的にアップグレードしたくないパッケージをすべて選択します。

  • [パッケージ/ロックバージョン]メニューを選択します。選択したすべてのパッケージは、再度ロックを解除するまで自動的にアップグレードされません。

5
Mrokii