LinuC レベル2
技術解説 オンラインセミナー〜受験に向けての準備とポイント解説〜

2020/10/04（Sun） 13:00-14:00
LPI-Japanプラチナスポンサー 株式会社ゼウス・エンタープライズ
鯨井 貴博（LinuCエバンジェリスト）© LPI-Japan / EDUCO all rights reserved.

Who are you?（講師紹介）
鯨井貴博

LPI-Japan プラチナスポンサー
LinuCエバンジェリスト

株式会社ゼウス・エンタープライズ

⼤学時代 Unixの存在を知り、⽇経Linuxを読み始める。
2000年にVine Linux 2.0で⼀度挫折を経験。
その悔しさを忘れきれず、2007年 他業種からIT業界に転職しLinuxに再チャレンジ。
SE・商⽤製品サポート・インストラクター・プロジェクト管理などを経験し、現在に⾄る。
⾃分⾃⾝が学習で苦労した経験から、初⼼者を含む受講者に分りやすい講義を⾏うように⼼がけている。
また、興味の向くIT技術・オープンソースソフトウェアなどについて、Opensourcetehブログ（https://www.opensourcetech.tokyo/）で執筆中。
実際に⾃分でやってみる/使ってみる・開発者本⼈から話を聞いてみることを⼤切にしています。

Linus Torvaldsさん(Linux開発者)

Igor Sysoevさん(nginx開発者)

Alexei Vladishevさん(Zabbix開発者)© LPI-Japan / EDUCO all rights reserved.

2

ゼウス・エンタープライズからのお知らせ
提供するITサービス

https://www.zeus-enterprise.co.jp/solution/service© LPI-Japan / EDUCO all rights reserved.

3

ゼウス・エンタープライズからのお知らせ
提供するITサービス

https://www.it-training.tokyo/kids/index.html© LPI-Japan / EDUCO all rights reserved.

4

アジェンダ
1. LinuC Level2試験とは- 試験概要と特徴

2.

技術解説

3.

Q&A

主題2.01︓システムの起動とLinuxカーネル- 2.01.1 ブートプロセスとGRUB- 2.01.3 Linuxカーネルの構成要素- 2.01.4 Linuxカーネルのコンパイル© LPI-Japan / EDUCO all rights reserved.

5LinuCとは2020年4⽉1⽇ LinuC レベル1・2 新バージョン Version10.0リリース︕

旧バージョンとの差分はについては、こちら。
https://linuc.org/docs/linuc_ver10.pdf© LPI-Japan / EDUCO all rights reserved.

6LinuC Level2試験とは仮想環境を含むLinuxのシステム設計、ネットワーク構築において、アーキテクチャに基づいた設計、導⼊、保守、問題解決ができる技術者を認定する試験ü Linuxシステムの設計、構築、監視、トラブルシューティングができる。
ü 仮想マシンやコンテナの仕組みを理解し、その管理と運⽤ができる。
ü セキュリティとシステムアーキテクチャの基本を理解し、サービスの設計、構築、運⽤・管理ができる。
201試験/202試験の両⽅に合格することでレベル2に認定
1試験あたり 15,000円（消費税別）
ピアソンVUEにおけるCBT or PBT（団体受験⽤）

詳細は、https://linuc.org/linuc2/© LPI-Japan / EDUCO all rights reserved.

7

LinuC Level2試験とは201試験

2.01︓システムの起動とLinuxカーネル
2.01.1 ブートプロセスとGRUB
2.01.2 システム起動のカスタマイズ
2.01.3 Linux カーネルの構成要素
2.01.4 Linuxカーネルのコンパイル
2.01.5 カーネル実⾏時における管理とトラブルシューティング
2.02︓ファイルシステムとストレージ管理
2.02.1 ファイルシステムの設定とマウント
2.02.2 ファイルシステムの管理
2.02.3 論理ボリュームマネージャの設定と管理
2.03︓ネットワーク構成
2.03.1 基本的なネットワーク構成
2.03.2 ⾼度なネットワーク構成
2.03.3 ネットワークの問題解決
2.04︓システムの保守と運⽤管理
2.04.1 makeによるソースコードからのビルドとインストール
2.04.2 バックアップとリストア
2.04.3 ユーザへの通知
2.04.4 リソース使⽤状況の把握
2.04.5 死活監視、リソース監視、運⽤監視ツール
2.04.6 システム構成ツール
2.05︓仮想化サーバー
2.05.1 仮想マシンの仕組みとKVM
2.05.2 仮想マシンの作成と管理
2.06︓コンテナ
2.06.1 コンテナの仕組み
2.06.2 Dockerコンテナとコンテナイメージの管理
https://linuc.org/linuc2/range/201.html
https://linuc.org/linuc2/range/202.html

202試験

2.07︓ネットワーククライアントの管理
2.07.1 DHCPサーバーの設定と管理
2.07.2 PAM認証
2.07.3 LDAPクライアントの利⽤⽅法
2.07.4 OpenLDAPサーバーの設定
2.08︓ドメインネームサーバー
2.08.1 BINDの設定と管理
2.08.2 ゾーン情報の管理
2.08.3 セキュアなDNSサーバーの実現
2.09︓HTTPサーバーとプロキシサーバー
2.09.1 Apache HTTPサーバーの設定と管理
2.09.2 OpenSSLとHTTPSの設定
2.09.3 nginxの設定と管理
2.09.4 Squidの設定と管理
2.10︓電⼦メールサービス
2.10.1 Postfixの設定と管理
2.10.2 Dovecotの設定と管理
2.11︓ファイル共有サービス
2.11.1 Sambaの設定と管理
2.11.2 NFSサーバーの設定と管理
2.12︓システムのセキュリティ
2.12.1 iptables や firewalld によるパケットフィルタリング
2.12.2 OpenSSH サーバーの設定と管理
2.12.3 OpenVPNの設定と管理
2.12.4 セキュリティ業務
2.13︓システムアーキテクチャ
2.13.1 ⾼可⽤システムの実現⽅式
2.13.2 キャパシティプランニングとスケーラビリティの確保
2.13.3 クラウドサービス上のシステム構成
2.13.4 典型的なシステムアーキテクチャ© LPI-Japan / EDUCO all rights reserved.

8LinuC学習のコツ①出題範囲の内容について調べてみる
公式ドキュメント・技術書など②実際に操作してみる
これが⼤事︕③学習の補助教材などを利⽤する・メールマガジン
・標準教科書・過去のセミナー資料
詳細は、https://lpi.or.jp/learning/© LPI-Japan / EDUCO all rights reserved.

9LinuC学習のコツ④過去セミナーの動画
https://www.youtube.com/user/LPIJapan© LPI-Japan / EDUCO all rights reserved.

10

技術解説
主題2.01︓システムの起動とLinuxカーネル
2.01.1 ブートプロセスとGRUB
重要度
4
概要
ブートプロセス中およびリカバリモードのLinuxシステムを適切に操作する。関連するブートローダはGRUB バージョン2 である。BIOS と UEFI のシステム両⽅をカバーする。
詳細
BIOS と UEFI
Master Boot Record (MBR)EFI System Partition (ESP), efibootmgr, UEFI shell
ブートローダの標準的なオプションの変更とブートローダのシェル(コマンドライン)の使⽤。
ブートローダの開始とカーネルへの引継ぎ。
GRUB の起動メニューを⽣成する。
grub-mkconfig, grub2-mkconfig
カーネルローダブルモジュールのロード。
initrd, initramfs
ハードウェアの初期化と設定。
デバイス、モジュール
ファイルシステムのチェックとマウント。
デーモン / サービスの初期化と設定。
systemctl, systemd.unit
ハードディスクまたはリムーバルデバイスにおけるブートローダのインストール場所を知っている。
grub-install, grub2-install/boot/, /boot/grub/,/boot/grub2/ および /boot/efi/ の内容© LPI-Japan / EDUCO all rights reserved.

11

技術解説
2.01.3 Linux カーネルの構成要素
重要度
2
概要
特定のハードウェア、ハードウェアドライバ、システムリソース、およびさまざまな要求に必要となるカーネルの構成要素を利⽤する。これには、異なる種類のカーネルイメージを実装すること、安定版および開発版のカーネルとパッチを区別すること、カーネルモジュールを利⽤することなども含まれる。
詳細
Kernel の配布形式。
bzImage , xz データ圧縮
Kernelのモジュールとドキュメント。
/usr/src /linux//usr/src /linux/Documentation/
2.01.4 Linuxカーネルのコンパイル
重要度2
概要Linuxカーネルの特定の機能を必要に応じて取り込んだり無効化するために、カーネルを適切に構成できる。また、必要に応じてLinuxカーネルをコンパイルし、新しいカーネルに変更点を書き込み、initrdイメージを作成し、新しいカーネルをインストールできる。
詳細/usr/src /linux//usr/src /linux/.config
カーネルの Makefile
Kernel 2.6.x、3.x、4.x、5.x のmakeのターゲット。
all, config, xconfig, menuconfig, gconfig, oldconfig, mrproper, bzImage, modules, modules_install, rpm-pkg, binrpm-pkg, deb-pkg
カーネル構成をカスタマイズする。
新しいカーネルおよび適切なカーネルモジュールを構築する。
/lib/modules/kernel-version/, gzip, bzip2
新しいカーネルおよび必要なモジュールをインストールする。
module tools, depmod
ブートマネージャが新しいカーネルおよび関連付けられたファイルを探せるようにする。
モジュールの構成ファイル
DKMS を使⽤してカーネルのモジュールをコンパイルする。
dkms
initrd を構成する。
Dracut,mkinitrd, mkinitramfs© LPI-Japan / EDUCO all rights reserved.

12

技術解説

Whatʼs Linux kernel ?

https://www.kernel.org/© LPI-Japan / EDUCO all rights reserved.

13

Whatʼs Linux kernel ?
カーネル = OSの核となるプログラム• ハードウェア制御• メモリマネージメント• プロセス処理• ファイルシステム• アプリケーション実⾏などを担当する。

OS

カーネル© LPI-Japan / EDUCO all rights reserved.

14

Whatʼs Linux kernel ?
Linuxカーネルの歴史（1991年8⽉25⽇）
Hello everybody out there using minix I'm doing a (free) operating system (just a hobby, won't be big andprofessional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. I'd like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat(same physical layout of the file-system (due to practical reasons)among other things).
I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
This implies that I'll get something practical within a few months, andI'd like to know what features most people would want. Any suggestions
are welcome, but I won't promise I'll implement them :-)Linus (torv...@kruuna.helsinki.fi)
PS. Yes - it's free of any minix code, and it has a multi-threaded fs.
It is NOT protable (uses 386 task switching etc), and it probably neverwill support anything other than AT-harddisks, as that's all I have :-(.

https://groups.google.com/forum/#!original/comp.os.minix/dlNtH7RRrGA/SwRavCzVE7gJ© LPI-Japan / EDUCO all rights reserved.

15

Whatʼs Linux kernel ?
Linuxカーネルの歴史

1991年 0.01リリース
1994年 1.0リリース
1996年 2.0リリース
2003年 2.6リリース
2011年 3.0リリース
2015年 4.0リリース
2019年 5.0リリース
https://www.linuxfoundation.jp/blog/2020/08/download-the-2020-linux-kernel-history-report/
https://www.linuxfoundation.jp/wp-content/uploads/2020/08/2020_kernel_history_report_082720.pdf© LPI-Japan / EDUCO all rights reserved.

16

Whatʼs Linux kernel ?
Linuxカーネル

mainline（開発版）

約3か⽉のインターバルで新機能を開発する
x.y-rc1 → x.y-rc2 → x.y-rc3・・・・x.y-rc12

stable（安定版）

開発完了した新機能・バグ修正が⾏われる
x.y → x.y.1 → x.y.2・・・・

longterm（⻑期保守版）

重要なバグ修正のみが⾏われる
x.y → x.y.1 → x.y.2・・・・・・・

https://www.kernel.org/
https://www.kernel.org/category/releases.html© LPI-Japan / EDUCO all rights reserved.

17

Whatʼs Linux kernel ?
Linuxカーネル

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/?h=v5.9-rc6© LPI-Japan / EDUCO all rights reserved.

18

Whatʼs Linux kernel ?
ソースコードディレクトリから⾒るLinuxカーネルの持つ役割[root@centos8test src]# ls-rw-r--r--. 1 root root 108M 7⽉ 22 16:44 linux-5.7.10.tar.xz[root@centos8test src]# cd linux-5.7.10[root@centos8test linux-5.7.10]# ls
COPYING
Kbuild MAINTAINERS arch crypto include kernel net
security usr
CREDITS
Kconfig Makefile
block drivers init
lib
samples soundvirt
Documentation LICENSES README
certs fs
ipc
mm
scripts tools

security（セキュリティ）virt（仮想化関連）
mm（メモリ管理）
lib（ライブラリ）
crypto（暗号化）sound（サウンド）
Documentation（ドキュメント）など© LPI-Japan / EDUCO all rights reserved.

19

Whatʼs Linux kernel ?
unameコマンド（Linuxカーネルバージョンの確認）[root@centos8test ~]# uname -r
5.7.10[root@centos8test ~]# uname -a
Linux centos8test 5.7.10 #2 SMP Thu Jul 23 23:00:48 JST 2020 x86_64 x86_64 x86_64 GNU/Linux[root@centos8test boot]# ls –l /boot
合計 210472
lrwxrwxrwx. 1 root root
23 7⽉ 24 10:08 System.map -> /boot/System.map-5.7.10-rw-------. 1 root root 3909996 5⽉ 8 20:07 System.map-4.18.0-193.el8.x86_64-rw-r--r--. 1 root root 4600996 7⽉ 24 10:08 System.map-5.7.10-rw-r--r--. 1 root root 187648 5⽉ 8 20:07 config-4.18.0-193.el8.x86_64
drwxr-xr-x. 3 root root
4096 7⽉ 23 11:14 efi
drwx------. 4 root root
4096 7⽉ 23 11:17 grub2-rw-------. 1 root root 54334239 7⽉ 23 11:16 initramfs-0-rescue-ab3015baa6bb48818a10a264e966f18c.img-rw-------. 1 root root 29419458 7⽉ 23 11:18 initramfs-4.18.0-193.el8.x86_64.img-rw-------. 1 root root 19588423 7⽉ 23 11:24 initramfs-4.18.0-193.el8.x86_64kdump.img-rw-------. 1 root root 77062114 7⽉ 24 10:09 initramfs-5.7.10.img
drwxr-xr-x. 3 root root
4096 7⽉ 23 11:15 loader
drwx------. 2 root root 16384 7⽉ 23 11:13 lost+foundlrwxrwxrwx. 1 root root
20 7⽉ 24 10:08 vmlinuz -> /boot/vmlinuz-5.7.10-rwxr-xr-x. 1 root root 8913656 7⽉ 23 11:16 vmlinuz-0-rescue-ab3015baa6bb48818a10a264e966f18c-rwxr-xr-x. 1 root root 8913656 5⽉ 8 20:07 vmlinuz-4.18.0-193.el8.x86_64-rw-r--r--. 1 root root 8542464 7⽉ 24 10:08 vmlinuz-5.7.10© LPI-Japan / EDUCO all rights reserved.

20

Whatʼs Linux kernel ?
Linux = Linuxカーネル ?

Linux（狭義）=Linuxカーネル
シェル・
アプリケーションなど

Linux（広義、ディストリビューション）=

Linuxカーネル© LPI-Japan / EDUCO all rights reserved.

21

技術解説

Linuxの起動プロセス© LPI-Japan / EDUCO all rights reserved.

22

Linuxの起動プロセス
電源オン
UEFI

BIOS
ブートローダ（GRUB/GRUB2）を呼び出す

ブートローダブートローダLinuxカーネルを呼び出す

Linuxカーネル

Linuxカーネル

systemd

起動が有効となっているunit

init

PID（1）で起動するプロセス

各種サービス

各種サービス

ランレベルにおいて起動となっているサービス

ログイン© LPI-Japan / EDUCO all rights reserved.

23

Linuxの起動プロセス
UEFI（Unified Extensible Firmware Interface）
BIOS（Basic Input Output System）
UEFI/BIOSの役割
Ø ハードウェア初期化
Ø ⾃⼰診断処理
Ø メモリチェックØ ハードウェア設定読込Ø 起動デバイスのチェックØ 起動デバイスにあるブートローダ（GRUB/GRUB2）を探し起動
UEFI/BIOSの違い
Ø BIOSはMBR（Master Boot Record）、UEFIはGPT（GUID Partition Table）でパーティションを管理
Ø BIOSは2.2TB以上のディスクが⾮サポート、UEFIはそれ以上をサポート
Ø UEFIは、GUIなどでの操作可能© LPI-Japan / EDUCO all rights reserved.

24

Linuxの起動プロセス
takahiro@ubuntu2004server:~$ sudo parted -l[sudo] password for takahiro:
Model: ATA ST250DM000-1BD14 (scsi)
Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End
Size File system Name Flags
1
1049kB 2097kB 1049kB
bios_grub
22097kB 250GB 250GB ext4
takahiro@ubuntu2004server:~$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.5
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 488397168 sectors, 232.9 GiB
Model: ST250DM000-1BD14
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): F5262966-F739-4E41-AEDD-D3F685D7A60A
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 488397134
Partitions will be aligned on 2048-sector boundaries
Total free space is 4397 sectors (2.1 MiB)
Number Start (sector) End (sector) Size
Code Name
1
2048
4095 1024.0 KiB EF022
4096
488394751 232.9 GiB 8300

© LPI-Japan / EDUCO all rights reserved.

25

Linuxの起動プロセス
takahiro@ubuntu2004server:~$ sudo dmidecode –t 0
[sudo] password for takahiro:# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Dell Inc.
Version: A12
Release Date: 01/10/2013
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 12288 kB
Characteristics:
PCI is supported
PNP is supported
BIOS is upgradeable
BIOS shadowing is allowed
Boot from CD is supported
Selectable boot is supported
EDD is supported
5.25”/1.2 MB floppy services are supported (int 13h)3.5”/720 kB floppy services are supported (int 13h)3.5”/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
ACPI is supported
USB legacy is supported
BIOS boot specification is supported
Function key-initiated network boot is supported
Targeted content distribution is supported
UEFI is supported
BIOS Revision: 4.6

UEFIが使われている© LPI-Japan / EDUCO all rights reserved.

26

Linuxの起動プロセス
systemd/initØ PIDが1（⼀番最初に起動するプロセス）Ø 各種サービスを起動する
systemdの場合 = 各unitの設定
initの場合 = 各ランレベルの設定[root@db01 ~]# systemctl --all
UNIT
LOAD
ACTIVESUBJOB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active
waiting
Arbitrary
Executable File Form
dev-block-8:2.device
loaded active
plugged
LVM PV OgMPDLwIE0-OxZd-bJos-q
dev-cdrom.device
loaded active
pluggedVBOX_CD-ROM
dev-centos-root.device
loaded active
plugged/dev/centos/root
dev-centos-swap.device
loaded active
plugged/dev/centos/swap[root@db01 ~]# systemctl list-unit-files --type service
UNIT FILE
STATE
arp-ethers.service
disabled
auditd.service
enabledauth-rpcgss-module.service
staticautovt@.service
enabledblk-availability.service
disabled
brandbot.service
staticchrony-dnssrv@.service
static© LPI-Japan / EDUCO all rights reserved.

27

Linuxの起動プロセス
dmesgコマンド（カーネル起動中のメッセージ確認）[root@centos8test ~]# dmesg[ 0.000000] Linux version 5.7.10 (root@centos8test) (gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC), GNU ld version 2.30-73.el8) #2 SMP Thu Jul 23
23:00:48 JST 2020
[ 0.000000] Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.7.10 root=/dev/mapper/cl-root ro crashkernel=auto resume=/dev/mapper/cl-swap
rd.lvm.lv=cl/root rd.lvm.lv=cl/swap.
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable.
[ 0.073034] Kernel command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.7.10 root=/dev/mapper/cl-root ro crashkernel=auto resume=/dev/mapper/cl-swap
rd.lvm.lv=cl/root rd.lvm.lv=cl/swap.
[ 0.076940] Memory: 261120K/2096696K available (12292K kernel code, 2138K rwdata, 4456K rodata, 2336K init, 6156K bss, 147040K reserved, 0K cmareserved).
[ 0.356231] TCP: Hash tables configured (established 16384 bind 16384)[ 0.356231] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear).
[ 1.553830] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled.
[ 1.554196] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver.
[ 1.624187] rtc_cmos rtc_cmos: registered as rtc0.
[ 1.845319] systemd[1]: Running in initial RAM disk.
[ 1.846688] systemd[1]: Set hostname to <centos8test>.
.
[ 3.143944] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI[ 3.144184] e1000: Copyright (c) 1999-2006 Intel Corporation.
.
[ 5.533112] audit: type=1404 audit(1600700457.406:2): enforcing=1 old_enforcing=0 auid=4294967295 ses=4294967295 enabled=1 old-enabled=1
lsm=selinux res=1[ 5.700566] SELinux: Permission watch in class filesystem not defined in policy.
© LPI-Japan / EDUCO all rights reserved.

28

技術解説

Linux kernelの再構築© LPI-Japan / EDUCO all rights reserved.

29

Linux kernelの再構築①ソースコードのダウンロード②ダウンロードファイルの解凍③カーネル設定(.config)の⽣成④カーネルに組み込む機能のコンパイル⑤動的モジュールとして組み込む機能のコンパイル⑥動的モジュールのインストール⑦カーネルのインストール⑧再起動

CentOS8のカーネル再構築(Linux kernel 5.7.10)
https://www.opensourcetech.tokyo/?page=1596349636© LPI-Japan / EDUCO all rights reserved.

30

Linux kernelの再構築
ソースコードのダウンロード(wgetなど)
解凍(tar/xzなど)

https://www.kernel.org/© LPI-Japan / EDUCO all rights reserved.

31

Linux kernelの再構築
カーネル設定(.config)の⽣成[root@centos8test linux-5.7.10]# make help ※⼀部ターゲットを抜粋
Configuration targets:
config- Update current config utilising a line-oriented program ・・・テキスト形式でパラメータを選択
nconfig- Update current config utilising a ncurses menu based program
menuconfig- Update current config utilising a menu based program・・・メニュー形式でパラメータを選択
xconfig- Update current config utilising a Qt based front-end
gconfig- Update current config utilising a GTK+ based front-end
oldconfig- Update current config utilising a provided .config as base・・・既存設定を使⽤
localmodconfig - Update current config disabling modules not loaded
localyesconfig - Update current config converting local mods to coredefconfig- New config with default from ARCH supplied defconfig
savedefconfig - Save current config as ./defconfig (minimal config)
allnoconfig- New config where all options are answered with noallyesconfig - New config where all options are accepted with yes
各コマンド実⾏時、
allmodconfig - New config selecting modules when possible
不⾜するパッケージがあれば追加しましょう。
alldefconfig - New config with all symbols set to default
randconfig- New config with random answer to all options
yes2modconfig - Change answers from yes to mod if possible
mod2yesconfig - Change answers from mod to yes if possible
listnewconfig - List new options
helpnewconfig - List new options and help text
olddefconfig - Same as oldconfig but sets new symbols to their・・・既存設定を使⽤ + 追加されているパラメータを選択
default value without prompting© LPI-Japan / EDUCO all rights reserved.

32

Linux kernelの再構築
make menuconfig（メニュー形式）© LPI-Japan / EDUCO all rights reserved.

33

Linux kernelの再構築
make config（テキスト形式）[root@centos8test linux-5.7.10]# make config
HOSTCC scripts/kconfig/conf.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --oldaskconfig Kconfig## using defaults found in /boot/config-4.18.0-193.el8.x86_64#/boot/config-4.18.0-193.el8.x86_64:1089:warning: symbol value 'm' invalid for NF_CT_PROTO_GRE/boot/config-4.18.0-193.el8.x86_64:2949:warning: symbol value 'm' invalid for ISDN_CAPI** Linux/x86 5.7.10 Kernel Configuration*** Compiler: gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5)*** General setup*
Compile also drivers which will not load (COMPILE_TEST) [N/y/?]© LPI-Japan / EDUCO all rights reserved.

34

Linux kernelの再構築
make olddefconfig（既存設定を踏襲 + 追加された設定はデフォルト値）[root@centos8test linux-5.7.10]# make olddefconfig
scripts/kconfig/conf --olddefconfig Kconfig## using defaults found in /boot/config-4.18.0-193.el8.x86_64#/boot/config-4.18.0-193.el8.x86_64:1089:warning: symbol value 'm' invalid for NF_CT_PROTO_GRE/boot/config-4.18.0-193.el8.x86_64:2949:warning: symbol value 'm' invalid for ISDN_CAPI## configuration written to .config#© LPI-Japan / EDUCO all rights reserved.

35

Linux kernelの再構築
make listnewconfig（追加されている設定をリストアップ）[root@centos8test linux-5.7.10]# make listnewconfig
scripts/kconfig/conf --listnewconfig Kconfig## using defaults found in /boot/config-4.18.0-193.el8.x86_64#/boot/config-4.18.0-193.el8.x86_64:1089:warning: symbol value 'm' invalid for NF_CT_PROTO_GRE/boot/config-4.18.0-193.el8.x86_64:2949:warning: symbol value 'm' invalid for ISDN_CAPICONFIG_BUILD_SALT=""CONFIG_SCHED_THERMAL_PRESSURE=n
CONFIG_IKHEADERS=nCONFIG_UCLAMP_TASK=nCONFIG_TIME_NS=yCONFIG_BOOT_CONFIG=nCONFIG_BPF_LSM=n.
.
.

© LPI-Japan / EDUCO all rights reserved.

36

Linux kernelの再構築.config（設定ファイル）の内容[root@centos8test linux-5.7.10]# cat -n .config
1 #2 # Automatically generated file; DO NOT EDIT.
3 # Linux/x86 5.7.10 Kernel Configuration
4 #
5
6 #
7 # Compiler: gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5)
8 #カーネルに組み込む
9 CONFIG_CC_IS_GCC=y
10 CONFIG_GCC_VERSION=80301
11 CONFIG_LD_VERSION=230000000
12 CONFIG_CLANG_VERSION=0
13 CONFIG_CC_CAN_LINK=y14 CONFIG_CC_HAS_ASM_GOTO=y
.
.
省略
.
.
動的モジュールとして利⽤する
8173 CONFIG_TEST_BPF=m8174 # CONFIG_TEST_BLACKHOLE_DEV is not set© LPI-Japan / EDUCO all rights reserved.

37

Linux kernelの再構築
make bzImage（カーネルに組み込む機能のコンパイル）※.configで「パラメータ名=y」となっている項⽬[root@centos8test linux-5.7.10]# make bzImageSYSTBL arch/x86/include/generated/asm/syscalls_32.h
SYSHDR arch/x86/include/generated/asm/unistd_32_ia32.h
SYSHDR arch/x86/include/generated/asm/unistd_64_x32.h
SYSTBL arch/x86/include/generated/asm/syscalls_64.h
HYPERCALLS arch/x86/include/generated/asm/xen-hypercalls.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
HOSTCC arch/x86/tools/relocs_32.o.
.
CCarch/x86/boot/video-vesa.oCCarch/x86/boot/video-bios.oLDarch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
OBJCOPY arch/x86/boot/vmlinux.bin
HOSTCC arch/x86/boot/tools/build
BUILD arch/x86/boot/bzImage
Setup is 15068 bytes (padded to 15360 bytes).
System is 8328 kB
CRC da731b84
Kernel: arch/x86/boot/bzImage is ready (#2)
© LPI-Japan / EDUCO all rights reserved.

38

Linux kernelの再構築
make modules（動的モジュールとして利⽤する機能のコンパイル）※.configで「パラメータ名=m」となっている項⽬[root@centos8test linux-5.7.10]# make modules
CALL scripts/checksyscalls.sh
CALL scripts/atomic /check-atomics.sh
DESCEND objtool
CHK
include/generated/compile.h
CC [M] arch/x86/events/amd/power.o
CC [M] arch/x86/events/intel/uncore.o
CC [M] arch/x86/events/intel/uncore_nhmex.o
CC [M] arch/x86/events/intel/uncore_snb.o
CC [M] arch/x86/events/intel/uncore_snbep.o
LD [M] arch/x86/events/intel/intel-uncore.o
CC [M] arch/x86/events/intel/cstate.o
LD [M] arch/x86/events/intel/intel-cstate.o
CC [M] arch/x86/events/rapl.o
CC [M] arch/x86/kernel/cpu/mce/inject.o
LD [M] arch/x86/kernel/cpu/mce/mce-inject.o
AS [M] arch/x86/crypto/twofish-x86_64-asm_64.o
CC [M] arch/x86/crypto/twofish_glue.o
LD [M] arch/x86/crypto/twofish-x86_64.o.
.

© LPI-Japan / EDUCO all rights reserved.

39

Linux kernelの再構築
make modules_install（make modulesでコンパイルした動的モジュールのインストール）[root@centos8test linux-5.7.10]# make modules_install
INSTALL arch/x86/crypto/blowfish-x86_64.ko
INSTALL arch/x86/crypto/camellia-aesni-avx-x86_64.ko
INSTALL arch/x86/crypto/camellia-aesni-avx2.ko
INSTALL arch/x86/crypto/camellia-x86_64.ko
INSTALL arch/x86/crypto/cast5-avx-x86_64.ko
INSTALL arch/x86/crypto/cast6-avx-x86_64.ko
INSTALL arch/x86/crypto/chacha-x86_64.ko
INSTALL arch/x86/crypto/crc32-pclmul.ko
INSTALL arch/x86/crypto/crc32c-intel.ko
INSTALL arch/x86/crypto/crct10dif-pclmul.ko
INSTALL arch/x86/crypto/des3_ede-x86_64.ko
INSTALL arch/x86/crypto/ghash-clmulni-intel.ko
INSTALL arch/x86/crypto/poly1305-x86_64.ko
INSTALL arch/x86/crypto/serpent-avx-x86_64.ko
INSTALL arch/x86/crypto/serpent-avx2.ko
INSTALL arch/x86/crypto/serpent-sse2-x86_64.ko
INSTALL arch/x86/crypto/sha512-ssse3.ko.
.

© LPI-Japan / EDUCO all rights reserved.

40

Linux kernelの再構築
make install（make bzImageでコンパイルしたもののインストール）[root@centos8test linux-5.7.10]# make installsh ./arch/x86/boot/install.sh 5.7.10 arch/x86/boot/bzImage ¥System.map "/boot“[root@centos8test boot]# ls –l /boot
合計 210472
lrwxrwxrwx. 1 root root
23 7⽉ 24 10:08 System.map -> /boot/System.map-5.7.10-rw-------. 1 root root 3909996 5⽉ 8 20:07 System.map-4.18.0-193.el8.x86_64-rw-r--r--. 1 root root 4600996 7⽉ 24 10:08 System.map-5.7.10-rw-r--r--. 1 root root 187648 5⽉ 8 20:07 config-4.18.0-193.el8.x86_64
drwxr-xr-x. 3 root root
4096 7⽉ 23 11:14 efi
drwx------. 4 root root
4096 7⽉ 23 11:17 grub2-rw-------. 1 root root 54334239 7⽉ 23 11:16 initramfs-0-rescue-ab3015baa6bb48818a10a264e966f18c.img-rw-------. 1 root root 29419458 7⽉ 23 11:18 initramfs-4.18.0-193.el8.x86_64.img-rw-------. 1 root root 19588423 7⽉ 23 11:24 initramfs-4.18.0-193.el8.x86_64kdump.img-rw-------. 1 root root 77062114 7⽉ 24 10:09 initramfs-5.7.10.img
drwxr-xr-x. 3 root root
4096 7⽉ 23 11:15 loader
drwx------. 2 root root 16384 7⽉ 23 11:13 lost+foundlrwxrwxrwx. 1 root root
20 7⽉ 24 10:08 vmlinuz -> /boot/vmlinuz-5.7.10-rwxr-xr-x. 1 root root 8913656 7⽉ 23 11:16 vmlinuz-0-rescue-ab3015baa6bb48818a10a264e966f18c-rwxr-xr-x. 1 root root 8913656 5⽉ 8 20:07 vmlinuz-4.18.0-193.el8.x86_64-rw-r--r--. 1 root root 8542464 7⽉ 24 10:08 vmlinuz-5.7.10© LPI-Japan / EDUCO all rights reserved.

41

Linux kernelの再構築
再起動（reboot）後、GRUBの起動メニューに構築したカーネルが選択されるようになっている。

“e”をタイプすると、起動メニューの編集が可能© LPI-Japan / EDUCO all rights reserved.

42Linux kernelの再構築
起動時に使⽤されるパラメータを変更して、「Ctrl+x」でそのパラメータで起動

例︓起動出来ないトラブルなどの際、シングルユーザモードにするCentOS7をシングルユーザモードで起動する⽅法
https://www.opensourcetech.tokyo/entry/20200308/1583595134© LPI-Japan / EDUCO all rights reserved.

43Linux kernelの再構築
grub2-mkconfig

全体設定（/etc/default/grub）とカスタム設定（/etc/grub.d/配下の設定ファイル）からGRUB設定（grub.cfg）を⽣成するコマンド
標準出⼒に出⼒されるが、-oオプションでファイル出⼒可能[root@centos8test ~]# ls –l /etc /default/grub-rw-r̶r--. 1 root root 311 7⽉ 23 11:17 /etc /default/grub[root@centos8test ~]# ls -l /etc /grub.d/
合計 84-rwxr-xr-x. 1 root root 8958 4⽉ 14 23:53 00_header-rwxr-xr-x. 1 root root 1043 12⽉ 12 2019 00_tuned-rwxr-xr-x. 1 root root 1240 4⽉ 14 23:53 01_menu_auto_hide-rwxr-xr-x. 1 root root 232 4⽉ 14 23:53 01_users-rwxr-xr-x. 1 root root 13434 4⽉ 14 23:53 10_linux-rwxr-xr-x. 1 root root 11696 4⽉ 14 23:53 20_linux_xen-rwxr-xr-x. 1 root root 2559 4⽉ 14 23:53 20_ppc_terminfo-rwxr-xr-x. 1 root root 10670 4⽉ 14 23:53 30_os-prober-rwxr-xr-x. 1 root root 1412 4⽉ 14 23:53 30_uefi-firmware-rwxr-xr-x. 1 root root 214 4⽉ 14 23:53 40_custom-rwxr-xr-x. 1 root root 216 4⽉ 14 23:53 41_custom-rw-r--r--. 1 root root 483 4⽉ 14 23:53 README[root@centos8test ~]# grub2-mkconfig -o /var/tmp/grub.cfg
Generating grub configuration file ...
done[root@centos8test ~]# ls -l /var/tmp/
合計 44-rw-r--r--. 1 root root 36617 9⽉ 22 00:08 dmesg.log-rw-r--r--. 1 root root 5121 9⽉ 26 23:20 grub.cfg© LPI-Japan / EDUCO all rights reserved.

44

技術解説

Appendix© LPI-Japan / EDUCO all rights reserved.

45

Appendix
Linuxカーネルに関する⽤語集
⽤語

説明

DKMS

Dynamic Kernel Module Support
カーネルのソースツリーの外にソースが存在する Linux カーネルモジュールの⽣成を可能にするプログラム/フレームワーク
https://wiki.archlinux.jp/index.php/Dynamic_Kernel_Module_Support

Dracutinitramfsを作成などするツール

initramfs

Linuxカーネルが起動時に使⽤する仮想ルートファイルシステム（initial ram filesystem）

initrdinitramfsが使われる前から利⽤されていた仮想ルートファイルシステム（initial ram disk）

vmlinuz

圧縮されたbzImageフォーマットのLinuxカーネルイメージ（vmlinux）

圧縮・アーカイブ形式

Linuxカーネル関連では、xz/zip/bzip2/cpio/tarなどが使⽤されている

https://access.redhat.com/documentation/jajp/red_hat_enterprise_linux/6/html/deployment_guide/sec-verifying_the_initial_ram_disk_image
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/ram
fs-rootfs-initramfs.rst?h=v5.9-rc7
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/ram
fs-rootfs-initramfs.rst?h=v5.9-rc7© LPI-Japan / EDUCO all rights reserved.

46

Appendix
Dracut（initramfsを作成する）[root@centos8test tmp]# dracut "initramfs-$(uname -r).img" $(uname -r)
Warning no default label for /var/tmp/initramfs-5.7.10.img[root@centos8test tmp]# ls -l /var/tmp/initramfs-5.7.10.img-rw-------. 1 root root 77062113 9⽉ 27 00:29 /var/tmp/initramfs-5.7.10.img[root@centos8test tmp]# lsinitrd /var/tmp/initramfs-5.7.10.img
Image: /var/tmp/initramfs-5.7.10.img: 74M========================================================================
Version: dracut-049-70.git20200228.el8Arguments:
dracut modules:
bash
systemd
systemd-initrd
nss-softokn
rngd
i18n
network-legacy
network
ifcfg
prefixdevnamedmkernel-modules
kernel-modules-extra
kernel-network-modules© LPI-Japan / EDUCO all rights reserved.

47

Appendix
systemd（systemctlコマンド）
コマンド

説明

systemctl start nginx

サービスの起動systemctl stop nginx

サービスの停⽌

systemctl restart nginx

サービスの再起動

systemctl reload nginx

サービス設定の再読み込み

systemctl enable nginx

サービス⾃動起動設定の有効化

systemctl disable nginx

サービス⾃動起動設定の無効化

systemctl is-enabled nginx

サービス⾃動起動設定の確認

systemctl –all

全情報を表⽰systemctl list-unit-files --type service

インストール済みのユニットファイル表⽰

https://www.opensourcetech.tokyo/entry/20200717/1594960896
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/sectmanaging_services_with_systemd-services© LPI-Japan / EDUCO all rights reserved.

48

Appendix

https://pc.watch.impress.co.jp/docs/news/yajiuma/1255074.html
https://lkml.org/lkml/2020/5/24/407© LPI-Japan / EDUCO all rights reserved.

49

Appendix
Linuxカーネルを知るための書籍・イベント

それがぼくには楽しかったから全世界を巻き込んだリナックス⾰命の真実
改訂3版 Linuxエンジニア養成読本(Software Design plus)
動かしながらゼロから学ぶ
Linuxカーネルの教科書

Open Source Summit Japan
https://events.linuxfoundation.org/open-source-summit-japan/© LPI-Japan / EDUCO all rights reserved.

50

技術解説

本⽇のまとめ© LPI-Japan / EDUCO all rights reserved.

51

本⽇のまとめ• Linuxカーネルとは何かØ Linuxカーネルの歴史
Ø Linuxカーネルの機能/役割• Linuxの起動プロセス• Linuxカーネルの再構築

Just for fun︕
実機を操作してLinuxを学んでね♪

© LPI-Japan / EDUCO all rights reserved.

52

Q&A

© LPI-Japan / EDUCO all rights reserved.

53

Thank you for join todayʼs seminar!

https://www.opensourcetech.tokyo/
https://twitter.com/matt_zeus
https://www.facebook.com/takahiro.kujirai.1© LPI-Japan / EDUCO all rights reserved.

54