🎃

Linuxディストリビューションを自作したいあなたへ

2024/05/05に公開

筆者は初期RAMディスクのないLinuxディストリビューションを作成したことがあるので、そのディストリビューションの作成に役立った情報、書籍、周辺情報についてこの記事に忘れぬよう記載しておきます。
これを見た方の中で少しでも自分でLinuxディストリビューションを作ってみたいと思う方が増えてくれれば幸いです。

最初に

Linuxディストリビューションの自作はハンズオン形式のものがLinux from scratchくらいしかない上に、これはLinuxについて深い知識が要求されるものなので、最初のハードルがかなり高く感じております。
そのため、Linuxシステムを「知っている」から「作れる」のレベルに行くための梯子になるようなものではありません。(LFSはかなりの割合で読む人の事前知識と執念のようなものに頼っていると感じています。)
そこで、筆者がLinuxディストリビューションを自作した際に参考にした情報をこちらで紹介します。

書籍

  1. [試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識
  2. 組み込みLinuxシステム構築 第2版
  3. Linuxカーネル クイックリファレンス
  4. Linuxカーネル Hacks ―パフォーマンス改善、開発効率向上、省電力化のためのテクニック

書籍としては以上の4冊にかなり助けられました。
1冊目は単純にLinuxの基礎知識すらない状態だったのでそこの勉強で利用しました。
2冊目はツールチェーンの構築、ルートファイルシステムの構築、ブートローダーの設定の面で参考にしました。
3, 4冊目はLinuxカーネルのコンフィグレーションの面で助けてもらいました。

サイトやgithubリポジトリ

  1. Linux from scratch
  2. dockerでgolangの実行ファイル1個だけを含むイメージを作って動かす
  3. minimumgo: Linuxでgolangの実行ファイルをひとつだけ動かすときに必要最小限の初期化処理をしてくれるgolangのパッケージ
  4. RancherOS

1つ目のLinux from scratch についてはこれ単体では知識が足りずできなかったのですが、ここから、ツールチェーンを利用する方法であったり、ビルドのスクリプトを参考にしたりとしました。
2,3つ目のサイトはGoで最小のLinuxシステムを構築し動かすといったもので、こちらを読んでLinuxシステムに最低限求められるものを明確にすることができました。
4つ目はLinuxのpid1がdockerになっているということでLinuxって案外いろんなことができるという展望を見れるようになったということで入れています。

ディストリビューション開発で利用したことのあるツール

  1. buildroot
  2. crosstool-ng

buildrootは設定をポチポチすることでLinuxシステムを簡単に作れる優れものです。AWSのbottlerocketのリポジトリにもbuildrootに関するものがちらほら見えるので、設定ファイル類やツールチェーンなどのエコシステムはbuildrootを利用して作成しているのかもしれません。
crosstool-ngは実際に自分が利用したもので、ツールチェーンだけを作ってくれます。
これらのエコシステムをうまく使えると開発効率が上がりそうです。

最後に

初期RAMディスクを導入したものを自作したことはないのでそれをやってみても面白そうです。
あとはpid1をdockerにできるならpid1をk3sにもできそうなのでどこかでチャレンジしてみたいですね。

Discussion