web-dev-qa-db-ja.com

カーネルの更新をスキップする方法は?

VirtulBoxでUbuntu 12.04.1 LTS i686を実行しています。更新を確認するたびに、新しいLinuxカーネルがあります。新しいカーネルをインストールする場合、Virtulbox Guest Additionsを再度インストールし、サーバーを再起動する必要があります。毎週これをやりたくありません。アップデートマネージャからカーネルパッケージを手動でチェック解除できることは知っていますが、カーネルアップデートを自動的にスキップする方法はありますか?ここで答えを見つけましたが、それはUbuntu 10用です。ありがとう。

25
garconcn

APT(Advanced Packaging Tool)は、システムにインストールされているすべてのソフトウェアを管理するためにUbuntuが使用するシステムです。パッケージを特定のバージョンに「固定」して、Update Managerを実行しても更新されないようにすることができます。

カーネルパッケージを固定するには、まずカーネルのバージョンを確認する必要があります。これを行う1つの方法は、システム>管理でSynaptic Package Managerを開くことです。

enter image description here

クイック検索テキストフィールドに「linux-generic」と入力し、Enterキーを押します。

enter image description here

「インストール済みバージョン」列にリストされている番号を書き留めます。次のステップで使用します。

次に、ファイル/ etc/apt/preferencesを編集する必要があります。 Alt + F2を押して[アプリケーションの実行]ウィンドウを開き、次を入力して開きます。

gksudo gedit /etc/apt/preferences

enter image description here

これにより、geditウィンドウが開きます。ほとんどの場合、以前にAPTで遊んだことがない限り、ウィンドウは空白になります。

ウィンドウに次のように入力し、バージョン番号をSynaptic Package Managerで見つけたバージョン番号に置き換えます。

Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic
Pin: version <insert version here>
Pin-Priority: 1001

enter image description here

ファイルを保存して、geditを閉じます。 Update Managerを開くと、Linuxカーネルの更新が非表示になっていることがわかります。

enter image description here

ソース

APT/DPKGを使用したパッケージのブロック

上記のカーネルのパッケージ名を覚えておいてください。

ターミナルを開いて実行します:

Sudo -s

そしてヒット enter

Sudoのパスワードを入力します。

echo kernel_package_name hold | dpkg --set-selections

kernel_package_nameを、ピン留めするカーネルの名前に置き換えます。

今実行してください:

Sudo apt-get update && Sudo apt-get upgrade

Apt/Dpkgからピンを削除するには:

ターミナルを開く

Sudo -s
echo kernel_package install | dpkg --set-selections

Kernel_packageを固定するパッケージに置き換えます。

今実行してください:

Sudo apt-get update &&  Sudo apt-get upgrade

ソース

あなたがしようとしていることは、ピン止めと呼ばれています。上記で提供したソースには、手元のタスクを達成するために何をする必要があるかについての基本事項があります。

18
LnxSlck

1行では次のとおりです。

echo $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}') hold | dpkg --set-selections

これにより、カーネルのイメージ状態がinstallからholdに設定され、更新ができなくなります。

16
Christoph

クリストフのワンライナーは、追加のパッケージを考慮していません(例:linux-image-extra-3.13.0-45-generic)。むしろこれを使用してください:

for i in $(dpkg -l "* $(uname -r)*" | grep image | awk '{print $ 2}');エコー$ iホールドする| dpkg --set-selections;やった
8
Superlexx

関連してsuperlexxの提案:その行は「headers」パッケージを見逃します:

dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic

では、次を単純に使用してみてください。

dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'
linux-headers-3.13.0-48-generic
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic
4
cloudeliver

これにより、カーネルの更新を可能にするメタカーネルパッケージが削除されます。

Sudo apt purge $(apt-cache rdepends -i --installed linux-{headers,image}-$(uname -r)|awk '!/[0-9]/ && /^[ ]/{print $1}')

(カーネルをアップグレードしたばかりの場合は、最初に新しいカーネルでリブートするか、最新のカーネルリリースを見つけて「$(uname -r)」の代わりに上記で使用する必要があります。)

ただし、カーネルの更新は主にセキュリティ更新であるため、インストールすることをお勧めします。

1
jarno

短いバージョン:(ピンを削除するには、「ホールド」を「インストール」に置き換えます)

 dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2,"hold"}' | Sudo dpkg --set-selections

すべてのカーネルイメージとヘッダーの状態を確認するには、次を実行します。

 dpkg --get-selections | grep "linux-"

Ubuntu 16.04.1では、次のコードが機能します

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i hold | Sudo dpkg --set-selections; done

これはSuperlexxのコードの改良であり、Sudoが追加されます

dpkg -l | grep linux-image

見つけるだろう:

hi linux-image-4.4.0-34-generic ...

hi linux-image-extra-4.4.0-34-generic ...

タグはhiではなくiiを読み取ることに注意してください

ピンを取り外す

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i install | Sudo dpkg --set-selections; done
0
Chen Deng-Ta