さとまたwiki

Claude Codeでカスタム Linux OS 構築

Buildrootを使って完全自己管理型のLinuxディストリビューションを作る

プロジェクト概要

🐧 + 🤖 = 💿

Claude Codeを活用して、Buildroot + LinuxカーネルでゼロからカスタムLinuxディストリビューションを構築します。 既存ディストロの改変(リブランディング)とは異なり、アップデートを含めて全て自分で管理できる構成を目指します。

このアプローチの目的

  • 完全自己管理型のLinuxを作成
  • アップデートも自分でコントロール
  • システムの中身を完全に理解
  • Claude Codeで開発を効率化

リブランディングとの違い

  • 既存ディストロに依存しない
  • パッケージ構成を自分で決定
  • ビルドプロセスを完全に把握
  • 再現性の高い設定ファイル管理

なぜBuildrootを選択するか

項目BuildrootLFSYocto既存ディストロ改変
構築の自動化
学習コスト低〜中
カスタマイズ性
ビルド時間短い(15分〜)長い長い(50分〜)-
再現性
「全て自分で管理」×

Buildrootの強み

  • 設定ファイル(defconfig)ベースで再現性が高い
  • パッケージ追加・削除が容易
  • アップデートも自分で管理できる
  • 自動化されつつも中身が見える
  • 最終的にISO/ブータブルイメージを生成可能
  • 2025年も活発に開発中(2025.02リリース済み)

Linuxシステムの構成要素

┌─────────────────────────────────────────────────┐
│           ユーザーアプリケーション                  │
│         (bash, vim, firefox, etc.)              │
├─────────────────────────────────────────────────┤
│              システムライブラリ                    │
│          (glibc, musl, libstdc++)               │
├─────────────────────────────────────────────────┤
│           基本ユーティリティ                       │
│      (coreutils, busybox, systemd/init)         │
├─────────────────────────────────────────────────┤
│              Linuxカーネル                        │
│    (プロセス管理、メモリ管理、デバイスドライバ)        │
├─────────────────────────────────────────────────┤
│           ブートローダー (GRUB等)                  │
├─────────────────────────────────────────────────┤
│              ハードウェア                         │
└─────────────────────────────────────────────────┘

Linuxカーネルの役割

カーネルは「OSの心臓部」であり、以下の機能を担います:

機能説明
プロセス管理プログラムの実行・スケジューリング
メモリ管理RAMの割り当て・仮想メモリ
ファイルシステムext4, btrfs などでディスクアクセス
デバイスドライバハードウェアとの通信
ネットワークTCP/IPスタック
セキュリティ権限管理、SELinux等

重要なポイント

カーネル単体では何もできません。ユーザー空間のツール(シェル、コマンド群など)が必要です。 Buildrootはカーネルとユーザー空間の両方を一括で構築してくれます。

Buildrootの仕組み

┌──────────────────────────────────────────────────────────┐
│                      Buildroot                           │
│  ┌─────────────────────────────────────────────────────┐ │
│  │                   設定システム                       │ │
│  │              (make menuconfig)                      │ │
│  └─────────────────────────────────────────────────────┘ │
│                         ↓                                │
│  ┌─────────────────────────────────────────────────────┐ │
│  │               自動ダウンロード                        │ │
│  │    - Linuxカーネルソース                             │ │
│  │    - ツールチェーン (gcc, binutils)                  │ │
│  │    - ライブラリ (glibc/musl)                         │ │
│  │    - ユーティリティ (busybox等)                      │ │
│  │    - 選択したパッケージ全て                          │ │
│  └─────────────────────────────────────────────────────┘ │
│                         ↓                                │
│  ┌─────────────────────────────────────────────────────┐ │
│  │             クロスコンパイル・ビルド                   │ │
│  └─────────────────────────────────────────────────────┘ │
│                         ↓                                │
│  ┌─────────────────────────────────────────────────────┐ │
│  │                出力イメージ生成                       │ │
│  │    - rootfs.tar (ルートファイルシステム)              │ │
│  │    - bzImage (カーネルイメージ)                      │ │
│  │    - sdcard.img (ブータブルイメージ)                 │ │
│  └─────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘

Buildrootが自動化してくれること

作業手動の場合Buildroot
ソース取得各プロジェクトから個別DL自動
依存関係解決自分で調査・管理自動
クロスコンパイラ構築非常に複雑自動
パッチ適用手動自動
ビルド順序依存関係を考慮して手動自動
ルートFS構築手動でディレクトリ構成自動
イメージ生成複雑なコマンド自動

基本的なビルドの流れ

Buildrootビルド手順

取得から完成まで

bash
# 1. Buildrootを取得
git clone https://github.com/buildroot/buildroot.git
cd buildroot

# 2. ターゲットの設定(メニュー形式)
make menuconfig
#   ここで以下を選択:
#   - ターゲットアーキテクチャ (x86_64)
#   - Linuxカーネルバージョン
#   - C ライブラリ (glibc or musl)
#   - 含めるパッケージ (bash, vim, etc.)
#   - 出力フォーマット (ISO, SDカード等)

# 3. ビルド実行(全自動)
make
#   → 15分〜数時間でシステム完成

# 4. 出力確認
ls output/images/
#   → bzImage, rootfs.ext4, sdcard.img など
プレビュー
$ make menuconfig
[ncurses GUI が起動]
$ make
Building...
Output: output/images/

make menuconfigでの主な設定項目

  • Target options:ターゲットアーキテクチャ(x86_64, ARM64等)
  • Toolchain:Cライブラリの選択(glibc/musl)
  • System configuration:ホスト名、バナー等
  • Kernel:Linuxカーネルバージョンと設定
  • Target packages:含めるソフトウェアパッケージ
  • Filesystem images:出力イメージ形式
  • Bootloaders:GRUB、syslinux等

アップデートの管理方法

カーネルアップデート

  1. make menuconfig でカーネルバージョン変更
  2. make linux-rebuild
  3. 新しい bzImage が生成される

パッケージアップデート

  1. Buildroot自体を git pull で更新
  2. 必要に応じて設定変更
  3. make clean && make で再ビルド

セキュリティパッチ

  1. 自分でパッチを用意
  2. board/your-board/patches/ に配置
  3. ビルド時に自動的に適用される

GUI/UIの実現可能性

【ディスプレイサーバー】
  ├── X11 (Xorg)      ← 伝統的、互換性高い
  └── Wayland         ← モダン、軽量

【グラフィックライブラリ】
  ├── Qt5/Qt6         ← 高機能、やや重い
  ├── GTK3/GTK4       ← GNOME系
  ├── SDL2            ← ゲーム・シンプルUI向け
  └── DirectFB        ← 超軽量(Xなし)

【ウィンドウマネージャ/デスクトップ】
  ├── Matchbox        ← 超軽量(組み込み向け)
  ├── Fluxbox         ← 軽量
  ├── Openbox         ← 軽量
  ├── i3              ← タイル型WM
  └── Enlightenment   ← 見た目良い、軽量

【アプリケーション】
  ├── ターミナル (xterm, st, etc.)
  ├── ファイルマネージャ (pcmanfm, thunar)
  ├── ブラウザ (midori, netsurf, firefox)
  └── 各種ツール

現実的なUI構成例

レベル構成サイズ用途
最小GUILinux + BusyBox + DirectFB~50MBキオスク端末、単一アプリ専用機
軽量デスクトップLinux + musl + X11 + Openbox~200-500MB軽量PC、Raspberry Pi的な用途
フル機能Linux + glibc + X11/Wayland + Enlightenment~1-2GB日常使用可能なデスクトップ

開発の段階的アプローチ

1

Phase 1: CLI版(基本システム)

  • ブート → ログイン → シェル操作
  • ネットワーク機能
  • 基本ユーティリティ
2

Phase 2: 最小GUI版

  • フレームバッファ + 簡単なUIアプリ
  • または X11 + 最小ウィンドウマネージャ
3

Phase 3: デスクトップ版

  • X11/Wayland + ウィンドウマネージャ
  • ファイルマネージャ、ターミナル
  • ブラウザ等のアプリケーション
4

Phase 4: 独自機能追加

  • カスタムアプリケーション
  • 独自テーマ/ブランディング
  • パッケージ管理システム

Claude Code活用での作業分担

🤖

Claude Codeでできること

  • 設定ファイル作成:Buildrootの.configファイル生成
  • ビルドスクリプト作成:自動化スクリプト
  • カスタムパッケージ定義:独自アプリの追加方法
  • 部分的なビルドテスト:小規模なコンポーネント
  • ドキュメント作成:手順書、設計書
  • QEMUでの起動テスト:CLIベースのテスト
👤

ユーザー側で必要な作業

  • フルビルドの実行:時間がかかる(GUI付きは1-3時間)
  • GUIの実際の表示確認:グラフィカル出力の確認
  • 実機でのテスト:ハードウェア依存の確認

作業フロー

Claude Codeがやること

  • 完全な設定ファイル一式を作成
  • ビルド手順を完全自動化したスクリプト
  • 実行するだけで完成する状態に

ユーザーがやること

  • 生成されたファイルをダウンロード
  • 自分のPC/VMで make 実行
  • 実際のGUIを確認・カスタマイズ

始める前に決定する項目

以下を決定することで、具体的な実装に進めます:

1. ターゲット環境

  • QEMU(仮想マシン)
  • 実機(USB起動など)
  • 両対応

2. Cライブラリの選択

  • glibc:互換性重視(多くのソフトが動く)
  • musl:軽量・シンプル(サイズ小さい)

3. initシステム

  • BusyBox init:最小構成
  • systemd:現代的だが大きい
  • OpenRC:中間的

4. UIレベル

  • CLI のみ(Phase 1)
  • 最小GUI(Phase 2)
  • デスクトップ環境(Phase 3)

参考リンク