{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/linux-from-scratch","result":{"data":{"markdownRemark":{"id":"e49c5894-d4dc-5348-8b6d-d99d777a3d36","html":"<p>ソースコードから Linux ディストリビューションを作り上げる「Linux From Scratch」をやってみたので、感想をまとめます。</p>\n<h2 id=\"linux-from-scratch-とは\" style=\"position:relative;\"><a href=\"#linux-from-scratch-%E3%81%A8%E3%81%AF\" aria-label=\"linux from scratch とは permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Linux From Scratch とは</h2>\n<p>Linux From Scratch は、各種ソースコードから独自の Linux ディストリビューションを作り上げるプロジェクトで、Linux に興味のある方におすすめされる定番コンテンツの 1 つです。</p>\n<p>公式サイトは以下です。</p>\n<p><a href=\"https://www.linuxfromscratch.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://www.linuxfromscratch.org/</a></p>\n<p>Linux From Scratch 自体、Linux ディストリビューションの一種のように言われることもあるようです。</p>\n<h2 id=\"完成品\" style=\"position:relative;\"><a href=\"#%E5%AE%8C%E6%88%90%E5%93%81\" aria-label=\"完成品 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>完成品</h2>\n<p>最終的に、以下のように Linux が起動するところまでいけました！（感動）</p>\n<center>\n  <video width=\"480\" height=\"412\" controls>\n    <source src=\"/media/linux-from-scratch.mp4\" type=\"video/mp4\">\n  </video>\n</center>\n<h2 id=\"なぜやろうと思った？\" style=\"position:relative;\"><a href=\"#%E3%81%AA%E3%81%9C%E3%82%84%E3%82%8D%E3%81%86%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%9F%EF%BC%9F\" aria-label=\"なぜやろうと思った？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>なぜやろうと思った？</h2>\n<p>個人的に最近自作 ◯◯ を色々とやっているのですが、このあたりで Linux の知識をもう少し拡充したいと思い、挑戦することにしました。</p>\n<h2 id=\"やってみてどうだった？\" style=\"position:relative;\"><a href=\"#%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%A6%E3%81%A9%E3%81%86%E3%81%A0%E3%81%A3%E3%81%9F%EF%BC%9F\" aria-label=\"やってみてどうだった？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>やってみてどうだった？</h2>\n<p>やってみた感想としては、まず何より、やってみて良かったです。</p>\n<p>特に、後述する通りブート周りでかなりハマったので、解決しようと試行錯誤する間に GRUB2 のコマンドやカーネルのコンフィグレーションについて知識がつきました。</p>\n<p>また、クロスコンパイル環境の構築や、chroot を活用した環境構築なども、参考になりました。</p>\n<p>そして何より、「Linux ディストリビューションを作ったことがある」と思えるようになったことは、自信に繋がると感じます。</p>\n<h2 id=\"ハマった点\" style=\"position:relative;\"><a href=\"#%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E7%82%B9\" aria-label=\"ハマった点 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ハマった点</h2>\n<p>Linux From Scratch の手順はしっかりメンテナンスされているので、基本的にそのまま実行すれば問題ありませんでした。</p>\n<p>ひたすら make して make install していくのが中心で、そのあたりで困ることはなかったです。</p>\n<p>唯一、カーネルのコンフィグレーションに関する知識不足で、最後のブートする段階でかなりハマりました。</p>\n<p>自分は KVM の仮想マシンで実施したのですが、/dev/vdb1 をルートファイルシステムとしてマウントするためには、make menuconfig で VIRT 関係のドライバを有効にする必要があります。</p>\n<p>その際、[m] という設定ではモジュールとしてビルドされ、[y] という設定ではカーネルに組み込まれることになります。</p>\n<p>自分は [m] と設定しても /dev/vdb1 を扱うことができず、何がおかしいのかも分からず困っていました。</p>\n<p>そこを [y] に直すことで、しっかり起動してくれました。</p>\n<p>※ [m] のままでも、モジュールをうまくロードする設定をすればいいのかもしれません</p>\n<h2 id=\"どんな人におすすめ？\" style=\"position:relative;\"><a href=\"#%E3%81%A9%E3%82%93%E3%81%AA%E4%BA%BA%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%EF%BC%9F\" aria-label=\"どんな人におすすめ？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>どんな人におすすめ？</h2>\n<p>Linux From Scratch は、Linux についてある程度知識があり、さらに詳しくなりたい方にとてもおすすめです。</p>\n<p>サイトに書かれている通りにコマンドを打てば進めること自体はできるのですが、ある程度前提知識がないと何をやっているのか分からず、あまり勉強にならないと思います。</p>\n<p>そこで例えば、</p>\n<ul>\n<li>『<a href=\"https://amzn.to/3zQNAS1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Linuxのしくみ ～実験と図解で学ぶOSとハードウェアの基礎知識</a>』</li>\n<li>『<a href=\"https://amzn.to/3JOAtoV\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ふつうのLinuxプログラミング 第2版　Linuxの仕組みから学べるgccプログラミングの王道</a>』</li>\n</ul>\n<p>あたりの本を読んで、Linux の仕組みの基礎知識をつけてから取り組むと良いと思います。</p>\n<p><a href=\"https://www.amazon.co.jp/dp/B079YJS1J1?&linkCode=li1&tag=oshimayuki0d-22&linkId=9daa243e993ee631115234b72a49dbf8&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B079YJS1J1&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=oshimayuki0d-22\" ></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=oshimayuki0d-22&amp;l=li1&amp;o=9&amp;a=B079YJS1J1\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\"></p>\n<p><a href=\"https://www.amazon.co.jp/dp/B075ST51Y5?&linkCode=li1&tag=oshimayuki0d-22&linkId=bcd8bca685cb41ea2703266651d2a633&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B075ST51Y5&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=oshimayuki0d-22\" ></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=oshimayuki0d-22&amp;l=li1&amp;o=9&amp;a=B075ST51Y5\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\"></p>\n<p>LPIC で言うとレベル 2 くらいの内容なので、資格取得の片手間に挑戦してみても良いと思います。</p>\n<p><a href=\"https://www.amazon.co.jp/dp/B071JQZ6N5?&linkCode=li1&tag=oshimayuki0d-22&linkId=0fda4d9ea083bc19a52697678ba8bfd2&ref_=as_li_ss_il\" target=\"_blank\"><img border=\"0\" src=\"//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B071JQZ6N5&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=oshimayuki0d-22\" ></a><img src=\"https://ir-jp.amazon-adsystem.com/e/ir?t=oshimayuki0d-22&amp;l=li1&amp;o=9&amp;a=B071JQZ6N5\" width=\"1\" height=\"1\" border=\"0\" alt=\"\" style=\"border:none !important; margin:0px !important;\"></p>\n<h2 id=\"おわりに\" style=\"position:relative;\"><a href=\"#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB\" aria-label=\"おわりに permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>おわりに</h2>\n<p>個人的に最近は低レイヤの知識をつけたいと、自作 CPU、コンパイラ、OS、Linux ディストリビューションなどなど、自作 ◯◯ に色々と挑戦しています。</p>\n<p>次は組み込み OS かデバイスドライバに挑戦したいと考えています。</p>","fields":{"slug":"/posts/linux-from-scratch","tagSlugs":["/tag/linux/"],"autoRecommendPosts":["487311313X","linux-learning-roadmap","linux-next-step-books","how-to-study-linux-basics"]},"frontmatter":{"date":"2022-08-12T06:07:42.059Z","description":"ソースコードから Linux ディストリビューションを作り上げる「Linux From Scratch」をやってみたので、感想をまとめます。","tags":["linux"],"title":"Linux Fron Scratch をやってみての感想","socialImage":null,"recommendPosts":null}}},"pageContext":{"slug":"/posts/linux-from-scratch"}},"staticQueryHashes":["251939775","3942705351","401334301"]}