MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
インストール - カーネルのアッブグレード(SUSE)のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
インストール - カーネルのアッブグレード(SUSE)
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Tumbleweedを除いたSUSEは安定したカーネルのみを提供している。<br> これは、最新のカーネルよりもはるかに古いことが多い。<br> <br> ここでは、SUSEにおいて、カーネルをアップグレードする方法を記載する。<br> <br><br> == Zypper構成ファイルの変更 == まず、/etc/zypp/zypp.confファイル(Zypper構成ファイル)を開く。<br> sudo vi /etc/zypp/zypp.conf <br> zypp.confファイルには、多くの設定項目が存在する。<br> このファイルにある<code>multiversion.kernels</code>項目を探して、この項目がコメントアウトされている場合は、コメントを解除する。<br> <br> この設定を有効にすると、SUSEに同梱されている従来のカーネルを維持しながら、新しいカーネルも取得できるようになる。<br> <br> 初期設定では、<code>multiversion.kernels</code>の値は、<code>latest,latest-1,running</code>となっている。<br> この値を、<code>latest,latest-1,running,oldest</code>に変更する。<br> # /etc/zypp/zypp.confファイル multiversion.kernels = latest,latest-1,running,oldest <br><br> == リポジトリを追加してインストール == ==== Linuxカーネル用のリポジトリの追加 ==== 最も簡単に比較的新しいLinuxカーネルをインストールするには、カーネルリポジトリを追加してパッケージ管理システムからインストールすることである。<br> <br> SUSEの標準リポジトリ(メインライン)には、比較的新しいLinuxカーネルは存在しないため、カーネルリポジトリを追加する必要がある。<br> カーネルリポジトリを追加するため、以下のコマンドを実行する。<br> 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 <br> <u>ただし、通常の<code>zypper update</code>コマンドでアップグレードせずに、以下のセクションにしたがって<code>dist-upgrade</code>コマンドを実行することに注意する。</u><br> <br> ==== Linuxカーネルのアップグレード ==== SUSEにおいて、別途Linuxカーネルをインストールする場合、<u>カーネルリポジトリからのみアップグレードすることにより</u>、Linuxカーネルのみが変更される。<br> <br> Linuxカーネルのアップグレードを行うため、以下のコマンドを実行する。<br> sudo zypper dist-upgrade -r <Kernel:Stable または Kernel:Master> <br> <u>※注意</u><br> <u>Linuxカーネルをアップグレードする場合、上記の"Zypper構成ファイル"セクションで編集した<code>multiversion.kernels</code>の設定により、古いバージョンが保持されることに注意する。</u><br> <br> アップグレードが完了した後、Linuxを再起動する。<br> <br> 再起動後、Linuxカーネルが正常にアップグレードされたかどうかを確認する。<br> uname -a <br><br> == ソースコードからインストール == ==== 依存関係のライブラリのインストール ==== 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カーネルのソースコードのダウンロード ==== [https://www.kernel.org/ The Linux Kernel Archives]または以下に示すURLからLinuxカーネルのTarballをダウンロードする。<br> https://kernel.org/pub/linux/kernel/<br> <br> ダウンロードしたファイルを解凍する。<br> tar xf linux-<バージョン>.tar.xz cd linux-<バージョン> <br> または、Gitからダウンロードする。<br> * https://git.kernel.org * https://github.com/torvalds/linux <br> SUSEが提供しているLinuxカーネルのソースコードを使用する場合、SUSEのGithubからソースコードをダウンロードする。<br> <br> SUSEのLinuxカーネルは、2種類存在している。<br> * 開発版 (比較的新しいLinuxカーネル) *: 開発版はkernel-sourceというGitリポジトリで行われており、アップストリームカーネルに対するパッチ、仕様ファイル、様々なスクリプト等が含まれている。 *: <code>git clone https://github.com/SUSE/kernel-source -b stable</code> *: <br> * 安定版 (現在と同一バージョンのLinuxカーネル) *: ソースコードのハック等が目的で、かつ、カーネルをパッケージ化する必要が無い場合は、安定版を使用する。 *: 安定版は、アップストリームのカーネルと同様のレイアウトになっている。 *: <code>git clone https://github.com/SUSE/kernel -b stable</code> <br> ==== Linuxカーネルのビルド環境の構築 ==== Linuxカーネルのビルドディレクトリを作成する。<br> out-of-treeビルド(ソースコードと生成物を分離したビルド)の為のディレクトリを作成する。<br> mkdir build <br> 異なるバージョンのカーネルをビルドする場合、または、特定の機能を有効化 / 無効化する場合、現在利用しているカーネルコンフィグのコピーをそのまま使用することができない。<br> そのため、既存のカーネルコンフィグ(/bootディレクトリ内にあるカーネルコンフィグ)を元に、新しいカーネルコンフィグを生成する。<br> <code>make olderconfig</code>コマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。<br> make -j $(nproc) olddefconfig O=./build <br> 以下に示すような警告が出力される場合がある。<br> これは、MCTPの開発者が/net/mctp/Kconfigをtristate型からbool型に変更したからである。<br> Linuxカーネル 5.15以降、configファイルがCONFIG_MCTP=mに設定されたままになっている。<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> cd build <br> Linuxカーネルのビルドを行う場合、同時にカーネルモジュールをビルドすることが一般的であるが、使用しないカーネルモジュールのビルドに多くの時間が掛かることがある。<br> <code>make localmodconfig</code>コマンドは、現在のカーネルモジュールの設定を使用して、不要なカーネルモジュールのビルドを無効化することができる。<br> make -j $(nproc) localmodconfig <br> Linuxカーネルの機能を個別に選択する。<br> make -j $(nproc) menuconfig <br> Linuxカーネルおよびカーネルモジュールをビルドおよびインストールする。<br> LOCALVERSION=<サフィックス 例. -userbuild> make -j $(nproc) sudo make -j $(nproc) modules_install # カーネルモジュールのインストール sudo make -j $(nproc) install # Linuxカーネルのインストール(GRUB2のエントリも生成する) <br> 初期化スクリプトを生成する。<br> sudo mkinitrd <br> Linuxを再起動する。<br> sudo shutdown -r now <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>オプションを付加して、vmlinuz(bzImageイメージ)のパスを指定する。<br> sudo pesign -c 'Red Hat Test Certificate' --certdir /etc/pki/pesign-rh-test \ -i <vmlinuz(bzImageファイル)のパス 例. /boot/vmlinuz-x.xx.xx> \ -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> == GRUBの設定 == Linuxのブート画面において、デフォルトで読み込まれるLinuxカーネルを変更する。<br> <br> SUSEがLinxuカーネルのマルチバージョンに対応しているかどうかを確認する。<br> sudo vi /etc/zypp/zypp.conf <br> # /etc/zypp/zypp.confファイル multiversion = provides:multiversion(kernel) <br> GRUB2のサブメニューの変数<code>$menuentry_id_option</code>を検索する。<br> sudo grep submenu /boot/grub2/grub.cfg # 出力例 submenu 'Advanced options for SUSE Linux Enterprise 15 SP4' --hotkey=1 $menuentry_id_option 'gnulinux-advanced-xxx' { <br> 使用するLinuxカーネルのメニューエントリの変数<code>$menuentry_id_option</code>を検索する。<br> sudo awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub2/grub.cfg # 出力例 0****menuentry 'SUSE Linux Enterprise 15 SP4' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b9406985-a289-4710-be6b-c74f2c200075' { 1**** menuentry 'SUSE Linux Enterprise 15 SP4, with Linux 5.14.21-150400.24.28-default' --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.14.21-50400.24.28-default-advanced-xxx' { 2**** menuentry 'SUSE Linux Enterprise 15 SP4, with Linux 5.14.21-150400.24.28-default (recovery mode)' --hotkey=3 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.14.21-150400.24.28-default-recovery-yyy' { 3**** menuentry 'SUSE Linux Enterprise 15 SP4, with Linux 5.14.21-150400.24.21-default' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.14.21-150400.24.21-default-advanced-zzz' { 4**** menuentry 'SUSE Linux Enterprise 15 SP4, with Linux 5.14.21-150400.24.21-default (recovery mode)' --hotkey=1 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.14.21-150400.24.21-default-recovery-aaa' { <br> /etc/default/grubファイルにある<code>GRUB_DEFAULT</code>をコメントアウトして、<br> 上記で表示したサブメニューの変数<code>$menuentry_id_option</code>とLinuxカーネルのメニューエントリ変数<code>$menuentry_id_option</code>に、<code>></code>で区切って置き換える。<br> sudo vi /etc/default/grub <br> # /etc/default/grubファイル #GRUB_DEFAULT=saved GRUB_DEFAULT="<サブメニュー変数$menuentry_id_optionの値 例. gnulinux-xxx>><メニューエントリ変数$menuentry_id_optionの値 例. gnulinux-<バージョン>.xxx-yyy>" <br> GRUB2を更新する。<br> sudo grub2-mkconfig -o /boot/grub2/grub.cfg <br> 元のLinuxカーネルに戻す場合、/etc/default/grubファイルにある<code>GRUB_DEFAULT</code>の設定を戻す。<br> sudo vi /etc/default/grub # /etc/default/grubファイル GRUB_DEFAULT=saved #GRUB_DEFAULT="<サブメニュー変数$menuentry_id_optionの値 例. gnulinux-xxx>><メニューエントリ変数$menuentry_id_optionの値 例. gnulinux-<バージョン>.xxx-yyy>" <br> GRUB2を更新する。<br> 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> __FORCETOC__ [[カテゴリ:SUSE]]
インストール - カーネルのアッブグレード(SUSE)
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse