インストールする更新を特定のリポジトリセットからの更新に制限するにはどうすればよいですか?これはまったく可能ですか?
インストールする更新を特定のリポジトリセットからの更新に制限するにはどうすればよいですか?これはまったく可能ですか?
回答:
ピン留めは、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を参照してください。
apt-cache policy package-name
release n=repo
意志キャッシュされていない人物
-t
オプションでリリースを指定できます。例として、/etc/apt/sources.list
Iceweaselの最新リリースをインストールするために、次のリポジトリを追加しました。
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
apt-get
マニュアルにあるように、-t
リポジトリ名ではなくリリースを指定してください。Ubuntuのリポジトリには名前がありません(たとえば、RHEL、Fedoraの、CentOSの、...などのRedHatベースのLinuxとは異なり)
-t xenial
単一のパッケージで動作します。しかし、すべての依存関係は上位のパッケージから取得されます
100未満の優先度でインストールしたくないリポジトリを固定する必要があります。つまり、(apt_preference
manページから)
100 <= P <500
は、他のディストリビューションに属する利用可能なバージョンがないか、インストールされたバージョンがより新しい場合を除いて、バージョンをインストールします
また、ピン留めするリポジトリを選択するには、リポジトリのRelease
ファイルのフィールドを使用します。以下のようなarchive
、label
、release
、version
など、これらのフィールドの値を指定することで、正確にリポジトリを選択することができますし、それにお好みの優先順位を割り当てます。詳細については、apt_preferenceページを確認してください。
先に進む前に、ピン留めに関するいくつかの重要なことを知る必要があります。それらが含まれます
Release
ファイルのフィールドとapt-cache policy
出力へのマッピング
aptプリファレンスファイルの形式
Release
ファイルフィールドを使用して優先度を設定する
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-updates
、release-security
例えば、などxenial-updates
、xenial-security
。それは次のように出力に示されていますa=xenial
、a=xenial-security
。PPAはこのためにリリース名のみを使用しているため、ピニングではあまり役に立ちません。
コンポーネントはライセンスに関することを伝えます。それはだmain
、multiverse
、restricted
、universe
Ubuntuの中で。出力では、c=main
またはc=restricted
などと表示されます。ほとんどのPPA main
はこのフィールドに使用するため、ピン留めにもあまり役立ちません。
アーキテクチャとは、OSアーキテクチャに関するものです。出力としてb=i386
またはb=amd64
出力に表示
Codenameは、ディストリビューションのリリース名です。16.04の場合はxenial
です。14.04の場合はtrusty
です。またはapt-cache policy
として出力に表示されます。通常、単一のディストリビューションのすべてのリポジトリで同じです。そのため、ピン留めにはあまり役立ちません。n=xenial
n=trusty
apt-cache policy
出力のその他の行origin
は、リポジトリのインターネット起源を示します。ピン留めにも使用できます。ただし、Release
ファイルOrigin
フィールドと混在させないでください。それらは異なります。
これらの値を使用して、リポジトリを固定します。
では、ピニング1を使用してリポジトリを制限する方法を教えてください。
ピン留めを制御する方法はいくつかありますが、Ubuntuには小さなサブセットのみが有効です。ただし、詳細な説明は回答の範囲を超えています。これについてはapt_preference
マンページを参照してください。
優先設定ファイルをピンまたは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:
その値は数値です。上記の対象アイテムの優先度を示します。
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
リリースファイルで同じ値を使用するためです。正しくピン留めするには、ピンファイルのフィールドをさらに組み合わせる必要があります。
リポジトリからパッケージを固定するには、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
ここでは、コード名の値とOrigin
PPAの値を使用しています。(ただし、実際にはコード名の値は必要ありません)。リポジトリはこれらの値を見逃すことがあります。そのような場合、他のいくつかの手法を使用する必要があります。の出力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
マニュアルページを確認してください。
明らかな選択は、/etc/apt/sources.list
他のすべてのリポジトリを変更およびコメントアウトしてから実行することです
apt-get update && apt-get upgrade && apt-get autoclean
そして、からコメントを削除しますsources.list
。最善の方法ではないかもしれませんが、少なくともapt-get
manページではそれを行う方法が指定されていません。
たとえば、Ubuntuディストリビューションアップグレードプロセスでは、アップグレード中にすべてのサードパーティのリポジトリが無効になります(これらを一時的に除外するオプションを実行するだけではありません)。