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


45

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

たとえば、私はこのリポジトリからのみ chrome-browserパッケージが欲しいのですが、他のパッケージは欲しくないのです。したがってsudo apt-get upgrade、PPAの他の(クロムブラウザー以外の)パッケージを既存のパッケージの上にインストールするのは望ましくありません。

これは、依存関係を読み間違え、自分が含めた依存関係に必要な依存関係を除外した場合に自分自身を撃ち落とすライセンスですが、この場合、他のパッケージはその依存関係ではないことは事実です。

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


私は3つの理由でsynapticを渡します:UbuntuはソフトウェアアップデーターとしてUbuntu Software Centerを支持しました、Synapticがインストールされたファイルを介してPPAからのアップグレードを停止する方法を知りませんでした(これは私の問題でした) GUIよりもコマンドラインソリューションを好む。うまくいったものを見つけることになりました(以下の私の答えをご覧ください)。
yuvilio

2
Software Centerはソフトウェアのインストールと削除に使用され、Update Managerは更新に使用されます。Synapticでピン留めを使用して、他のパッケージがアップグレードされないようにすることもできます。また、ターミナルをいじりたくない新規ユーザーにも使用できます。 GUIをお勧めしますが、もちろんあなたのものがほとんど正しい答えです。
ウリエレーラ

Software-Centerを介して単純に実行できないことがいくつかあります(Synapticを使用すると簡単です)。そして、誰も(特に初心者)がコマンドラインに慣れているわけではありません。
Mrokii

@Mrokii私のアプローチは初心者向けではないことに同意します。あなたが書いたシナプスの答えとウリ・ヘレラが示唆した、私はそれがうまくいくと思いますが、その点で優れています。私はそれを試みる他の人にそれを評価させます。
yuvilio

回答:


61

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

秘Theは、2つの固定句を使用することです。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)の名前に「クロム」が含まれるパッケージを除き、優先度低くすることをaptに伝えることができます。このメカニズムはパッケージを固定しています

/etc/apt/preferences.d/に2つの句を含むファイルを作成します。最初の例では、webapps-preview ppaのすべてのパッケージに通常のパッケージよりも低い優先度を指定しています(したがって、バージョン番号が大きい場合でも優先されません。2番目の節は、その名前に「chromium」が含まれる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

そして今、私がアップグレードしようとすると、私はその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]?

5
かなり複雑です、私見。
Mrokii

5
私は同意しません、これは誰かが望んでいるもののためにかなり簡単です。そして、PPAのPIN名を識別するためのすべての指示があると便利です。
ニチョリ14年

この具体的な答えは、aptが常に特定のリポジトリのパッケージを優先するようにしたい人向けです。1回限りのソリューションが必要な場合は、この回答またはこれを
Braiam

8

?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

5

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.