📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の6版が非表示) | |||
| 4行目: | 4行目: | ||
<br> | <br> | ||
ここでは、SUSEにおいて、カーネルをアップグレードする方法を記載する。<br> | ここでは、SUSEにおいて、カーネルをアップグレードする方法を記載する。<br> | ||
<br><br> | <br><br> | ||
| 55行目: | 50行目: | ||
== ソースコードからインストール == | == ソースコードからインストール == | ||
==== 依存関係のライブラリのインストール ==== | |||
Linuxカーネルのビルドに必要な依存関係のライブラリをインストールする。<br> | |||
sudo zypper install bc bison flex patterns-base-basesystem patterns-devel-base-devel_basis patterns-devel-C-C++-devel_C_C++ \ | |||
gcc ncurses-devel ncurses5-devel libopenssl-1_1-devel libelf-devel dwarves | |||
<br> | |||
==== Linuxカーネルのソースコードのダウンロード ==== | ==== Linuxカーネルのソースコードのダウンロード ==== | ||
[https://www.kernel.org/ The Linux Kernel Archives]または以下に示すURLからLinuxカーネルのTarballをダウンロードする。<br> | [https://www.kernel.org/ The Linux Kernel Archives]または以下に示すURLからLinuxカーネルのTarballをダウンロードする。<br> | ||
| 88行目: | 88行目: | ||
<code>make olderconfig</code>コマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。<br> | <code>make olderconfig</code>コマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。<br> | ||
make -j $(nproc) olddefconfig O=./build | make -j $(nproc) olddefconfig O=./build | ||
<br> | |||
以下に示すような警告が出力される場合がある。<br> | |||
不要ならば、.configファイルから該当する設定をコメントアウトする。<br> | |||
.config:9850:warning: symbol value 'm' invalid for CRYPTO_BLAKE2S_X86 | |||
.config:9941:warning: symbol value 'm' invalid for CRYPTO_ARCH_HAVE_LIB_BLAKE2S | |||
.config:9942:warning: symbol value 'm' invalid for CRYPTO_LIB_BLAKE2S_GENERIC | |||
<br> | <br> | ||
ビルドディレクトリに移動する。<br> | ビルドディレクトリに移動する。<br> | ||
| 103行目: | 109行目: | ||
sudo make -j $(nproc) modules_install # カーネルモジュールのインストール | sudo make -j $(nproc) modules_install # カーネルモジュールのインストール | ||
sudo make -j $(nproc) install # Linuxカーネルのインストール( | sudo make -j $(nproc) install # Linuxカーネルのインストール(GRUB2のエントリも生成する) | ||
<br> | |||
初期化スクリプトを生成する。<br> | |||
sudo mkinitrd | |||
<br> | |||
==== GRUB2ブートメニューの設定 ==== | |||
GRUB2を使用している場合、かつ、GRUB2スクリプトが新しいカーネルを自動検出できない場合、手動で/etc/grub.d/40_customファイルに関連情報を追加することができる。<br> | |||
なお、UUID名またはPARTUUID名は、<code>sudo blkid</code>コマンドを使用することにより、確認することができる。<br> | |||
sudo vi /etc/grub.d/40_custom | |||
<br> | |||
# /etc/grub.d/40_customファイル | |||
menuentry '<任意のLinuxカーネル名 例. kernel x.y.z>' { | |||
echo '<Linuxカーネルの読み込み時のメッセージ>' | |||
linux <vmlinuzファイルのパス> root=UUID=<ルートパーティションがあるUUIDまたはPARTUUID> <Linuxカーネルのパラメータ> | |||
echo '<初期化スクリプト(initrd)の読み込み時のメッセージ>' | |||
initrd <initrdファイルのパス> | |||
} | |||
# 例 | |||
menuentry 'kernel x.y.z' { | |||
echo 'Loading Linux x.y.z ...' | |||
linux /boot/vmlinuz root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ${extra_cmdline} splash=vervose resume=/dev/disk/by-uuid/<SWAPパーティションのUUID> preempt=full security=apparmor mitigations=auto | |||
echo 'Loading initial ramdisk ...' | |||
initrd /boot/initrd | |||
} | |||
<br> | |||
GRUB2の変更を有効にするため、GRUB2を更新する必要がある。<br> | |||
sudo grub2-mkconfig -o /boot/grub2/grub.cfg | |||
<br> | <br> | ||
Linuxを再起動する。<br> | Linuxを再起動する。<br> | ||
| 110行目: | 144行目: | ||
再起動後、Grubブートローダにおいて、インストールしたLinuxカーネルを選択する。<br> | 再起動後、Grubブートローダにおいて、インストールしたLinuxカーネルを選択する。<br> | ||
<br> | <br> | ||
==== セキュアブートが有効の場合 ==== | ==== セキュアブートが有効の場合 ==== | ||
===== 署名の登録 ===== | ===== 署名の登録 ===== | ||
pesignとnss-toolsをインストールする。<br> | pesignとnss-toolsをインストールする。<br> | ||
pesignのインストールと同時に、/etc/pki/pesignディレクトリ、および、/etc/pki/pesign-rh-testディレクトリにデータベースがインストールされる。<br> | pesignのインストールと同時に、/etc/pki/pesignディレクトリ、および、/etc/pki/pesign-rh-testディレクトリにデータベースがインストールされる。<br> | ||
sudo zypper install pesign nss-tools | sudo zypper install pesign mozilla-nss-tools | ||
<br> | <br> | ||
certificateファイルを抽出する。<br> | certificateファイルを抽出する。<br> | ||
| 205行目: | 240行目: | ||
GRUB2を更新する。<br> | GRUB2を更新する。<br> | ||
sudo grub2-mkconfig -o /boot/grub2/grub.cfg | sudo grub2-mkconfig -o /boot/grub2/grub.cfg | ||
<br><br> | |||
== vmlinuzファイルの展開と逆アセンブル == | |||
==== vmlinuzとは ==== | |||
vmlinuzは、システムを起動して、カーネルをメモリにロードすることができる圧縮されたLinuxカーネルのイメージである。<br> | |||
また、vmlinuxは静的にリンクされた実行ファイルであり、カーネルはELF、COFF、a.out等のオブジェクトファイル形式をサポートしている。<br> | |||
<br> | |||
vmlinuzとvmlinuxは似た名前であるが、vmlinuxはvmlinuzの圧縮されていないブート不可能なバージョンのことである。<br> | |||
(vmlinuz : Virtual Memory Linuz linuzはLinuxの圧縮版の意味)<br> | |||
<br> | |||
アセンブリコードの問題の特定、または、特定の関数がどのように実行されているかをデバッグする場合、vmlinuzを抽出する。<br> | |||
<br> | |||
==== vmlinuzファイルの展開 ==== | |||
現在使用しているvmlinuzファイルの種類を確認する。<br> | |||
file /boot/vmlinuz-$(uname -r) | |||
# 出力例 | |||
vmlinuz-5.14.21-150400.24.28-default: Linux/x86 Kernel, Setup Version 0x20f, bzImage, Version 5.14.21-150400.24.28-default (geeko@buildhost) | |||
#1 SMP PREEMPT_DYNAMIC Mon Oct 10 15:21:12 UTC 2, RO-rootFS, swap_dev 0xA, Normal VGA | |||
<br> | |||
Linuxカーネルのイメージから圧縮されていないカーネルを抽出するため、extract-vmlinuxスクリプトをダウンロードする。<br> | |||
wget -O extract-vmlinux https://raw.githubusercontent.com/torvalds/linux/master/scripts/extract-vmlinux | |||
chmod u+x extract-vmlinux | |||
<br> | |||
Linuxカーネルのイメージから圧縮されていないカーネルを抽出する。<br> | |||
./extract-vmlinux /boot/vmlinuz-$(uname -r) > vmlinuz | |||
<br> | |||
展開したvmlinuzファイルの種類が、ELFオブジェクトかどうかを確認する。<br> | |||
file vmlinuz | |||
# 出力例 | |||
vmlinuz: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=915f2e0498b5123d9c51edb9ffca1b68d958fb7f, stripped | |||
<br> | |||
<code>objdump</code>コマンドを使用して、vmlinuzを逆アセンブルすることができる。<br> | |||
objdump -D vmlinuz | less | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:SUSE]] | [[カテゴリ:SUSE]] | ||