Linux Advent Calendar 2019で書いた「unameコマンドから始めるデバッグ&カーネルハック入門」を電子書籍化しました

Linux Advent Calendar 2019でunameコマンドから始めるデバッグ&カーネルハック入門という記事を書きました。 kernhack.hatenablog.com このときはFedora 31を実験環境として選んで書いたんですが、環境をCentOS 8にして内容を加筆修正して電子書籍にしまし…

Linux起動時のカーネルパニック(at ring_buffer_set_clock())修正めも

機種依存ですが、fedoraで5.4系のカーネルで起動時にカーネルパニックするようになり、自分もこのバグに当たったので修正してパッチをlkmlに投稿しました。 このパッチはLinux5.5.に取り込まれました github.com ついでなのでどんな感じでデバッグしたかの記…

secure bootが有効な環境で自前ビルドのカーネルに署名する方法(fedora向け)

fedoraなら多分一番手軽だと思う署名方法です。他のディストリビューションはわかりません テスト環境 ディストリビューションは(もちろん) fedoraです。バージョンは31です。実機ではなくてqemuでテストしました。 準備 まずpesignとnss-toolsパッケージを…

killコマンドのあれこれ

(´-`).。oO(killコマンドを提供するプロジェクト多いなって killコマンドを提供するプロジェクト とりあえず気付いた範囲で4つ。 util-linux procps-ng coreutils busyboxl 上のリストはmanページへのリンクになっているのでオプションの違いとかはそちら…

unameコマンドから始めるデバッグ&カーネルハック入門

この記事はLinux Advent Calendar 2019の1日目の記事です。 はじめに 環境 おことわり uname(1) uname(1)が出力する内容 strace(1) gdb(1) bpftrace systemtap Kernel Hack Livepatch おまけ RHEL 8.1 CentOS 8 まとめ はじめに 本記事ではLinuxサーバのホス…

Fedora Kernel test week参加記録

FedoraではkernelのテストイベントとかGnome 3.34 Test Day、I18N Test Day などのテストイベントがちょくちょくあります。 今回はKernel 5.3 Test Weekの備忘録です。ちなみに、この手のイベントはfedora MAGAZINEで紹介されることがあります。 今回の参加…

雑文:Linuxとか低レイヤが好きで趣味で色々やってたら趣味が仕事になったのと、知識が足りないとこを勉強しようと思って学生にもなった件

このブロクで使ってるカテゴリは↓のようになっていて、こいつLinuxとかカーネル好きだなって感じなんですが、前まではLinux自体は使うけどそれくらいでガッツリとLinuxに絡んだりとかはしてませんでした。 前職はこんな感じのところでnodejsなんかのコード書…

UEFIのSecure boot + kdump・kexec

UEFIのSecure boot + kdump・kexecの動作確認 uefiのSecure bootが有効な環境でkdump・kexecは動作するのか?ってところの確認です。 Secure bootとは?というところはこちらのドキュメントを参照してください。 access.redhat.com テスト環境 テスト環境に…

raspberry pi 3 b+ and u-boot and mainline kernel, and meta-fedora

Raspberry Pi(以下rpi)のカーネルではなくて、mainline等のカーネルを使いたい場合のメモです。 TL;DR 基本的に次のwebサイトを見れば事足ります。 elinux.org 概要 rpi向けのカーネルは以下なのですが、mainlineのカーネルを使いたい等の理由がある場合の環…

自分用にLinuxカーネルのBuildbot + LAVAでCI環境を作るめも

ちょっとCI環境でも作るか〜ということで。 CI だいたいこんな構成です。 構成 いまのところすべてローカル環境で閉じてます。うちはマンションタイプのBフレッツでそんなに速いわけでもないからローカルで閉じてるほうがテスト時間が短くて済むというとこで…

meta-fedoraなんてものを作り始めた(*ノω・*)テヘ

meta-fedora はじめに もし、meta-fedoraと聞いてピンときた場合はその感は当たりですw 主に組み込み向けのLinuxディストリビューションを作るためのものとしてyocto projectがありますね。yoctoプロジェクトのリファレンスディストリビューションとしてpok…

Linuxカーネル4.1の名前空間(ドラフト)

はじめに 名前空間 名前空間の利点 名前空間の種類 Mount名前空間 IPC名前空間 UTS名前空間 Net名前空間 PID名前空間 User名前空間 名前空間の管理 プロセスと名前空間 名前空間のエクスポート nsfs 名前空間共通データ NSProxy構造体 NSProxyと名前空間 参…

Linuxカーネル4.1のvmalloc()(ドラフト)

はじめに スラブアロケータ以外の動的メモリ確保 vmalloc関数 vmalloc関数で使用するデータ構造 vmallocの初期化 vmallocでのメモリ確保 vfree関数でのメモリ解放 その他の非連続メモリ領域からメモリを確保する関数 vmap関数 ioremap関数 /proc/vmallocinfo…

Linuxカーネル4.1のメモリレイアウト(ドラフト)

はじめに ユーザプロセス空間とカーネル空間 x86_64のメモリレイアウト ダイレクトマップ(ストレートマップ)領域 vmalloc/ioremap領域 仮想メモリマップ %esp fixup stack カーネルテキスト領域 モジュールマッピング領域 vsyscall 固定マップ領域 はじめに…

Linuxカーネル4.1のSLUBアローケータ(ドラフト)

はじめに スラブアローケータ Linuxのスラブアローケータ slabアローケータ slobアローケータ slubアローケータ スラブオブジェクトの管理 使用中リスト スラブのマージ機能 Chache Coloring スラブの不活性化 frozen状態 スラブキャッシュの情報 slubアロー…

fedora 30からgrubの仕様が変わったのでφ(..)メモメモ

Fedora 30でChanges/BootLoaderSpecByDefaultというプロポーザルがあって、Fedora 30βでは実際にこの仕様になってます。カーネルを弄る人にはちょっと影響があるかなって感じです。 仕様 The Boot Loader Specificationに書かれています どんな風になったか …

dynamic_debugはどのようにソースコードの行数、関数名などを読み取っているのか

dynamic_debugのcontrolファイルを読むとこんな感じでファイル名、関数名、そしてpr_debugに渡している文字列などが見れます。これってどうやってんだろ?というのが今回調べたところです。 masami@kerntest:~/pr_debug_test$ sudo cat /sys/kernel/debug/dy…

FedoraのRISC-V portを試す

FedoraのRISC-VポートはPorting Fedora to RISC-Vで記事になってて気になってたのと、RISC-V原典オープンアーキテクチャのススメを買ったしarch/riscvを読んでみようかな〜ということでqemuで動かしてみました。 (´-`).。oO(FedoraのRISC-V関連の情報はArch…

Linuxカーネルソースに付属のscripts/の探索

この記事はLinux Advent Calendar 2018の12日目の記事です。 カーネルのソースコードに含まれるscripts/を探索してみます。カーネルのビルド中で使うようなものもあるし、それ以外の時に使うものもあります。今回は後者の方を探してみましょう。 diffconfig …

RHEL 8 betaのsrpmをリビルドしてmockでshellでログインできるところまで作る

この記事はLinux Advent Calendarの13日目です。 いんとろ Powering IT’s future while preserving the present: Introducing Red Hat Enterprise Linux 8 Beta キタ━━━━(゚∀゚)━━━━!!って感じですよね。 srpmも公開されています。Index of /redhat/rhel/rhel-8-…

mockとpackageのgitリポジトリとリビルド

この記事はLinux Advent Calendarの19日目です。 概要 今回はsrpmをダウンロードしてきて何かをするのではなくて、パッケージのgitリポジトリからcloneしてきてビルドするときのメモです。パッケージのビルド方法としてはfedpkgを使うかmockを使うかの2通り…

Linuxカーネルをgdbでデバッグ(またはディストリビューションのカーネルを使うときは当たってるパッチにも注意しよう)

この記事はLinux Advent Calendar 2018の1日目ですΣ(゚∀゚ノ)ノキャー イントロ ほんとは別の内容にしようと思ってたのですが、進めてる途中でカーネルのデバッグをするハメになったのでカーネルデバッグをネタにしてみました。カーネルのデバッグと言っても普通の…

Linuxでプロセス単位にaslrのon/offを切り替える仕組みめも

gdb turns off ASLR « codeblogを見ていてpersonality(2)を使えば良いのか〜と知ったのでめもです。 tl;dr personality(2)でADDR_NO_RANDOMIZEをセットすればoffにできる。 personality(2) aslr以外にも設定可能な項目はいくつか有ります。設定されている内…

libbfdのめも

libbfdの使い方のめもです。利用してるバージョンはbinutils-devel-2.31.1-13.fc29.x86_64です。 nmもどき アドレスとセクション名、それにdebug情報があればファイル名と行数を表示。連想配列が使いたかったのでヘッダファイルだけで実装されてるuthashとい…

virt-managerでarmのゲストを動かすメモ

忘れないようにメモっとこうという程度なので大したことはしてないです。 aarch64やarmhfpのイメージはIndex of /pub/Linux/Fedora/releasesから取得したとします。 qemuのバージョン ホストはx86_64なFedora 29で、qemuは3.0.0になります。 masami@saga:~/a…

When kallsyms doesn't show addresses even though kptr_restrict is 0

When I did grep kernel symbol address, addresses were all zero. masami@saga:~$ grep slab_alloc /proc/kallsyms 0000000000000000 t ___slab_alloc 0000000000000000 t __slab_alloc So, I checked kptr_restrict if it's not zero. masami@saga:~$ sud…

fedoraでdockerを使ってaarch64のクロスビルド環境を作る

qemuのstaticなバイナリとbinfmt_miscを使ってdockerでクロスビルド環境を作ってみます。 今回作ったものはこちらに置きました。 github.com 環境 HostはFedora 29で、arm64v8/fedoraにあるaarch 64のFedora 28(2018/10/11時点でのlatestはfedora 28です)…

linux: seq_fileの使い方めも

sysfs、debugfs、procfs等でファイルを作ってユーザーランドからreadするときにseq_file構造体を使う方法が有るけど使ったことなかったのでめもです。 コード こんな感じです。 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include <linux/module.h> #include <linux/kernel.h> #include <linux/string.h> </linux/string.h></linux/kernel.h></linux/module.h>…

systemtapでlivepatchする

CVE-2018-14634(Integer overflow in Linux's create_elf_tables function)でRed Hatのbugzillaを見ていて軽減策としてsystemtapでlivepatch的なことをしていて面白いな〜って思ったのでめもです。 環境はFedora 28で、カーネルのバージョンは4.18.9-200で…

unikernelのruntimejsを試してみる

runtime.jsを試してみたのでメモ書きです。 runtme.jsはunikernelの一つでカーネルにv8のエンジンが組み込まれてて、JavaScriptの実行がサポートされています。runtime.jsのサンプルで、eshttpを使ったwebアプリのサンプルが有ったのでこれを使って動かして…