特定のパッケージの更新を防ぐ方法は?


374

そのためのバグ#693758私は予防したいapt-get upgrade「libgtk2.0-0」パッケージの更新からとUpdate Managerの。

どうすればこれを達成できますか?


@hhlp:しかし、この質問はインストールされていないパッケージについて尋ねています。
ネイサンオスマン

1
@George Edison-また、パッケージを保持しないため、パッケージを更新できません。そのため、パッケージを保持するということは、基本的に、パッケージマネージャーに現在のバージョンを何に関係なく保持するよう指示することを意味します。これは、現在動作しているプログラムの最新バージョンが更新後に壊れた場合に役立ちます。彼は言っ見る-私は今ことをテストした....(あなたは私の質問は同じでも参照インストールされていないパッケージを保持することはできません)disable packages from the auto-update
hhlp

回答:


554

ホールディング

パッケージを保留するには、dpkg、apt、aptitude、またはdselectの4つの方法があります。

dpkg

パッケージを保留にします。

echo "<package-name> hold" | sudo dpkg --set-selections

保留を解除します。

echo "<package-name> install" | sudo dpkg --set-selections

パッケージのステータスを表示します。

dpkg --get-selections

単一のパッケージのステータスを表示します。

dpkg --get-selections | grep "<package-name>"

適切な

パッケージを保持する:

sudo apt-mark hold <package-name>

保留を解除します。

sudo apt-mark unhold <package-name>

保留中のすべてのパッケージを表示:

sudo apt-mark showhold

dselect

dselectを使用して、[S] elect画面に入り、現在の状態で保持したいパッケージを見つけ、=またはを押しHます。[S] elect画面を終了すると、変更はすぐに有効になります。


以下のアプローチは、aptitudeまたはsynaptic内でパッケージをロック/保持しても、apt-get / aptに影響しないという点で制限されています。

適性

パッケージを保持する:

sudo aptitude hold <package-name>

保留を解除します。

sudo aptitude unhold <package-name>

Synaptic Package Managerを使用したロック

Synaptic Package Managerに移動します(システム>管理> Synaptic Package Manager)。

検索ボタンをクリックして、パッケージ名を入力します。

パッケージが見つかったら、それを選択して[ パッケージ ]メニューに移動し、[ バージョンロック ]を選択します。

シナプスメニュー

そのパッケージは更新マネージャーに表示されなくなり、更新されなくなります。


4
これは、パッケージがインストールされるのを防ぐためにも機能します。をインストールするdevscriptsと、多くのパッケージが推奨パッケージとしてプルされます。メールサーバー(後置)は必要ないので、実行echo postfix hold | sudo dpkg --set-selectionsする前に実行してインストールを無効にすることができますsudo apt-get install devscripts。この保留アクションは、インストールが選択をリセットした後、このインストールに対してのみ持続します。
レーケンシュタイン

3
また、指摘する価値があるのは、aptが依存関係を計算できる法的解決策がない状況を作成することにより、パッケージホールドが時々アップグレードとパッチを中断することです。パッケージfooがlib =に== <または<=依存関係がある場合、aptはfooと同様にlibbarのアップグレードを拒否します。時間が経つにつれて、これらのカスケード依存関係が大きくなり、重要なセキュリティ更新を含む多数の更新がブロックされる可能性があります。保留を削除してアップグレードを行うか、これが発生した場合は、依存関係の新しいバージョンに対して保留しているパッケージを再構築する必要があります。
ステファニー

2
注:バージョン0.7.25(Ubuntu Lucid)ではapt-markサポートさholdれていません
-Joril

1
これは、グラフィックスドライバーを抑制しようとする場合に特に便利です。ATIユーザーの場合、apt-mark hold fglrx fglrx-amdcccle fglrx-dev && aptitude hold fglrx fglrx-amdcccle fglrx-dev
earthmeLon

8
現在、シナプスおよび適性は、それらのプログラム内のパッケージのみをロックします。「パッケージのアップグレードを行う他のすべて(読み取り:Update Manager、apt-get、aptitudeなど)はこれを無視します。」この質問から。
holocronweaver 14

44

パッケージ「foo」を保留にするには:

echo "foo hold" | dpkg --set-selections

あなたの場合、ワインを保留にします。

sudo -i
echo "wine hold" | dpkg --set-selections

保留を解除するには:

sudo -i
echo "wine install" | dpkg --set-selections

また、パッケージの保留中に、を使用して特定のバージョンをインストールできることに注意してくださいapt-get install wine=1.2.3。保留にするとapt-get (dist-)upgrade、変更できなくなります。
-rcoup

@rcoup保留中の古いバージョンがあり、説明したように保留を削除せずに新しいバージョンに手動でアップグレードする場合、古いバージョンはキャッシュに保持されるため、元のバージョンに戻ることができますか?
cxrodgers

1
@cxrodgersローカルキャッシュ(通常/var/cache/apt/archives)は保留やアップグレードなどに依存しないため、ダウンロードするすべてのバージョンは実行するまでそこにありますapt-get [auto]clean
-rcoup

35

私は同じものを探していましたが、多くの調査の後、次の構文を使用すると、特定のバージョンを禁止しても次の更新を許可できることがわかりました:

パッケージ:compiz-plugins-main
ピン:バージョン1:0.9.7.0〜bzr19-0ubuntu10.1
ピン優先度:-1

これは/ etc / apt / preferencesファイルに入ります。


9
これは、無期限の更新を防ぐことよりもはるかに良い方法である
エーロアールトネン

この方法では、私が思うに、チャンスは... Ubuntuの1または次のリリースのアップグレードと再インストールされているから、アマゾンのアイコンのようにUbuntuの「アドウェア」を防ぐために大きめです
ダニエル・アルダー

19

synaptic使用してインストールしsudo apt-get install synapticます。

を使用gksudo synapticして実行し、検索ボックスでロックするパッケージを見つけます。つまり:gedit

ここに画像の説明を入力してください

パッケージメニューから[ バージョンのロック ]を選択します。

ここに画像の説明を入力してください

それだけです。ロック時に現在インストールされているバージョンは、アップグレード中でもインストールされたままになります。


7
「ロックバージョンは見た目ほど賢くありません。ブリキに書かれていることを実行するはずです。バージョンをロックします。しかし、それはSynaptic内でのみロックします。 、apt-get、aptitudeなど)はこれを無視します。これはおそらくバグのある動作なので、時間内に修正されることを期待しています。」askubuntu.com/questions/9607/what-does-lock-version-doから。現在の状態は何ですか?Synapticで何かがロックされている場合、他のパッケージマネージャーはロックを「尊重」しますか?

2
vasa1:バージョン0.75.13の時点で、まだありません:(aptitudeで同じ問題があります。
syockit12年

16

パッケージがインストールされないようにすることは「パッケージの保持」と呼ばれ、非常に簡単です。

エコーpackage_nameホールド| dpkg --set-selections

...ここで* package_name *は、インストールを禁止するパッケージの名前です。

注:上記のコマンドはルート権限を前提としています。つまり、実行するsudo su前に入力する必要があるでしょう。


これが完璧な答えでした。ありがとうございました。
asoundmove

s/sudo su/sudo -s/g(またはsudo -i)。(-iログインシェルを提供しますが、し-sません)。
デロバート

6

しばらく時間apt-getがに置き換わっているaptため、たとえば、Firefoxが56を超えるバージョンに更新されないようにしたいと思います。これは、 Firefox 57 」では「タブグループ」などの多くのアドオンが機能しないためです(「WebExtensions更新")。

1つのコマンドで複数のパッケージを保持し、ワイルドカードを使用することができます。

Firefoxが更新されないようにする

sudo apt-mark hold firefox firefox-locale-*

後で保留を解除する必要がある場合は、次のコマンドになります。

sudo apt-mark unhold firefox firefox-locale-*

4

特定のパッケージのバージョンをフリーズできるシナプスです。これによりapt-getが修正されるかどうかは100%わかりませんが、アップデートマネージャーは間違いなく停止します。

パッケージをフリーズするには、シナプスでパッケージを選択し、パッケージメニューを開いてフリーズバージョンを選択します。

お役に立てれば

編集:この質問16668は同様の状況を扱っています



3

バグ#75332#158981、および#72806参照してください

要約すると、apt-get / aptitudeレベルでの保留はdpkgで保留状態をトリガーせず(特にバグ72806を参照)、update-managerはdpkgから状態を読み取ります。

回避策はルートとして実行されます: echo "package hold" | dpkg --set-selections


2

次のように、aptitudeで「特定のオーバーライド」を使用できます。

aptitude reinstall ~i oracle-java8-jre:

これは、システム内のすべてのパッケージを再インストールするために、oracle-java8-jreではなく、特定のオーバーライドを保持する(将来の再インストール用に保存されない)1回限りの使用です。

特定の保持オーバーライドを使用すると、パッケージはaptitudeがインストールを試行しない保持状態になります。

システムが何らかの方法で侵害されたと思われる場合、非常に良いことです。


1

Synapticがインストールされている場合は、パッケージを選択し、[パッケージ]-> [バージョンのロック]メニューを使用して更新されないようにすることができます。

Synapticは、sudo apt-get install synapticを使用してインストールできます。個人的には、ソフトウェアセンターよりも便利だと感じています...それでも、私はかなり古い学校です。:)


0

場合によっては、現在インストールされているすべてのパッケージを抑制したいことがあります。方法は次のとおりです。

最初に現在の状態を保存して、元に戻すことができます:

dpkg --get-selections > current_selections.txt

次に、すべてのパッケージを保留するには:

dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections

最後に、以前の状態に戻したい場合:

dpkg --set-selections < current_selections.txt

この使用例の1つは、VMまたはAmazon AMIスナップショットを作成してQAから本番環境に移行する場合です。


0

Ubuntu 16.04に関連する@ sogerのコメントに詳細を追加します。

Ubuntu 16.04には、デフォルトでは既存の/ etc / apt / preferencesファイルがありません。現在ファイルがない場合は、新しいファイルを作成し、上記の@sogerで説明されているようにスタンザを入力して、指定されたパッケージとその依存関係を更新から除外します。

その後、実行するapt updateとGTGになります。:0)

たとえば、IntelビデオカードとNVidiaカードが組み込まれたUbuntu 16.04.5 LTSサーバーがあります。NVidiaカードのみが使用されます。サーバーはCUDAドライバーも使用します。私はapt主張し続けた問題がありました

va-driver-all

(Intelドライバー)は更新が必要でしたが、インストールするバージョンを判別できませんでした。これは私を夢中にさせていたので、とにかくIntelドライバーは必要ありませんでした。このテキストを設定ファイルに入力し、aptをフラッシュして問題を解決しました。

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