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アプリのサンプルが有ったのでこれを使って動かして…

EPTの設定をbhyveで調べる

KVMよりもEPTの使用前提なbhyveのほうがコード読みやすかったのです。Nested Paging in bhyveというFreeBSDのメモリ管理からbhyveでのEPT周りの実装を解説した論文があったのも理由としては大きいですね。 EPTPの設定 vmx_vminit()という関数でeptpの設定を…

Linuxとかカーネル方面のYoutubeチャンネル

Linuxとかカーネル方面のYoutubeチャンネルをめも hupstream Kernel Recipesというタイトルのシリーズがカーネルの濃い発表動画。 www.youtube.com KVM Forum KVMやQEMUなど。 www.youtube.com The Linux Foundation 色んなカンファレンス動画がある。 www.y…

linux: カーネルからioctl(2)可能なfdをユーザ空間に返す

KVMはioctl(2)でVMを作ったりvcpuを作ったりします。この時に使うfdは/dev/kvmファイルに対してioctl(2)を実行した時の戻り値です。ioctl(2)の戻り値がioctl(2)可能なfdとなってます。ユーザーランドに返すfdはどうやって作るのかというのが今回のめもです。…

dockerでNignxのリバースプロキシとwebアプリをlinkしたローカル開発環境を作る

前に仕事で作ったdockerを使ったwebアプリの開発環境の覚書です。 実環境はAWSで動いていて、ALBがhttpsでリクエストを受けてALBとwebアプリはhttpで通信します。このような構成をdockerで作りたかったわけです。 簡単な概要はこんな図になります。 ALBのと…

Linux:パフォーマンスに影響あるデバッグオプションがどれだけ影響あるか試してみた

なんとなくやってみた系ですね。 今回はCONFIG_DEBUG_OBJECTSのところです。 CONFIG_DEBUG_OBJECTS_FREEがkmalloc/kfreeをヘヴィにつかうような場合にパフォーマンス劣化するよーなんていってます。 まずはCONFIG_DEBUG_OBJECTSの項目を全部無効にした場合。…

qemu: pyhtonでゲストとシリアル通信

ゲスト側のLinuxカーネルでシリアルコンソールを有効にしているときに、ホストからpythonでシリアルコンソールにアクセスするときメモです。 ゲスト側はカーネルのコマンドラインでシリアルの設定をするのと、qemuのオプションで-serial ptyとしてptyを使う…

TwitterのPC版のUIからだと連携解除できないappの連携解除方法メモ

iPhoneとかで連携したappの一部はPCのWeb版からだとrevokeできなかったのでやり方のメモです。 PCのWeb版だと連携しているアプリを見るとLearn how to revoke an iOS appとリンクがあるだけでRevoke Accessボタンがないappがあります。Twitter for iPhoneと…

週刊? Linux Kernel Patch Watch 20180520

前書き 細かいpatchも見ているとなるほどーなとか勉強になりますね 今週のpatch 2038年問題対応 [PATCH 0/6] Transition vfs to 64-bit timestampsです。VFSがstruct timespecを使っているところで、この構造体は2038年問題があるのでstruct timespec64に置…

週刊? Linux Kernel Patch Watch 20180511

前書き (´-`).oO(ほんとに小ネタが多いな 今週のpatch vdsoの未使用ファイル削除 [PATCH] x86/vdso: remove unused fileです。読まなくて良いファイルが消えるのは良いことですね。 gcc8でobjtoolのワーニングがたくさん出る問題 Kernel build with gcc 8 a …

週刊? Linux Kernel Patch Watch 20180504

前書き 今週もなんとか小ネタを集めて。。。 今週のpatch IRQのon/off切り替わり時のトレースポイントでパフォーマンス劣化してた [PATCH RFC] tracepoint: Introduce tracepoint callbacks executing with preempt onです。hackbenchで〜10%のパフォーマン…