「インストール - カーネルのアッブグレード(SUSE)」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
編集の要約なし
109行目: 109行目:
<br>
<br>
再起動後、Grubブートローダにおいて、インストールしたLinuxカーネルを選択する。<br>
再起動後、Grubブートローダにおいて、インストールしたLinuxカーネルを選択する。<br>
<br>
==== セキュアブートが有効の場合 ====
===== 署名の登録 =====
pesignとnss-toolsをインストールする。<br>
pesignのインストールと同時に、/etc/pki/pesignディレクトリ、および、/etc/pki/pesign-rh-testディレクトリにデータベースがインストールされる。<br>
sudo zypper install pesign nss-tools
<br>
certificateファイルを抽出する。<br>
mkdir ~/MOK && cd ~/MOK
sudo certutil -d /etc/pki/pesign-rh-test -L -n "Red Hat Test CA" -r > rhca.cer
<br>
抽出したcertファイルを署名する。<br>
sudo mokutil --import ./rhca.cer --roow-pw
<br>
正常に署名されているかどうかを確認する。<br>
sudo mokutil --list-new
<br>
PCを再起動する。<br>
sudo systemctl reboot
<br>
カーネルへの署名を行う。<br>
この時、<code>-i</code>オプションを付加して、bzImageのパスを指定する。<br>
sudo pesign -c 'Red Hat Test Certificate' --certdir /etc/pki/pesign-rh-test -i <bzImageファイルのパス> -o vmlinuz.signed -s
<br>
署名および生成されたLinuxカーネルであるvmlinuz.signedファイル名を変更する。<br>
この時、ファイル名は任意の名前でよい。<br>
mv vmlinuz.signed vmlinuz-<カーネルのバージョン>-user-build
<br>
vmlinuzファイルを/bootディレクトリに配置する。<br>
sudo mv vmlinuz-<カーネルのバージョン>-user-build /boot
<br>
PCを再起動する。<br>
ブート画面において、生成したLinuxカーネルを選択する。<br>
sudo systemctl reboot
<br>
起動しているLinuxカーネルを確認する。<br>
uname -a
<br>
===== 署名の削除 =====
<u>署名を削除する時、そのカーネルでは起動できなくなることに注意すること。</u><br>
cd <署名ファイルがあるディレクトリ>
sudo mokutil --delete ./rhca.cer --root-pw
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:SUSE]]
[[カテゴリ:SUSE]]

2022年11月3日 (木) 01:51時点における版

概要

Tumbleweedを除いたSUSEは安定したカーネルのみを提供している。
これは、最新のカーネルよりもはるかに古いことが多い。

ここでは、SUSEにおいて、カーネルをアップグレードする方法を記載する。


依存関係のライブラリのインストール

Linuxカーネルのビルドに必要な依存関係のライブラリをインストールする。

sudo zypper install patterns-base-basesystem patterns-devel-base-devel_basis patterns-devel-C-C++-devel_C_C++ gcc gcc-g++ ncurses-devel



Zypper構成ファイルの変更

まず、/etc/zypp/zypp.confファイル(Zypper構成ファイル)を開く。

sudo vi /etc/zypp/zypp.conf


zypp.confファイルには、多くの設定項目が存在する。
このファイルにあるmultiversion.kernels項目を探して、この項目がコメントアウトされている場合は、コメントを解除する。

この設定を有効にすると、SUSEに同梱されている従来のカーネルを維持しながら、新しいカーネルも取得できるようになる。

初期設定では、multiversion.kernelsの値は、latest,latest-1,runningとなっている。
この値を、latest,latest-1,running,oldestに変更する。

# /etc/zypp/zypp.confファイル

multiversion.kernels = latest,latest-1,running,oldest



リポジトリを追加してインストール

Linuxカーネル用のリポジトリの追加

最も簡単に比較的新しいLinuxカーネルをインストールするには、カーネルリポジトリを追加してパッケージ管理システムからインストールすることである。

SUSEの標準リポジトリ(メインライン)には、比較的新しいLinuxカーネルは存在しないため、カーネルリポジトリを追加する必要がある。
カーネルリポジトリを追加するため、以下のコマンドを実行する。

sudo zypper ar -f http://download.opensuse.org/repositories/Kernel:/stable/standard Kernel:Stable  # 推奨
または
sudo zypper ar -f http://download.opensuse.org/repositories/Kernel:/HEAD/standard/ Kernel:Master


ただし、通常のzypper updateコマンドでアップグレードせずに、以下のセクションにしたがってdist-upgradeコマンドを実行することに注意する。

Linuxカーネルのアップグレード

SUSEにおいて、別途Linuxカーネルをインストールする場合、カーネルリポジトリからのみアップグレードすることにより、Linuxカーネルのみが変更される。

Linuxカーネルのアップグレードを行うため、以下のコマンドを実行する。

sudo zypper dist-upgrade -r <Kernel:Stable または Kernel:Master>


※注意
Linuxカーネルをアップグレードする場合、上記の"Zypper構成ファイル"セクションで編集したmultiversion.kernelsの設定により、古いバージョンが保持されることに注意する。

アップグレードが完了した後、Linuxを再起動する。

再起動後、Linuxカーネルが正常にアップグレードされたかどうかを確認する。

uname -a



ソースコードからインストール

Linuxカーネルのソースコードのダウンロード

The Linux Kernel Archivesまたは以下に示すURLからLinuxカーネルのTarballをダウンロードする。
https://kernel.org/pub/linux/kernel/

ダウンロードしたファイルを解凍する。

tar xf linux-<バージョン>.tar.xz
cd linux-<バージョン>


または、Gitからダウンロードする。


SUSEが提供しているLinuxカーネルのソースコードを使用する場合、SUSEのGithubからソースコードをダウンロードする。

SUSEのLinuxカーネルは、2種類存在している。

  • 開発版 (比較的新しいLinuxカーネル)
    開発版はkernel-sourceというGitリポジトリで行われており、アップストリームカーネルに対するパッチ、仕様ファイル、様々なスクリプト等が含まれている。
    git clone https://github.com/SUSE/kernel-source -b stable

  • 安定版 (現在と同一バージョンのLinuxカーネル)
    ソースコードのハック等が目的で、かつ、カーネルをパッケージ化する必要が無い場合は、安定版を使用する。
    安定版は、アップストリームのカーネルと同様のレイアウトになっている。
    git clone https://github.com/SUSE/kernel -b stable


Linuxカーネルのビルド環境の構築

Linuxカーネルのビルドディレクトリを作成する。
out-of-treeビルド(ソースコードと生成物を分離したビルド)の為のディレクトリを作成する。

mkdir build  


異なるバージョンのカーネルをビルドする場合、または、特定の機能を有効化 / 無効化する場合、現在利用しているカーネルコンフィグのコピーをそのまま使用することができない。
そのため、既存のカーネルコンフィグ(/bootディレクトリ内にあるカーネルコンフィグ)を元に、新しいカーネルコンフィグを生成する。
make olderconfigコマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。

make -j $(nproc) olddefconfig O=./build


ビルドディレクトリに移動する。

cd build


Linuxカーネルのビルドを行う場合、同時にカーネルモジュールをビルドすることが一般的であるが、使用しないカーネルモジュールのビルドに多くの時間が掛かることがある。
make localmodconfigコマンドは、現在のカーネルモジュールの設定を使用して、不要なカーネルモジュールのビルドを無効化することができる。

make -j $(nproc) localmodconfig 


Linuxカーネルの機能を個別に選択する。

make -j $(nproc) menuconfig


Linuxカーネルおよびカーネルモジュールをビルドおよびインストールする。

LOCALVERSION=<サフィックス 例. -userbuild> make -j $(nproc)

sudo make -j $(nproc) modules_install  # カーネルモジュールのインストール
sudo make -j $(nproc) install          # Linuxカーネルのインストール(GRUBのエントリも生成する)


Linuxを再起動する。

sudo shutdown -r now


再起動後、Grubブートローダにおいて、インストールしたLinuxカーネルを選択する。

セキュアブートが有効の場合

署名の登録

pesignとnss-toolsをインストールする。
pesignのインストールと同時に、/etc/pki/pesignディレクトリ、および、/etc/pki/pesign-rh-testディレクトリにデータベースがインストールされる。

sudo zypper install pesign nss-tools


certificateファイルを抽出する。

mkdir ~/MOK && cd ~/MOK
sudo certutil -d /etc/pki/pesign-rh-test -L -n "Red Hat Test CA" -r > rhca.cer


抽出したcertファイルを署名する。

sudo mokutil --import ./rhca.cer --roow-pw


正常に署名されているかどうかを確認する。

sudo mokutil --list-new


PCを再起動する。

sudo systemctl reboot


カーネルへの署名を行う。
この時、-iオプションを付加して、bzImageのパスを指定する。

sudo pesign -c 'Red Hat Test Certificate' --certdir /etc/pki/pesign-rh-test -i <bzImageファイルのパス> -o vmlinuz.signed -s


署名および生成されたLinuxカーネルであるvmlinuz.signedファイル名を変更する。
この時、ファイル名は任意の名前でよい。

mv vmlinuz.signed vmlinuz-<カーネルのバージョン>-user-build


vmlinuzファイルを/bootディレクトリに配置する。

sudo mv vmlinuz-<カーネルのバージョン>-user-build /boot


PCを再起動する。
ブート画面において、生成したLinuxカーネルを選択する。

sudo systemctl reboot


起動しているLinuxカーネルを確認する。

uname -a


署名の削除

署名を削除する時、そのカーネルでは起動できなくなることに注意すること。

cd <署名ファイルがあるディレクトリ>
sudo mokutil --delete ./rhca.cer --root-pw