LoginSignup
0
1

More than 1 year has passed since last update.

Linux Kernelをビルドしてインストールするまで

Posted at

はじめに

Linuxを扱えることはITエンジニアの教養といっても過言ではありません。
Linux上でアプリケーションの開発や実行ができるエンジニアの方でもKernelまで踏み込んで学んだことがある人は少ないのではないでしょうか。
もちろんすべてのエンジニアがKernelを学ぶ必要があるとは思いません。しかし、近年では当たり前になっているDockerやKubernetesなどのコンテナ技術を深く学ぶにはKernelまで踏み込む必要があります。
私自身、インフラエンジニアではありませんが業務でコンテナ技術を扱うことが多いため、Kernelを学ぶ第一歩としてKernelをソースコードからビルドしてインストールしてみました。

以下は、Kernelをビルドした時の覚書になります。
ミニマムスタートで進めてますので、随時内容はアップデートしていきたいと思います。

CentOSでKernelビルド

前提環境

ここではCentOS 7.9.2009を用いてLinuxのKernelをビルドをします。今回はCentOS-7-x86_64-Minimal-2009.isoイメージを使用しています。
また、CentOSはVirtualBoxで起動し、仮想マシン内からインターネット接続ができることを前提としています。

Windows環境の場合、Hyper-Vが有効になっているとVirtualBoxで正常に仮想マシンを動作できないことがあるようです。
OSをインストールできたとしてもKernelのコンパイル中にエラーとなることもあるため、Hyper-Vは無効化することをおすすめします。

CentOS7 isoイメージ

なお、CentOSにはrootユーザとしてroot、一般ユーザとしてcentosを作成しており、一般ユーザでsudoが利用できるように/etc/sudoersに以下の行を追加しています。
今回はカーネルをビルドするだけの環境なのでセキュリティは気にしません。一般ユーザはrootユーザと同じコマンドが使えるようになります。

/etc/sudoersに追記
centos    ALL=(ALL)    ALL

事前準備

まずはyum updateを実行しておきます。

$ sudo yum update -y

sshでVMに接続できるようにする場合は、sshをインストールします。

sshのインストール
$ sudo yum -y install openssh-server
sshの確認(activeが表示されているとOK)
$ systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 火 2022-09-27 20:30:40 JST; 11min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 9161 (sshd)
   CGroup: /system.slice/sshd.service
           └─9161 /usr/sbin/sshd -D

SSHするためにIPアドレスを確認したいので、ifconfigコマンドをインストールします。

ifconfigコマンドのインストール
$ sudo yum install net-tools

なお、net-toolsをインスト―スしなくても以下のコマンドでIPアドレスが確認できます。

IPアドレスの確認コマンド
$ ip addr show

ビルドツールのインストール

Kernelをビルドするためのビルドツールをインストールします。
Kernelのバージョンによって、gccのバージョンXX以上のように決まっていますので必要なバージョンをインストールします。
今回はgcc11をインストールします。

ビルドツールのインストール
$ sudo yum groupinstall 'Development Tools'
$ sudo yum install centos-release-scl
$ sudo yum install scl-utils
$ sudo yum install devtoolset-11

なお、インストールしただけではgcc11は使えるようになりません。
以下のコマンドでgcc11を使えるようにします。

gcc11の有効化
$ scl enable devtoolset-11 bash
$ gcc -v #gccバージョン確認

その他、ビルドに必要なパッケージのインストール

$ sudo yum install openssl-devel
$ sudo yum install elfutils-libelf-devel

Kernelのソースコードは以下から入手できます
※Linux KernelはそれぞれのLinuxディストリビューションで提供されているものがありますので、利用できれば

今回は5.19.11をビルドします。

image.png

ソースコードを取得してダウンロードします。
ソースコードは.tar.xzで圧縮されてますので解凍します。

ソースコードのダウンロードと解凍
$ curl -OL https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.19.11.tar.xz
$ tar Jxf linux-5.19.11.tar.xz

Kernelのビルドではまずconfgiファイルを用意する必要があります。
ここでは現在起動しているKernelのconfigをコピーして使用することtにします。

configファイルのコピー
$ cd linux-5.19.11
$ cp /boot/config-$(uname -r) .config
config設定とKernelのビルド
$ make oldconfig
$ make

make oldconfigコマンドを実行すると設定の有効/無効を聞かれますので設定します。とりあえずビルドできれば良いのであれば全てデフォルトのままで問題ありません。
なお、カーネルのビルドには時間がかかります。私の環境だとビルド完了までに2時間半ほどかかりました。

kernelインストール

kernelのビルドが完了したところで続いてはインストールを行います。
以下のコマンドによりkernelモジュールとkernelのインストールができます。

Kernelのインストール
$ sudo make modules_install
$ sudo make install

インストール完了後にOSを再起動します。
起動時の画面で先ほどインストールしたKernelが選択できるようになっています。

image.png

UbuntuでKernelビルド

追ってUbuntuでのKernelビルド手順も追加する予定です。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1