Linux.conf.au で Gentoo プロジェクトの Linux Kernel の CI である「GKernelCI」について発表
はじめまして。
サイバートラストで EMLinux 向けのCIである「EMLinuxCI」を作っているAliceです。Gentoo Developer もやっています。
Linux.conf.au で Gentoo プロジェクトの Linux Kernel の CI である「GKernelCI」について発表してきたので、そのレポートを書きます。
Linux.conf.auとは
Linux.conf.au は アジア太平洋地域でのもっとも大きな Linux とオープンソースのカンファレンスです。カンファレンスでは、オープンソースに関わる幅広い話題について、それに関わるエキスパートから高度で技術的な発表が行われます。[1]
今年のLinux.conf.auはオンラインで開催されました。私のプレゼンテーションは「GKernelCI v2 and KCIDB」というタイトルで Kernel Miniconf のトラックで採択されました。
このKernel Miniconf のトラックは 2021年 1 月 23 日 (土) の日本時間午前7時から午後3時にかけて行われ、7つの発表が行われました。私の GKernelCI の発表は午後2時10分からでした。
「GKernelCI v2 and KCIDB」の発表内容について
私の今回の発表でのメインとなる内容は、現在の Gentoo のプロダクション環境において、KCIDB のツール (https://github.com/kernelci/kcidb) を利用して GKernelCI から KCIDB へ patching、building、booting のデータを送って、KCIDB とコラボレーションしていることについてでした。
KernelCI プロジェクトはKevin HilmanとTyler BakerとAlan BennettとMilo Casagrandeが始めたプロジェクトであり、その目的は異なるCIシステムからのKCIDBの結果を一か所に集めることです。
KCIDB は KernelCI プロジェクトの一部で、そのツールを使用することで異なる様々な KernelCI からの情報を「標準化」して KCIDB へ送ることができます。
kernel の各バージョンでの問題を Kernel デベロッパーに伝えるのに役立っており、kernel の品質向上につながっています。
[KCIDB へ送っている json データの例、詳細は末尾参照]
発表では、この KCIDB と GKernelCI とのコラボレーションについて話しました。
GKernelCI はもともと私が gentoo-sources を自動ビルド・自動テストするために始めたプロジェクトで、KernelCI プロジェクトと同じくらい古く、2016/2017 前後に別々に始まりました。
Gentoo kernel source のリリースプロセスには簡単に自動化できるような繰り返し作業がいくつかあり、テストにおける時間の節約とリリースプロセスの安定化・セキュリティーのために GKernelCI を始めました。
GKernelCIはまた、リリースされたカーネルが正常に動作していることを確認するためにアップストリームにメールを送った最初のCIの1つでもあります。
これはmeltdown/spectre問題のために2018年1月に送った報告です。
Meltdown spector でも KCIDB で協力していました。
現在、GKernelCIはKCIDBデータベースにデータを送信するKernelCIの全体像の一部です。
GKernelCI の今後
GKernelCI は今後も KernelCI へ貢献し、協力しながら kernel source の安定化と更なる自動化と簡略化を進めていきます。
この目標を達成するために、GKernelCIは安定化プロセスを単純化し、現行の安定化プロセスよりも優れたテストを追加することで、安定化プロセスをより安全にしています。例えば、単に異なるカーネルコンフィグレーションで起動するのではなく、kselftestのテストも行っていきます。
また、複数の仮想化アーキテクチャを同時にテストできるようにしていく予定です。
KernelCI による kernel 安定化への取り組みは現在大きな注目を浴びています。下図のようにすでに GKernelCI 以外に Red Hat の CKI や Google の syzbot や ARM が KCIDB へのデータ集約に協力しています。Linaro の tuxsuite や Yocto などのプロジェクトも今後の参加を検討しておりさらに盛り上がっていくと思います。
※ GKernelCI のロゴは当社のデザイナーでもある河原が作成してプロジェクトに貢献しました。
もし、このブログを読んで GKernelCI や KernelCI に興味を持った方は、以下のリンクからプロジェクトの詳細について知ることができるので見てみてください。
リンク:
-
GKernelCI: https://github.com/GKernelCI
-
GKernelCI main repository: https://github.com/GKernelCI/Gdocker
-
GKernelCI dashboard: https://kernel1.amd64.dev.gentoo.org/
-
KernelCI: https://github.com/KernelCI
-
KCIDB dashboard: https://staging.kernelci.org:3000/
- Linux Conf AU: https://linux.conf.au/
Have fun with GKernelCI and KernelCI!
Presentation:
https://lca-kernel.ozlabs.org/2021-Ferrazzi-GKernelCIv2-new-features-and-KernelCI-compatibility.pdf
video:
https://www.youtube.com/watch?v=LVZu9K6RWII
jsonデータ例:
{
"version": {
"major": 3,
"minor": 0
},
"revisions": [
{
"id": "f40ddce88593482919761f74910f42f4b84c004b+ae4de022037bb85f0c32fab60b559798604fd72ef89b8cd7bc88f988bd16bbfe",
"origin": "gkernelci",
"discovery_time": "2021-03-04T14:34:31.219218324+00:00",
"git_repository_url": "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git",
"git_repository_branch": "master",
"git_commit_hash": "f40ddce88593482919761f74910f42f4b84c004b",
"contacts": [
"Mike Pagano <mpagano@gentoo.org>",
"Alice Ferrazzi <alicef@gentoo.org>"
],
"patch_mboxes": [
{
"name": "1000_linux-5.11.1.patch",
"url": "https://raw.githubusercontent.com/GKernelCI/linux-patches/5.11/1000_linux-5.11.1.patch"
},
{
"name": "1001_linux-5.11.2.patch",
"url": "https://raw.githubusercontent.com/GKernelCI/linux-patches/5.11/1001_linux-5.11.2.patch"
},
{
"name": "1002_linux-5.11.3.patch",
"url": "https://raw.githubusercontent.com/GKernelCI/linux-patches/5.11/1002_linux-5.11.3.patch"
},
{
"name": "1500_XATTR_USER_PREFIX.patch",
"url": "https://raw.githubusercontent.com/GKernelCI/linux-patches/5.11/1500_XATTR_USER_PREFIX.patch"
},
{
"name": "2000_BT-Check-key-sizes-only-if-Secure-Simple-Pairing-enabled.patch",
"url": "https://raw.githubusercontent.com/GKernelCI/linux-patches/5.11/2000_BT-Check-key-sizes-only-if-Secure-Simple-Pairing-enabled.patch"
},
{
"name": "2900_tmp513-Fix-build-issue-by-selecting-CONFIG_REG.patch",
"url": "https://raw.githubusercontent.com/GKernelCI/linux-patches/5.11/2900_tmp513-Fix-build-issue-by-selecting-CONFIG_REG.patch"
},
{
"name": "2920_sign-file-patch-for-libressl.patch",
"url": "https://raw.githubusercontent.com/GKernelCI/linux-patches/5.11/2920_sign-file-patch-for-libressl.patch"
},
{
"name": "4567_distro-Gentoo-Kconfig.patch",
"url": "https://raw.githubusercontent.com/GKernelCI/linux-patches/5.11/4567_distro-Gentoo-Kconfig.patch"
}
],
"valid": true
}
],
"builds": [
{
"id": "gkernelci:5.11:amd64_5",
"origin": "gkernelci",
"start_time": "2021-03-04T14:34:31.219218324+00:00",
"revision_id": "f40ddce88593482919761f74910f42f4b84c004b+ae4de022037bb85f0c32fab60b559798604fd72ef89b8cd7bc88f988bd16bbfe",
"architecture": "amd64",
"valid": true
}
]
}