カーネルをアップグレードすると、GRUB / GRUB2メニューにN個の最新のカーネルバージョンが自動的に含まれます。

カーネルをアップグレードすると、GRUB / GRUB2メニューにN個の最新のカーネルバージョンが自動的に含まれます。

Ubuntuで私のお気に入りの1つは、GRUBメニューを使用すると、起動時に常に最新(デフォルト)または2番目の最新(など)カーネルバージョンを選択できることです。

Arch Linuxでは、デフォルトではこれを実行できません。唯一のオプションはストックイメージと代替イメージで、両方とも最新のカーネルを起動します。 ArchでUbuntuのような動作を達成する方法は?私はGrubとGrub2を使用していますが、ブートローダをあまり設定する必要はないようです。/bootメニューの画像を自動的に含めることができます。しかし、私は間違っているかもしれません。

したがって、私が最も重要なものから最も重要なものまで私に必要なものは次のとおりです。

  1. アップグレード中に作成された新しいカーネルイメージは、mkinitcpio古いカーネルイメージを上書きしません。
  2. 最新のカーネルは、ブートローダメニューのデフォルトオプションとして表示されます。
  3. 非常に古いバージョンはメニューから除外されるか、「以前のバージョン」メニュー項目に隠されます。(あまり重要ではない)

人々は何をしますか?構成を見てみましょうか?mkinitcpioそれともpacman構成を見なければなりませんか?実際、両方の設定ファイルを見ましたが、これまではまったくわかりません。

答え1

次のエラーが表示されました。 https://bugs.archlinux.org/task/16702#comment80122

そして、このブログの投稿は次のとおりです。 http://losing Generation.homelinux.org/2009/10/16/why-arch-linuxs-kernel-upgrades-suck/

これまでに良い解決策が見つかりませんでしたが、見つかったら更新します。

grub、カーネル、initrd以外に覚えておくべきことは/usr/lib/modules/です。 Linuxパッケージが更新されると、古いパッケージは/usr/lib/modules/のフォルダを削除し、新しいカーネルは新しいモジュールを追加します。両方のコアが機能するには、両方のモジュールセットが必要です。 /usr/src/にはカーネルヘッダファイル(Nvidiaドライバなどの新しいモジュールを構築するために必要です)が含まれているため、そのファイルも保持することをお勧めします。

私が推測するステップは次のとおりです。
1. Linuxソフトウェアパッケージがまもなくアップグレードされることを検出します。
2. 削除中に削除するコンテンツをバックアップします (/usr/src/$(uname -r), /usr/lib/modules/$(uname -r), /boot/{vmlinuz-linux,initramfs-linux. img, initramfs-linux-fallback.img})
3. pacmanにアップグレードを実行させます
。 4. 2からすべてを復元します(/ bootに新しい名前を付けることもできます
。)5. grubなどを編集します。

代替手順(あまり良くない)
1. pacmanを更新するようにします。
2. カーネルが更新されたことを確認します
。 3. /var/cache/packman/pkg/linux-${previous_version}-pkg.tar から /usr/src/ を抽出します。 xz、/usr/lib/{modules、extramodules}、および/boot/vmlinuz(明らかに/bootの名前が変更されました)
4. -kオプションを指定してmkinitcpioを実行して、古いinitをビルドします。
5. grubなどを編集します。

この回避策では、サードパーティのモジュール(VM、ATI / Nvidiaなど)が失われますが、cronで実行され、発生したカーネルアップデートを自動的に検出できます。

答え2

私が覚えている限り、最新のカーネルは常に/boot/grub/grub.confファイルの最初のカーネルです。最初のエントリを自動ロードするには、grub.confの上部に次の2行を入力する必要があります。

default         0
timeout         1

グラブローダーの待機timeout時間(秒)です。defaultカーネルリストのxカーネルです。

About mkinitcpio:簡単な方法はないと思います。しかし、最後のカーネルは起動時に常に利用可能で、最新のカーネルは常にgrub.confの位置0にあると思います。

関連情報