インストールする更新を特定のリポジトリセットからの更新に制限するにはどうすればよいですか?これはまったく可能ですか?
インストールする更新を特定のリポジトリセットからの更新に制限するにはどうすればよいですか?これはまったく可能ですか?
回答:
ピン留めは、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.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
apt-getマニュアルにあるように、-tリポジトリ名ではなくリリースを指定してください。Ubuntuのリポジトリには名前がありません(たとえば、RHEL、Fedoraの、CentOSの、...などのRedHatベースのLinuxとは異なり)
-t xenial単一のパッケージで動作します。しかし、すべての依存関係は上位のパッケージから取得されます
100未満の優先度でインストールしたくないリポジトリを固定する必要があります。つまり、(apt_preferencemanページから)
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、universeUbuntuの中で。出力では、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マンページを参照してください。
優先設定ファイルをピンまたは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
ここでは、コード名の値と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マニュアルページを確認してください。
明らかな選択は、/etc/apt/sources.list他のすべてのリポジトリを変更およびコメントアウトしてから実行することです
apt-get update && apt-get upgrade && apt-get autoclean
そして、からコメントを削除しますsources.list。最善の方法ではないかもしれませんが、少なくともapt-getmanページではそれを行う方法が指定されていません。
たとえば、Ubuntuディストリビューションアップグレードプロセスでは、アップグレード中にすべてのサードパーティのリポジトリが無効になります(これらを一時的に除外するオプションを実行するだけではありません)。