特定のリポジトリからのみアップデートをインストールする方法は?


39

インストールする更新を特定のリポジトリセットからの更新に制限するにはどうすればよいですか?これはまったく可能ですか?


実行時にレポを指定できるようにしたいですか、それとももっと静的なものにする必要がありますか?以下の2つの 回答は、後者のオプションを想定しています。
シェパン

理想的には、実行中です。ただし、静的オプションで十分です。
トンヴァンデンヒューベル

2
あなたの見出しとあなたが要求している実際の助けは異なります。
スンダ

回答:


29

ピン留めを使用する

ピン留めは、Ubuntu(またはその他のdebianシステム)の安定したリリースを維持しながら、より新しいバージョンからパッケージを取得するプロセスです。— help.ubuntu.com

aptポリシーを使用して完全に削除せずに、特定のリポジトリからの自動更新を無効にできます。

リポジトリからの自動更新を無効にするには、次の内容のrepoファイル
/etc/apt/preferences.d/repoを追加します。

Package: *
Pin: release n=repo
Pin-Priority: 50

これにより、このリポジトリのすべてのパッケージに、既にインストールされているパッケージ(100個)よりも低い優先度が与えられます。

詳細についてman apt_preferencesは、Ubuntu Community Wikiを参照してください


3
それは残念ですapt_preferencesの唯一の答えは最後です...-
ロバート

どのバージョンがどのレポからのものであるかを知る方法は?
マックスN

2
あなたは、通常、実行して、その情報を見つけるだろう@MaxNapt-cache policy package-name
アンワルを

これにより、更新中にリポジトリが考慮されないことを強制しません。なぜならrelease n=repo意志キャッシュされていない人物
アンワル

35

-tオプションでリリースを指定できます。例として、/etc/apt/sources.listIceweaselの最新リリースをインストールするために、次のリポジトリを追加しました。

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

ご存知のようiceweaselに、公式のDebianリポジトリにも同じパッケージがあります。この特定のリリースから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が言及したように、リポジトリ名ではなくリリースを指定します。Ubuntuにはリポジトリ名はありません(RHEL、Fedora、CentOSなどのRedHatベースのLinuxとは異なります)」。-t


4
apt-getマニュアルにあるように、-tリポジトリ名ではなくリリースを指定してください。Ubuntuのリポジトリには名前がありません(たとえば、RHEL、Fedoraの、CentOSの、...などのRedHatベースのLinuxとは異なり)
SUB

1
@SuBはい、そうです!リポジトリ名とリリースを混同しました!
漫画家

-t xenial単一のパッケージで動作します。しかし、すべての依存関係は上位のパッケージから取得されます
Anwar

11

短い答え

100未満の優先度でインストールしたくないリポジトリを固定する必要があります。つまり、(apt_preferencemanページから)

100 <= P <500
は、他のディストリビューションに属する利用可能なバージョンがないか、インストールされたバージョンがより新しい場合を除いて、バージョンをインストールします

また、ピン留めするリポジトリを選択するには、リポジトリのReleaseファイルのフィールドを使用します。以下のようなarchivelabelreleaseversionなど、これらのフィールドの値を指定することで、正確にリポジトリを選択することができますし、それにお好みの優先順位を割り当てます。詳細については、apt_preferenceページを確認してください。


ロングアンサー

先に進む前に、ピン留めに関するいくつかの重要なことを知る必要があります。それらが含まれます

  1. Releaseファイルのフィールドとapt-cache policy出力へのマッピング

  2. aptプリファレンスファイルの形式

  3. Releaseファイルフィールドを使用して優先度を設定する

1. Releaseファイルとapt-cache policy出力のフィールド

Debian Wikiの記事から

  • 説明
  • ラベル
  • 原点
  • バージョン
  • スイート
  • コード名
  • 構成部品
  • アーキテクチャ

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リポジトリにはUbuntu価値があります。o=出力のように表示されます

  • バージョンは、ディストリビューションのバージョンです。Xenialの場合は16.04です。v=出力のように表示されます

  • スイートArchiveと同じです。debian wikiからは、このディレクトリ内のパッケージが属している(または設計されている)Debianのディストリビューションの名前、つまり、安定、テスト、または不安定です。。Ubuntuのために、これらはrelease-updatesrelease-security例えば、などxenial-updatesxenial-security。それは次のように出力に示されていますa=xeniala=xenial-security。PPAはこのためにリリース名のみを使用しているため、ピニングではあまり役に立ちません。

  • コンポーネントはライセンスに関することを伝えます。それはだmainmultiverserestricteduniverseUbuntuの中で。出力では、c=mainまたはc=restrictedなどと表示されます。ほとんどのPPA mainはこのフィールドに使用するため、ピン留めにもあまり役立ちません。

  • アーキテクチャとは、OSアーキテクチャに関するものです。出力としてb=i386またはb=amd64出力に表示

  • Codenameは、ディストリビューションのリリース名です。16.04の場合はxenialです。14.04の場合はtrustyです。またはapt-cache policyとして出力に表示されます。通常、単一のディストリビューションのすべてのリポジトリで同じです。そのため、ピン留めにはあまり役立ちません。n=xenialn=trusty

apt-cache policy出力のその他の行originは、リポジトリのインターネット起源を示します。ピン留めにも使用できます。ただし、ReleaseファイルOriginフィールドと混在させないでください。それらは異なります。

これらの値を使用して、リポジトリを固定します。

では、ピニング1を使用してリポジトリを制限する方法を教えてください。

ピン留めを制御する方法はいくつかありますが、Ubuntuには小さなサブセットのみが有効です。ただし、詳細な説明は回答の範囲を超えています。これについてはapt_preferenceマンページを参照してください。

2.ピンファイル形式

優先設定ファイルをピンまたはapt /etc/apt/preferences.dフォルダーに保存します。各ピニングには3行が含まれています。

  • 最初の行はで始まり、Package:その後にコンマ区切りのパッケージ名が続きます。正規表現とグロブが許可されます

  • 2行目はPin:、パッケージのセットを対象とするために使用されます。

    よりxenial高いパッケージを固定する場合はxenial-updates、を使用しますrelease a=xenial

    バージョン5.0を固定する場合は、version 5.0ここで使用します。グローブパターンを使用できます。

    または、パッケージをオリジンから固定する場合はhttp://archive.ubuntu.com、を使用しますorigin "archive.ubuntu.com"。注意してください、私たちはhttp://そこにプロトコルを書きません。

  • 3行目はで始まり、Pin-Priority:その値は数値です。上記の対象アイテムの優先度を示します。

3. 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それらのパッケージにも適用されます。たとえば(PPAを有効にした後)、

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公式のUbuntuリポジトリのアーカイブとPPAの両方のパッケージの優先順位は同じです。1001これは、どちらもArchiveリリースファイルで同じ値を使用するためです。正しくピン留めするには、ピンファイルのフィールドをさらに組み合わせる必要があります。


いくつかの例

PPAリポジトリを固定する

リポジトリからパッケージを固定するには、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

ここでは、コード名の値とOriginPPAの値を使用しています。(ただし、実際にはコード名の値は必要ありません)。リポジトリはこれらの値を見逃すことがあります。そのような場合、他のいくつかの手法を使用する必要があります。の出力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マニュアルページを確認してください。


7

GUIベースの代替方法は、ソフトウェアセンターを開き、[編集]> [ソフトウェアソース...]を選択することです。

Ubuntuソフトウェアタブが選択されたソフトウェアソース

他のソフトウェアタブが選択されたソフトウェアソース

あなたがする必要があるのは、更新したくないリポジトリのチェックを外すことだけです。

お役に立てれば


5

明らかな選択は、/etc/apt/sources.list他のすべてのリポジトリを変更およびコメントアウトしてから実行することです

apt-get update && apt-get upgrade && apt-get autoclean

そして、からコメントを削除しますsources.list。最善の方法ではないかもしれませんが、少なくともapt-getmanページではそれを行う方法が指定されていません。

たとえば、Ubuntuディストリビューションアップグレードプロセスでは、アップグレード中にすべてのサードパーティのリポジトリが無効になります(これらを一時的に除外するオプションを実行するだけではありません)。


1

もう1つのGUIオプションは、Synapticパッケージマネージャーでオリジンを選択することです。

  1. インストールするパッケージ名を検索します
  2. Originボタンをクリックします
  3. インストール元のリポジトリを選択します
  4. パッケージを選択してください
  5. 適用する
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.